是否有可能使用ios中的安全框架生成证书签名请求(.csr)?
我想要使用服务器的https请求客户端证书身份validation。 我看着这个NSURLConnection身份validation挑战创build一个SecCertificateRef 。 它按预期工作。
但是,需要准备包含私钥的p12文件。 它会被securied,因为它需要使用SecPKCS12Import()
导入p12文件的密码。
但是,可以有其他的select。 这就是ios客户端应该做一个证书签名请求(.CSR),让第三方(这将是服务器)签名。
对于我的search,我看到我可以使用SecKeyGeneratePair()
生成密钥对。 但是我没有看到任何生成CSR的API。
这是否真的需要openssl来实现呢?
另外,有一点closures的话题,一旦ios客户端以某种方式取回签名的证书。 我可以使用SecCertificateCreateWithData()
来检索一个SecCertificateRef()
。 但要填写NSURLCredential
。 我还需要使用SecPKCS12Import()
从p12文件来的SecPKCS12Import()
。 我怎样才能retreve SecIdentityRef
没有SecPKCS12Import()
而只是像crt
或der
证书文件?
iOS中的安全框架没有对CSR的明确支持。 但是,“手动”构buildCSR并不难 – 它只是在iOS运行时可用的ASN.1 DER数据块。
这是伪代码:
- 使用安全框架中的
SecKeyGeneratePair()
来创build新的公钥/私钥 - 实现
getPublicKeyBits
方法来检索新的公钥的NSDataforms(请参阅https://developer.apple.com/library/ios/samplecode/CryptoExercise/Introduction/Intro.html ) - 实现
getPrivateKey
方法从Keychain中检索SecKeyRef - 按照http://www.ietf.org/rfc/rfc2986.txt在NSMutableData中构造CSR的ASN.1 DER
- 使用CC_SHA1_ *创buildauthentication请求信息(CSR的一部分)的签名散列
- 使用SecKeyRawSign和私钥签名CSR
这将创build适当的CSR(以NSData的forms),可以发送给CA批准。
我的实现在GitHub上可用: http : //github.com/ateska/ios-csr 。