gpt4 book ai didi

ios - 如何使 SecPKCS12Import 正确导入有效的 p12 文件

转载 作者:技术小花猫 更新时间:2023-10-29 10:51:11 28 4
gpt4 key购买 nike

我已经解决了之前将 XML RSA 私钥转换为 PEM 文件的问题,但我遇到了另一个问题,即在导入 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;

    }

以为没有err(OSStatus值为0),但是items数组没有得到任何身份数据。我想知道是否由于错误的 OpenSSL 使用而没有得到正确的 p12 文件格式。有没有人成功导入p12文件?在这个问题上纠结了几天,有知道的请指教,谢谢!

休伯特

最佳答案

我从网上得到了一些提示,以下是获取iOS可接受的p12 key 和认证文件的步骤:

  1. 将 XML 转换为 PEM
    Shell> 编译 XMLSpec2PEM.java
    外壳> XMLSpec2PEM rsa.xml
    将输出结果保存到rsa.pem
    (借自here)

  2. 将 PEM 转换为 RSA 私钥
    OpenSSL> rsa -in rsa.pem -out rsaPrivate.key

  3. 生成认证请求
    OpenSSL> req -new -key rsaPrivate.key -out rsaCertReq.crt
    (输入一些基本的认证数据)

  4. 签署请求证明
    OpenSSL> x509 -req -days 3650 -in rsaCertReq.crt -signkey rsaPrivate.key -out rsaCert.crt

  5. 将认证文件格式转换为DER(iOS可接受的格式)
    OpenSSL> x509 -outform der -in rsaCert.crt -out rsaCert.der

  6. 生成PKCS12私钥(iOS可接受格式)
    OpenSSL> pkcs12 -export -out 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

关于ios - 如何使 SecPKCS12Import 正确导入有效的 p12 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10025807/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com