是否有可能使用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()而只是像crtder证书文件?

iOS中的安全框架没有对CSR的明确支持。 但是,“手动”构buildCSR并不难 – 它只是在iOS运行时可用的ASN.1 DER数据块。

这是伪代码:

  1. 使用安全框架中的SecKeyGeneratePair()来创build新的公钥/私钥
  2. 实现getPublicKeyBits方法来检索新的公钥的NSDataforms(请参阅https://developer.apple.com/library/ios/samplecode/CryptoExercise/Introduction/Intro.html
  3. 实现getPrivateKey方法从Keychain中检索SecKeyRef
  4. 按照http://www.ietf.org/rfc/rfc2986.txt在NSMutableData中构造CSR的ASN.1 DER
  5. 使用CC_SHA1_ *创buildauthentication请求信息(CSR的一部分)的签名散列
  6. 使用SecKeyRawSign和私钥签名CSR

这将创build适当的CSR(以NSData的forms),可以发送给CA批准。

我的实现在GitHub上可用: http : //github.com/ateska/ios-csr 。