1

x509証明書を使用したSOAPメッセージを使用してiPhoneクライアントで作業しています。また、x509 証明書 (client.cert) を使用してメッセージに署名する方法がわかりません。

openssl の使用に関するスレッド トークがありますが、openssl の使用方法がわからないため、Apple のドキュメントを見ています: http://developer.apple.com/library/mac/#documentation/Security/Conceptual/CertKeyTrustProgGuide/iPhone_Tasks /iPhone_Tasks.html 上記のドキュメントには、ポリシー参照オブジェクトを取得して信頼を評価するためのサンプル コードがあります。

    NSString *thePath = [[NSBundle mainBundle]

                      pathForResource:@"Romeo Montegue" ofType:@"cer"];

NSData *certData = [[NSData alloc]

                     initWithContentsOfFile:thePath];

CFDataRef myCertData = (CFDataRef)certData;                 // 1



SecCertificateRef myCert;

myCert = SecCertificateCreateWithData(NULL, myCertData);    // 2



SecPolicyRef myPolicy = SecPolicyCreateBasicX509();         // 3



SecCertificateRef certArray[1] = { myCert };

CFArrayRef myCerts = CFArrayCreate(

                                   NULL, (void *)certArray,

                                   1, NULL);

SecTrustRef myTrust;

OSStatus status = SecTrustCreateWithCertificates(

                                                myCerts,

                                                myPolicy,

                                                &myTrust);  // 4



SecTrustResultType trustResult;

if (status == noErr) {

    status = SecTrustEvaluate(myTrust, &trustResult);       // 5

}
                                                    // 6

if (trustResult == kSecTrustResultRecoverableTrustFailure) {

    ...;

}


if (myPolicy)

    CFRelease(myPolicy);                                    

ただし、ポリシー オブジェクトを使用してメッセージに署名するサンプルはありません。手がかりはありますか?これについてのアイデアや経験があれば、私を助けてください。本当にありがとうございました。

前もって感謝します。

4

1 に答える 1

2

投稿したサイトのSecurityFrameworkAPIをクロールしましたが、SOAPメッセージに署名するためのAPI呼び出しを提供するものは見つかりませんでした。ここに記載されているセキュリティフレームワーク:

http://developer.apple.com/library/mac/#documentation/Security/Reference/SecurityFrameworkReference/_index.html#//apple_ref/doc/uid/TP40004330

証明書を検証し、証明書とキーペアをロードできるようになります。これにより、SSLを設定したり、さまざまな種類の認証を行うことができます。

しかし、デジタル署名を行うことにほとんどうなずき、SOAP署名に近いところはありません。これは、送信先のサービスに受け入れられるように適切にフォーマットする必要がある独自の特殊な種類の署名です。

SOAPメッセージに署名できるAPIはかなりあります。-SSLを開く-弾力がある城-さまざまなJavaEEソリューション-Axis2、JAX-WS-ほぼ確実に.NETの何か

iPhoneアプリには何かあると思っていたのですが、何も掘り下げていませんでした。何も存在しないと言っているサイトが少なくとも1つ見つかりました。また、iPhoneのSOAP全般の処理能力を真剣に掘り下げているサイトもいくつかあります。この環境でのXML解析が難しい場合は、SOAP署名を作成することは、多かれ少なかれ最初から行う必要があります。

Apple固有のコンテキストでこれを必死に実行したい場合は、次のことをお勧めします。

  1. 証明書とキーのペアが手元にあることを確認してください。「client.cer」は、X509証明書のみがあることを示しています。PKCS12(多くの場合、*。p12、*。pfx、*。pem、または*と呼ばれます)のようなものが必要になります。ここで、*は接尾辞のないファイル名です)。署名するには秘密鍵が必要なので、証明書だけでは十分ではありません。
  2. 低レベルを取得できるライブラリを入手してください。署名を行うには、主に3つの部分があります。
    • ソースデータを組み合わせてハッシュを作成する
    • 暗号化を実行して、秘密鍵でハッシュを暗号化します
    • ソースデータ、暗号化されたハッシュ(つまり、署名)、および署名を検証するために必要な情報を適切な形式でまとめます。

SOAP署名の場合、適切な形式の標準は、W3Cによって維持されているXMLDSIG標準によって定義されます。データをハッシュする方法はたくさんあります。そのため、通常、使用しようとしているサービスのニーズを調べるのが最善の方法です。ほとんどのWebサービスは、SOAP署名を作成するための許容可能な方法を教えてくれるポリシーを定義しています。このポリシーを定義するための標準(WS-Policy by OASIS)もありますが、それは普遍的に実装されたソリューションではありません。

AppleCSPモジュールが必要な暗号化(および場合によっては基礎となるハッシュ)を実行するという提案がありますが、生の出力を取得して、SOAP署名標準に再フォーマットすることになります。この領域にはビルド済みのAPIがほとんどない可能性があることを強く示しています。

于 2011-01-05T20:43:21.927 に答える