使用安全框架在 Objective-C 中以编程方式创建 x509 证书

2024-01-06

我正在努力寻找一种使用安全框架在 Objective-C 中以编程方式(自签名)创建 x509 证书的方法。我的项目没有使用 OpenSSL。所以我不能考虑使用OpenSSL。以下是我已经创建的一些内容:

  • 创建 RSA 密钥对。用过的- (void)generateKeyPairPlease功能每苹果的文档 https://developer.apple.com/library/ios/documentation/Security/Conceptual/CertKeyTrustProgGuide/iPhone_Tasks/iPhone_Tasks.html

  • 使用 ios-csr (https://github.com/ateska/ios-csr https://github.com/ateska/ios-csr)创建企业社会责任。请看下面的代码

    SCCSR *sccsr = [[SCCSR alloc]init];
    sccsr.commonName = @"some name";
    sccsr.organizationName = @"some organisation";
    
    NSData *certificateRequest = [sccsr build:pPublicKey privateKey:privateKey];
    NSString *str = [certificateRequest base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
    
    NSString *strCertificateRequest = @"-----BEGIN CERTIFICATE REQUEST-----\n";
    strCertificateRequest = [strCertificateRequest stringByAppendingString:str];
    strCertificateRequest = [strCertificateRequest stringByAppendingString:@"\n-----END CERTIFICATE REQUEST-----\n"];
    
  • 现在我需要创建 X509 证书(自签名)。我使用了下面的代码。

    // Convert to Base64 data
    NSData *base64Data = [certificateRequest base64EncodedDataWithOptions:0];
    SecCertificateRef cer = SecCertificateCreateWithData ( NULL, (__bridge CFDataRef) base64Data);
    NSLog(@"%@", cer);
    
  • cer 似乎为 NULL。SecCertificateCreateWithData需要“X.509 证书的 DER(杰出编码规则)表示”文档 https://developer.apple.com/library/mac/documentation/Security/Reference/certifkeytrustservices/index.html#//apple_ref/c/func/SecCertificateCreateWithData.

我的做法正确吗?重申一下:我有一个 RSA 密钥对(公钥和私钥),已成功生成 CSR(证书签名请求)。现在我需要以编程方式生成 X509 证书。

我使用的是版本 6.2 (6C131e) 和 iOS SDK 8.2。


我认为使用安全框架实际上不可能。 AFAICT,在 iOS/OSX 上执行此操作的唯一方法是使用(已弃用的)CDSA 库或(已弃用的)OpenSSL 库。

有一个图书馆位于https://github.com/snej/MYCrypto https://github.com/snej/MYCrypto它可以做到这一点,但它使用了一些(已弃用的)CDSA/CSSA 调用,并且依赖于许多同一作者的实用程序/库函数,我发现这些函数没有帮助。

我建议您在 bugreporter.apple.com 上提交错误,以表达您希望能够生成 x.509 证书的愿望。我有!

编辑:MYCrypto 作者 (snej) 还有一个简化版本 MYAnonymousIdentity,它采用预先创建的 x.509 自签名证书,并使用最少的 SDK 调用将新的 RSA 密钥/签名注入现有证书。它还使用了他的一些实用程序/库的东西,但我已经为我自己的项目剥离了所有这些内容,您可以找到修改后的代码,我用来生成预装证书的脚本(以及包含所有修改偏移量)位于:https://github.com/Hammerspoon/hammerspoon/tree/master/extensions/httpserver https://github.com/Hammerspoon/hammerspoon/tree/master/extensions/httpserver

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用安全框架在 Objective-C 中以编程方式创建 x509 证书 的相关文章

随机推荐