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

我正在努力寻找一种方法来使用安全框架在Objective-C中以编程方式(自签名)创buildx509证书。 我没有为我的项目使用OpenSSL。 所以我不能考虑使用OpenSSL。 以下是我已经创build的几件事情:

  • 创build了RSA密钥对。 使用- (void)generateKeyPairPlease函数每苹果的文档

  • 使用ios-csr( https://github.com/ateska/ios-csr )创buildCSR。 看下面的代码

     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"]; 
  • 现在我需要创buildX509证书(自签名)。 我使用下面的代码。

     // Convert to Base64 data NSData *base64Data = [certificateRequest base64EncodedDataWithOptions:0]; SecCertificateRef cer = SecCertificateCreateWithData ( NULL, (__bridge CFDataRef) base64Data); NSLog(@"%@", cer); 
  • cer似乎是NULL。 SecCertificateCreateWithData需要根据文档 “X.509证书的DER( SecCertificateCreateWithData编码规则)”表示。

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

我正在使用版本6.2(6C131e)和iOS SDK 8.2。

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

https://github.com/snej/MYCrypto有一个库,可以这样做,但它使用了一些(不赞成使用的)CDSA / CSSA调用,并且依赖于很多相同的作者的实用程序/库函数我发现是无益的。

我build议你在bugreporter.apple.com上提交一个bug来表示你希望能够生成x.509证书。 我有!

编辑:MYCrypto作者(snej)也有一个简化的版本,MYAnonymousIdentity,它采用预先创build的x.509自签名证书,并使用最less的SDK调用将新的RSA密钥/签名插入到现有证书中。 它也使用了他的一些实用程序/库的东西,但我已经剥离了所有这些为我自己的项目,你可以find修改的代码,我用来生成预先封装的证书的脚本(和一个头文件包含所有的偏移修改)在: https : //github.com/Hammerspoon/hammerspoon/tree/master/extensions/httpserver