是否可以使用ios中的安全框架生成证书签名请求(.csr)?

Yeu*_*ung 4 ssl openssl csr ssl-certificate ios

我想用服务器进行https请求需要客户端证书身份验证.我查看了为NSURLConnection身份验证挑战创建SecCertificateRef.它按预期工作.

但是,它需要准备包含私钥的p12文件.这将是安全的,因为它需要密码来导入p12文件使用SecPKCS12Import().

但是,可能还有其他选择.那就是ios-client应该签署证书签名请求(.CSR)并让第三方(它将是服务器)签名.

对于我的搜索,我看到我可以SecKeyGeneratePair()用于生成密钥对.但我没有看到任何生成CSR的API.

真的需要openssl才能实现这个目标吗?

此外,有点偏离主题,一旦ios-client以某种方式取回签名证书.我可以SecCertificateCreateWithData()用来检索一个SecCertificateRef().但是,填写一个NSURLCredential.我还需要SecIdentityRef使用来自p12文件的 SecPKCS12Import().我怎样才能恢复一个SecIdentityRef没有SecPKCS12Import()但只是一个像crt或的证书文件der

Ale*_*ska 8

iOS中的安全框架中没有明确支持CSR.但是,"手动"构建CSR并不困难 - 它只是iOS运行时可用的ASN.1 DER数据块.

这是伪代码:

  1. 使用SecKeyGeneratePair()安全框架创建新的公钥/私钥
  2. 实现getPublicKeyBits检索NSData形式的新公钥的方法(参见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_*创建认证请求信息的签名哈希(CSR的一部分)
  6. 使用SecKeyRawSign和私钥来签署CSR

这将创建适当的CSR(以NSData的形式),可以发送给CA进行审批.

我的实现可以在GitHub上找到:http://github.com/ateska/ios-csr.