Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用安全框架在Objective-C中以编程方式创建x509证书_Ios_Objective C_Iphone_Security - Fatal编程技术网

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

Ios 使用安全框架在Objective-C中以编程方式创建x509证书,ios,objective-c,iphone,security,Ios,Objective C,Iphone,Security,我正在努力寻找一种使用安全框架在Objective-C中以编程方式(自签名)创建x509证书的方法。我的项目没有使用OpenSSL。所以我不能考虑使用OpenSSL。以下是我已经创建的一些东西: 创建了RSA密钥对。已使用的-(void)generateKeyPairPlease函数 使用ios csr()创建csr。请参阅下面的代码 SCCSR *sccsr = [[SCCSR alloc]init]; sccsr.commonName = @"some name"; sccsr.organ

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

  • 创建了RSA密钥对。已使用的
    -(void)generateKeyPairPlease
    函数

  • 使用ios csr()创建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似乎为空。
    SecCertificateCreateWithData
    需要“X.509证书的DER(可分辨编码规则)表示”,如所示

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


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

我认为使用安全框架实际上是不可能的。在iOS/OSX上实现这一点的唯一方法是使用(不推荐使用的)CDSA库或(不推荐使用的)OpenSSL库

有一个库可以做到这一点,但它使用了一些(不推荐使用的)CDSA/CSSA调用,并且依赖于同一作者的许多实用程序/库函数,我发现这是没有帮助的

我建议您在bugreporter.apple.com上提交一个bug,以表示您希望能够生成x.509证书。我有


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

它真的是OpneSSL不推荐用于iOS。如果我推送使用OpenSSL的应用程序会发生什么情况?@Ramis我不确定,但我相信SDK中不再包含标题,因此您可能无法推送应用程序!我知道这个线程很旧,但是您可以使用OpenSSL–您只需要自己管理一切(编译库,包括头文件)。苹果表示,他们不再在iOS/macOS中支持OpenSSL;但是,您可以像任何其他外部库(libnaude等)一样自由地包含它,并且应该允许您将这些应用推送到AppStore。