是否可以在ios中使用secuity框架生成证书签署请求(.csr)?[英] Is it possible to generate certificate signing request(.csr) using secuity framework in ios?

本文是小编为大家收集整理的关于是否可以在ios中使用secuity框架生成证书签署请求(.csr)?的处理方法,想解了是否可以在ios中使用secuity框架生成证书签署请求(.csr)?的问题怎么解决?是否可以在ios中使用secuity框架生成证书签署请求(.csr)?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我想向需要客户端证书身份验证的服务器发出 https 请求.我查看了这个 为 NSURLConnection 身份验证挑战创建 SecCertificateRef .它按预期工作.

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

导入 p12 文件

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

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

真的需要 openssl 来实现吗?

另外,有点跑题了,一旦 ios 客户端以某种方式取回签名证书.我可以使用 SecCertificateCreateWithData() 来检索 SecCertificateRef().但是,要填写一个 NSURLCredential .我还需要来自 p12 文件的 SecIdentityRef 使用SecPKCS12Import().如何在没有 SecPKCS12Import() 的情况下检索 SecIdentityRef 而只是像 crt 或 der 这样的证书文件?

推荐答案

iOS 的 Security Framework 中没有明确支持 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构建ASN.1NSMutableData 中 CSR 的 DER
  5. 使用 CC_SHA1_* 创建认证请求信息的签名哈希(CSR 的一部分)
  6. 使用 SecKeyRawSign 和私钥签署 CSR

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

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

本文地址:https://www.itbaoku.cn/post/924332.html