如何进行有效的P12文件由SecPKCS12Import正确导入(How to make a val

2019-06-23 10:12发布

我已经解决了我的XML RSA私钥转换为PEM文件previos问题,但我碰到的另一个问题进口P12私钥时,我得到空数据。 以下是我的步骤:

  1. 转换PEM文件P12文件

     openssl> pkcs12 -export -in rsa.pem -inkey rsa.pem -out rsa.p12 -nocerts 
  2. 阅读P12文件到iOS项目

     NSString *path = [[NSBundle bundleForClass:[self class]] pathForResource:@"MyPrivateKey" ofType:@"p12"]; NSData *p12data = [NSData dataWithContentsOfFile:path]; if (![self getPrivateKeyRef]) RSAPrivateKey = getPrivateKeywithRawKey(p12data); 
  3. 进口P12私钥

     SecKeyRef getPrivateKeywithRawKey(NSData *pfxkeydata) { NSMutableDictionary * options = [[[NSMutableDictionary alloc] init] autorelease]; // Set the public key query dictionary //change to your .pfx password here [options setObject:@"MyPassword" forKey:(id)kSecImportExportPassphrase]; CFArrayRef items = CFArrayCreate(NULL, 0, 0, NULL); OSStatus securityError = SecPKCS12Import((CFDataRef) pfxkeydata, (CFDictionaryRef)options, &items); CFDictionaryRef identityDict = CFArrayGetValueAtIndex(items, 0); SecIdentityRef identityApp = (SecIdentityRef)CFDictionaryGetValue(identityDict, kSecImportItemIdentity); //NSLog(@"%@", securityError); assert(securityError == noErr); SecKeyRef privateKeyRef; SecIdentityCopyPrivateKey(identityApp, &privateKeyRef); return privateKeyRef; } 

认为没有犯错(OSStatus值为0),但项目阵列没有得到任何身份数据。 我想知道,如果我没有得到正确的P12文件格式,由于错误的OpenSSL的使用。 有没有人成功地导入P12文件? 我坚持在这个问题上几天的,请给我通知:如果你有线索,谢谢!

休伯特

Answer 1:

我从网上得到一些提示和以下是得到的iOS接受P12密钥和认证文件的步骤:

  1. XML转换为PEM
    壳牌>编译XMLSpec2PEM.java
    壳牌> XMLSpec2PEM rsa.xml
    保存输出结果rsa.pem
    (从借这里 )

  2. 转换到PEM RSA私钥
    OpenSSL的> RSA -in rsa.pem退房手续rsaPrivate.key

  3. 生成一个证书申请
    OpenSSL的> REQ -new -key rsaPrivate.key退房手续rsaCertReq.crt
    (输入一些基本的认证数据)

  4. 登录请求的认证
    OpenSSL的> X509 -req -days 3650 -in rsaCertReq.crt -signkey rsaPrivate.key退房手续rsaCert.crt

  5. 转换的认证文件格式DER(iOS版可接受的格式)
    OpenSSL的> X509 -outform DER -in rsaCert.crt退房手续rsaCert.der

  6. PKCS12生成私钥(iOS版可接受的格式)
    OpenSSL的> PKCS12 -export退房手续rsaPrivate.pfx -inkey rsaPrivate.key -in rsaCert.crt

没有进一步的步骤,在步骤5和6生成的文件现在可以在iOS中使用!

的OpenSSL的指令参考:
http://blogs.yaclife.com/?tag=ios%E3%80%80seckeyref%E3%80%80raw%E3%80%80key%E3%80%80rsa%E3%80%803des

http://devsec.org/info/ssl-cert.html



文章来源: How to make a valid p12 file to be correctly imported by SecPKCS12Import