11

XML RSA秘密鍵をPEMファイルに変換するという以前の問題は解決しましたが、P12秘密鍵をインポートするときにnullデータを取得するという別の問題が発生しました。以下は私の手順です。

  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配列はIDデータを取得しませんでした。OpenSSlの使用法が間違っているために、正しいp12ファイル形式を取得できなかったのではないかと思います。誰かがp12ファイルを正常にインポートしましたか?私はこの問題に数日間立ち往生しています。手がかりがあればアドバイスをください、ありがとう!

ヒューバート

4

1 に答える 1

8

インターネットからいくつかのヒントを入手しました。iOSで受け入れ可能なp12キーと認証ファイルを取得する手順は次のとおりです。

  1. XMLをPEM
    シェルに変換>XMLSpec2PEM.java
    シェルをコンパイル>XMLSpec2PEMrsa.xml
    は、出力結果をrsa.pemに保存します
    (ここから借用します

  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

于 2012-04-06T03:10:27.017 に答える