2010-12-30 23 views
1

x509証明書付きのSOAPメッセージを使用してiPhoneクライアントで作業しています。 そして、私はx509証明書(client.cert)を使ってメッセージに署名する方法を知らない。iOS - x509証明書でSOAPメッセージに署名する方法

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);          

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

ありがとうございます。

答えて

2

あなたが投稿したサイトのSecurity Framework APIをクロールしましたが、SOAPメッセージに署名できるAPIコールを提供するものはありません。ここでは、文書化のセキュリティフレームワーク:

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

は、証明書を検証してみましょう、と証明書と鍵ペアをロードします。それはあなたにいくつかのSSLのもの、そして様々な種類の許可を設定させるでしょう。

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

あなたはSOAPメッセージに署名できるようになるかなりの数のAPIがあります: - オープンSSL - 弾む城 - さまざまなJava EEソリューション - Axis2の、JAX-WS - .NET

Iでほぼ確実に何かiPhoneアプリのために何かがあると思っていましたが、何も探していないし、何も存在しないと言っているサイトが少なくとも1つ見つかり、iPhoneの一般的な処理能力。この環境でのXML解析が難しい場合は、SOAPシグネチャを作成することは、何度も何度もやり直す必要があります。

あなたは必死にアップル固有のコンテキストでこれを行うにしたい場合は、私が推薦する:

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

、適切なフォーマットのための標準は、W3Cによって維持XMLDSIG標準によって定義されます。大量のデータをハッシュする方法があります。そのため、通常は、使用しようとしているサービスのニーズを調べるのが最善の方法です。ほとんどのWebサービスは、SOAPシグネチャを構築するための許容可能な方法が何であるかを示すポリシーを定義します。このポリシー(OASISによるWS-Policy)を定義するための基準さえありますが、それは普遍的に実装されたソリューションではありません。

AppleCSPモジュールが必要とする暗号化(場合によっては基本的なハッシュ化も)を行うことを提案していますが、生の出力を取り出してSOAP署名標準に再フォーマットするようになります。この分野ではあまり組み立てられていないAPIがあるかもしれないという強い示唆を得ています。

+0

ありがとうございましたbethlakshmi somuchそのような詳細な答えです。私はopenSSLとAxis2を試しています(これを使ってサーバーをサインしてください)。私はこれをさらに進めてくれることを願っています。 –

+0

Axis 2をお試しの場合は、具体的にはRampartを掘り下げてください。SOAP署名とそれを設定するためのサンプルポリシーのいくつかの良い例があります。完璧ではありませんが、ランプパルトのホームページにはいくつかの出発点があります。 – bethlakshmi

関連する問題