WSセキュリティを利用してSOAPリクエストを処理する方法

WSセキュリティは、Webサービスセキュリティ:SOAPメッセージセキュリティという正式名称をもち、OASIS (Organization for the Advancement of Structured Information Standards) によって定められた、SOAPメッセージの署名や暗号化する方式です。Product Advertising APIでは、WSセキュリティ バージョン1.0の仕様をサポートしています。WSセキュリティ1.0の仕様に関する詳細は OASIS-Open web site for WS-Security または http://www.xmlconsortium.org/wg/sec/wss.html をご参照ください。

[ヒント]ヒント

WSセキュリティの要件を最も簡単に満たす方法は、WSセキュリティ1.0とX.509証明書をサポートしているSOAPツールキットをご利用になる方法です。

[警告]警告

リクエストを安全かつ正確に送信するためには、全てのSOAPリクエストはHTTP転送を介して送信されなければなりません。

X.509 証明書

SOAPにおいてWSセキュリティを利用する場合、リクエストの認証のためにはX.509証明書を使用しなければなりません。X.509証明書は、公開キーとその証明書を格納するセキュリティトークンです。X.509証明書は、公開キーとその証明書を第三者が保証することで安全にやりとりするための基盤であるPublic Key Infrastructure (PKI)において使用されています。PKI は、認証を必要とする多くの場面で一般的に利用されています。PKIとX.509証明書についての詳細については、Techencyclopedia.comの digital certificate および PKI の項目をご参照ください。

[注]注意

Product Advertising APIでは、公開キー基盤の全てを提供しているわけではありません。証明書情報は、Product Advertising APIに送信されるリクエストを認証する目的においてのみ使用されます。X.509証明書は、公開キーの送信においてのみ使用され、その他含まれる可能性のある証明情報は使用されません。

WSセキュリティ1.0の仕様では、X.509証明書に関連付けられたプライベートキーによってSOAPメッセージに署名を行い、このX.509証明書をSOAPメッセージのヘッダに含めていただくことが必要です。具体的には、WSセキュリティ X.509トークンのプロファイルとして定義されているように、X.509証明書を BinarySecurityToken して例示していただかなければなりません。 (以下からも入手いただけます: the OASIS-Open web site).

ご自身のX.509証明書またはAWSによって作成された証明書をご利用いただくことも可能です。以下は、ご自身の証明書をAWSにアップロードしてAWSが生成した証明書を取得する方法についてのご説明となります。外部の認証機関によって作成された証明書を取得するには、その機関によって提供されている方法で取得を行ってください。

ご自身の証明書を利用する

既にご利用になりたいX.509証明書をお持ちの場合、証明書をAWSにアップロードしていただくことが可能です(プライベートキーの値は除く)。アップロードされた証明書は、自動的にお客様のAWSアカウントに関連付けられます。

AWSは、有効ないずれの文法ならびに暗号によるX.509証明書を処理します。証明書は自己署名またはいずれのキーによる署名も有効となります。証明書はプライバシー強化メール(PEM)形式である必要があり、バイナリーのDER (Distinguished Encoding Rules)形式のbase64エンコーディングの証明書を含まなければなりません。

[重要]重要

証明書をアップロードする際、AWSは証明書の内容をチェックし、証明書が期限切れになっていないかを確認します。AWSは、アップロードされた証明書が失効状況についての証明書失効リスト(CRL)による確認や、証明書の有効性についての認証局(CA)やその他の信頼された機関への確認は行いません。

ご自身のX.509証明書をアップロードする方法

  1. Amazon WebサービスのWebサイト http://aws.amazon.com.にジャンプします。

  2. Your Accountにマウスのポインタを合わせて、Access Identifiers をクリックします。

  3. View Access Key Identifiers (お客様のアクセスキー識別子)をクリックし、Your AWS Accountにログインします。

    AWS Access Key Identifiers のページが表示されます。

  4. X.509 Certificate (X.509証明書)と表示されている部分までスクロールし、 Upload をクリックします。

  5. ページに表示される手順に従って、ご自分の証明書をアップロードします。

AWSによって作成された証明書を使用する

もしX.509証明書をお持ちでない場合、あるいは、AWSで利用するための証明書を新たに作成したい場合は、AWSを使用して証明書を作成し、自動的にご自身のAWSアカウントに関連付けることができます。AWSによって作成された証明書は、AWSの内部機関によって署名されたものとなります。

AWSを使用してX.509証明書を作成する方法

  1. Amazon WebサービスのWebサイト http://aws.amazon.com.にジャンプします。

  2. Your Account にマウスのポインタを合わせ、メニューのリストを表示します。

  3. View Access Key Identifiers (お客様のアクセスキー識別子)をクリックし、アカウントにログインします。

    AWS Access Key Identifiers のページが表示されます。

  4. X.509 Certificate (X.509証明書)と表示されている部分までスクロールし、Create New をクリックします。

    Create a New Certificate (新しい証明書を作成) のページが表示されます。

  5. ページに表示される情報をお読みいただき、証明書を作成するには Yes をクリックします。

    Create Success (証明書の作成に成功しました) のページが表示されます。

  6. Download your private key file and X.509 certificate file.

    [重要]重要

    証明書をダウンロードする前に、ブラウザのウィンドウを閉じないようご注意ください。ウィンドウを閉じてしまうと、証明書を再度作成し直していただくことになります。

署名が必要な部分

全てのSOAPリクエストは、X.509証明書と関連付けられたプライベートキーによって署名されていなければなりません。To create the signature, you sign the タイムスタンプ 署名を作成するには、Timesttamp要素への署名、およびWSアドレッシングを利用されている場合は、 Action ヘッダ要素への署名を行うことを推奨します。また、オプションとして、 Body および To ヘッダ要素へ署名いただくことも可能です。

トラブルシューティングの際に使用可能なリクエストの例

以下の例はWSセキュリティとX.509証明書を利用したSOAPリクエストの最初の部分を表示したものです。もしお客様がWSセキュリティとX.509証明書をサポートしているSOAPツールキットをご利用の場合、ツールキットが自動的にリクエストを作成しますので、ご自分でリクエストを作成していただく必要はありません。以下の例は、SOAPリクエストにおいて認証関連の問題のトラブルシューティングが必要になった場合にご参照いただけます。表示した例の下部に、要件の一覧も表示されており、例の中でどのように要件が使用されるかを説明しています。

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header>
  <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">

  <wsse:BinarySecurityToken
    xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
    1 EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary"
    2 ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"
    wsu:Id="CertId-1064304">
       3 [Your base64 encoded X.509 certificate…]
  </wsse:BinarySecurityToken>


  <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
    <ds:SignedInfo>
    <ds:CanonicalizationMethod 4Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></ds:CanonicalizationMethod>
      <ds:SignatureMethod 5 Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"></ds:SignatureMethod>

     <ds:Reference URI="#id-17984263">
        <ds:Transforms>
          <ds:Transform 6 Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></ds:Transform>
        </ds:Transforms>
        <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></ds:DigestMethod>
        <ds:DigestValue>0pjZ1+TvgPf6uG7o+Yp3l2YdGZ4=</ds:DigestValue>
     </ds:Reference>

    <ds:Reference URI="#id-15778003">
      <ds:Transforms>
        <ds:Transform 6 Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></ds:Transform>
      </ds:Transforms>
      <ds:DigestMethod 7 Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></ds:DigestMethod>
      <ds:DigestValue>HhRbxBBmc2OO348f8nLNZyo4AOM=</ds:DigestValue>
    </ds:Reference>

    </ds:SignedInfo>

    <ds:SignatureValue>bmVx24Qom4kd9QQtclxWIlgLk4QsQBPaKESi79x479xgbO9PEStXMiHZuBAi9luuKdNTcfQ8UE/d
       jjHKZKEQRCOlLVy0Dn5ZL1RlMHsv+OzJzzvIJFTq3LQKNrzJzsNe</ds:SignatureValue>

    <ds:KeyInfo Id="KeyId-17007273">
      8 <wsse:SecurityTokenReference
        xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" 
        wsu:Id="STRId-22438818">
        <wsse:Reference URI="#CertId-1064304"
           ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3">
        </wsse:Reference>
      </wsse:SecurityTokenReference>
    </ds:KeyInfo>

  </ds:Signature>


  <wsu:Timestamp
    xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" 
    9wsu:Id="id-17984263">
    <wsu:Created>2006-06-09T10:57:35Z</wsu:Created>
    <wsu:Expires>2006-06-09T11:02:35Z</wsu:Expires>
  </wsu:Timestamp>

  </wsse:Security>
</SOAP-ENV:Header>

BinarySecurityTokenおよびSignaturesの要件

1

EncodingType 属性 ( BinarySecurityToken 要素に使用) は、以下のものでなければなりません:

http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary

2

ValueType 属性 ( BinarySecurityToken 要素に使用) は、以下のものでなければなりません:

http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3

または:

http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509PKIPathv1

3

BinarySecurityToken 要素は、 ValueType#X509v3であった場合はX.509証明書のリーフ要素のbase64エンコードを含まなければなりません。 ValueType#X509PKIPathv1であった場合は、完全なX.509証明書の鍵束のbase64エンコードを含む必要があります。

4

Algorithm 属性 ( CanonicalizationMethod 要素で使用) は、以下のものでなければなりません:

http://www.w3.org/2001/10/xml-exc-c14n#

5

Algorithm 属性 ( SignatureMethod 要素で使用) は、以下のものでなければなりません:

http://www.w3.org/2000/09/xmldsig#rsa-sha1

6

Algorithm 属性 ( Transform 要素で、各 Reference 要素に適用) は、以下のいずれかでなければなりません:

http://www.w3.org/2001/10/xml-exc-c14n#

または:

http://www.w3.org/TR/2001/REC-xml-c14n-20010315

7

Algorithm 属性 ( DigestMethod 要素で、各 Reference 要素に適用) は、以下のものでなければなりません:

http://www.w3.org/2000/09/xmldsig#sha1

8

KeyInfo 要素は、 SecurityTokenReference 要素を含む必要があります。 SecurityTokenReference 要素は、 Reference 要素に URI 属性を付与したものを含む必要があります。 URI 属性は、X.509証明書を含んだ BinarySecurityToken 要素を定義するために、ローカル参照を使用しなければなりません(例えば、上記のリクエストサンプルにおいて、 URI 属性は #CertId-1064304 と同一です)。

9

お客様が署名される全てのメッセージ要素には wsu:Id 属性を含めなければなりません。署名は、どのSOAPのヘッダまたはSOAPの Body全体に行っていただくことも可能です。他の要素(例えば、 Body 要素の子要素など)には署名を行わないようご注意ください。AWSは署名認証において、 wsu:ID 属性を含めていただいていたとしても、これらの要素は無視します。署名を含めてはならない要素に署名を行っている場合は、署名認証自体が正しく行われず、エラーとなります。