0

WS-Securityを使用している.NETWebサービスを呼び出す必要があるJAXWS-RIクライアントを作成しています。サービスのWSDLにはWS-Security情報が含まれていませんが、サービスの作成者からのSOAPメッセージの例があり、X:509トークンを含むwsse:Securityヘッダーを含める必要があることを知っています。

私は調査を行っており、AxisおよびCXF(Rampartおよび/またはWSS4Jと組み合わせて)からこのタイプのWebサービスを呼び出す例を見てきましたが、プレーンなJAXWS-RI自体の使用については何もありません。ただし、(残念ながら)政府のクライアントによるJAXWS-RIの使用には制約があります。JAXWS-RIからこれを行う例/ドキュメントはありますか?

最終的に、次のようなSOAPヘッダーを生成する必要があります。これは、サービスの作成者によって作成された.NETクライアントからのサンプルsoap:headerです。(注:独自の値を指定する必要がある場所に「VALUE_HERE」文字列を配置しました)

<soapenv:Envelope xmlns:iri="http://EOIR/IRIES" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
  <soapenv:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
    <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401- wss-wssecurity-secext-1.0.xsd">
     <xenc:EncryptedKey Id="VALUE_HERE">
       <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p"/>
       <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
          <wsse:SecurityTokenReference>
             <wsse:KeyIdentifier EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3">
             VALUE_HERE
            </wsse:KeyIdentifier>
         </wsse:SecurityTokenReference>
       </ds:KeyInfo>
       <xenc:CipherData>
          <xenc:CipherValue>VALUE_HERE</xenc:CipherValue>
       </xenc:CipherData>
       <xenc:ReferenceList>
         <xenc:DataReference URI="#EncDataId-8"/>
       </xenc:ReferenceList>
    </xenc:EncryptedKey>
  </wsse:Security>
4

3 に答える 3

1

ポートを設定してみてください

com.sun.xml.ws.api.security.CallbackHandlerFeature

それはのカスタム実装を使用します

javax.security.auth.callback.CallbackHandler

を受け入れる

java.security.PrivateKey

java.security.cert.X509Certificate

クラスパス上のリソースからロードします。これについては、http: //upthescala.blogspot.com/2010/03/essential-sources-for-jax-ws-x509.htmlにブログを書きました。

ポートの構成例 (ファイルからの秘密鍵と X.509 証明書のロードを含む) については、com.sun.xml.ws.commons.EC2 (上記のブログ エントリにリンクされているソース ダウンロード内) を参照してください。

もっとコードを投稿したいのですが、開発ボックスを持っていないので、実際にテストすることはできません。

幸運を!

于 2010-03-03T03:10:11.980 に答える
1

かなり長い間これに取り組んだ後、ここの開発者チームはこれを行うことができないと判断しました. WS-Security を使用する .NET WSE 3.0 Web サービスからの応答を正しく呼び出して処理する Metro(JAXWS-RI+WSIT) クライアントを作成することはできませんでした。ただし、将来このようなことを試みる可能性がある人のために、さまざまなアプローチを書き留めておきたいと思いました.

要約すると: 1. 最初のパス: MutualCerticates11 セキュリティ (WS-Addressing、暗号化、署名、安全な対話 (ws-trust)) を備えた WSE 3.0 Web サービス。WS-Policy スニペットをリバース エンジニアリングして WSDL のローカル コピーに配置し、これを処理しましたが、安全な会話の初期ハンドシェイク要求を WSE が受け入れることができませんでした。

  1. 次に、WSE 3.0 MutualCerticates10 にダウングレードしました。これは、「相互運用性が向上した」という噂が流れているためです。ここでも、安全な会話ハンドシェイクを機能させることができませんでした。

  2. 私たちは、.NET チームに、SecureConversation (WS-Trust) レイヤー (まだ存在する暗号化と署名の要件) をオフにするように依頼しました。ここでも、WS-Policy ファイルをリバース エンジニアリングしました (基本的に、WS-Trust/SC を扱う「BootstrapPolicy」セクションを削除しただけです)。この時点で、暗号化され署名されたメッセージを彼らに送信することができ、彼らはそれを受け取り、メッセージを送り返しました. これは勝利だと思っていましたが、残念ながら、WSIT は正規化エラーで応答メッセージを詰まらせてしまいました。この時点で、WSIT は WSE 3.0 (WCF のみ) との相互運用性を主張していないため、WSIT の限界に達したと思います。そのため、フォーラムで WSIT 担当者と話し、問題を記録しました。これがそのリンクです。

  3. そのため、.NET チームが暗号化/署名レイヤーをオンのままにしておくことは不可能であると結論付けました (いずれにせよ、現時点では、WSIT チームはいずれバグを修正する可能性があります)。残念ながら、署名だけをオフにして暗号化を残すことはできません。

  4. また、(.NET) 側の WS-Security 設定を完全にオフにするよう依頼したところ、その時点で、JAXWS-RI を使用してサービスからリクエストを送信し、レスポンスを受信することができました。ただし、本番環境ではこの方法でデプロイできない場合があります。

  5. そのため、.NET チームは、WS-Security 設定なしで本番環境で Web サービスを実行できるかどうかを判断する必要があります。そうでない場合は、WCF にアップグレードするまでサービスに接続できません。そして実際、WCF にアップグレードすることをずっと彼らに勧めてきましたが、今ではその理由について知りたいと思っている以上によく知っています。

于 2010-05-18T21:30:19.480 に答える
0

この問題を解決するためにまだいくつかの問題に取り組んでいますが、解決したアプローチの詳細を更新したいと思いました。最初に気付いたのは、JAXWS-RI 2.1 の使用から Metro 2.0 にアップグレードする必要があるということでした。以前はこのプロジェクトで JAXWSRI-2.1 を使用していましたが、これまで WS-Security を扱う必要はありませんでした。とにかく、アップグレードする必要があることに気付いたので、Metro 2.0 とそれに含まれる WSIT jar を活用するためにアップグレードを行いました。その後、サービスの WSDL ファイルから WS-Policy 情報を取得せずに必要な WS-Security ヘッダーを生成する方法について、まだ混乱していました。LES2 によって提案された API を使用して CallbackHandlerFeature を設定しようとしましたが、ヘッダーが生成されませんでした。そこで、Java の Metro/JAXB ボードに質問を投稿しました。

http://forums.java.net/jive/message.jspa?messageID=392451#392451

それに対する回答の中で、ある回答者は、NetBeans を使用してダミーの Web サービスを作成し、.NET のサービスが使用していたセキュリティ設定をセットアップすることを提案しました。これを実行すると、NetBeans によって wsit-.xml ファイルに WS-Policy セクションが生成され、これを使用できるようになりました。その WS-Policy セクションを .NET サービスの WSDL のローカル コピーにプラグインし、それを使用して WEB-INF/classes ディレクトリに配置する wsit-client.xml ファイルを作成しました。

これを行うと、Metro/WSIT は要求する WS-Security ヘッダーの追加を開始しました。その後、Metro が .NET サービスで必要とされるものとは異なるバージョンの WS-Addressing を使用していたため (MemberSubmissionAddressing を使用)、いくつかの問題に直面していました。そのため、WS-Policy 設定を微調整して使用することになりました

<wsap:UsingAddressing                   xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" />

現在、SOAP リクエストが次のようになっているところまで来ました。

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:exc14n="http://www.w3.org/2001/10/xml-exc-c14n#" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
<S:Header>
<To xmlns="http://schemas.xmlsoap.org/ws/2004/08/addressing" wsu:Id="_5003">https://10.49.38.78/2009/12/CaseDetailsService.asmx</To>
<Action xmlns="http://schemas.xmlsoap.org/ws/2004/08/addressing" wsu:Id="_5004">http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT</Action>
<ReplyTo xmlns="http://schemas.xmlsoap.org/ws/2004/08/addressing" wsu:Id="_5002">
    <Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</Address>
</ReplyTo>
<MessageID xmlns="http://schemas.xmlsoap.org/ws/2004/08/addressing" wsu:Id="_5005">uuid:89a0dfdf-014c-4be7-a677-ab1b4d30cdb5</MessageID>
<wsse:Security S:mustUnderstand="1">
  <wsu:Timestamp xmlns:ns10="http://www.w3.org/2003/05/soap-envelope" 
       xmlns:ns11="http://docs.oasis-open.org/ws-sx/ws-secureconversation/200512" xmlns:ns12="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity" wsu:Id="_3">
       <wsu:Created>2010-03-22T19:48:04Z</wsu:Created>
       <wsu:Expires>2010-03-22T19:53:04Z</wsu:Expires> 
    </wsu:Timestamp>
    <wsse:BinarySecurityToken xmlns:ns10="http://www.w3.org/2003/05/soap-envelope" 
    xmlns:ns11="http://docs.oasis-open.org/ws-sx/ws-secureconversation/200512" 
    xmlns:ns12="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity" 
    wsu:Id="uuid_e861f15d-dd66-4b05-b101-c9fed7feda38" 
    EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3">DATA_HERE
</wsse:BinarySecurityToken>
<xenc:EncryptedKey xmlns:ns10="http://www.w3.org/2003/05/soap-envelope" xmlns:ns11="http://docs.oasis-open.org/ws-sx/ws-secureconversation/200512" xmlns:ns12="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity" Id="_5007">
<xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p"/>
<ds:KeyInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="KeyInfoType">
<wsse:SecurityTokenReference>
<ds:X509Data>
<ds:X509IssuerSerial>
<ds:X509IssuerName>CN=server</ds:X509IssuerName>
<ds:X509SerialNumber>-24583240032357195994117623470001087391</ds:X509SerialNumber>
</ds:X509IssuerSerial>
</ds:X509Data>
</wsse:SecurityTokenReference>
</ds:KeyInfo>
<xenc:CipherData>
<xenc:CipherValue></xenc:CipherValue>
</xenc:CipherData>
<xenc:ReferenceList>
<xenc:DataReference URI="#_5008"/>
</xenc:ReferenceList>
</xenc:EncryptedKey>
<ds:Signature xmlns:ns10="http://www.w3.org/2003/05/soap-envelope" 
xmlns:ns11="http://docs.oasis-open.org/ws-sx/ws-secureconversation/200512" xmlns:ns12="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity" Id="_1">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
<exc14n:InclusiveNamespaces PrefixList="wsse S"/>
</ds:CanonicalizationMethod>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<ds:Reference URI="#_5002">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
<exc14n:InclusiveNamespaces PrefixList="S"/>
</ds:Transform>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>vtf9n+OcI1nT0exavD4/ZQy6jm8=</ds:DigestValue></ds:Reference>
<ds:Reference URI="#_5003">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"><exc14n:InclusiveNamespaces PrefixList="S"/></ds:Transform>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>
</ds:DigestValue>
</ds:Reference>
<ds:Reference URI="#_5004"><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
<exc14n:InclusiveNamespaces PrefixList="S"/>
</ds:Transform>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue></ds:DigestValue>
</ds:Reference>
<ds:Reference URI="#_5005"><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"><exc14n:InclusiveNamespaces PrefixList="S"/></ds:Transform></ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><ds:DigestValue>hn2umVvzokVW6dgXUzXcG00vfq8=</ds:DigestValue>
</ds:Reference><ds:Reference URI="#_5006"><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"><exc14n:InclusiveNamespaces PrefixList="S"/>
</ds:Transform></ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>MIH/94A7R2iHn/und3ElJLRTWKY=</ds:DigestValue>
</ds:Reference><ds:Reference URI="#_3"><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
<exc14n:InclusiveNamespaces PrefixList="wsu wsse S"/></ds:Transform></ds:Transforms>
<ds:DigestMethodAlgorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><ds:DigestValue>olcbTjCNnXuZ5eVR1glEWRJxQpw=</ds:DigestValue>
</ds:Reference></ds:SignedInfo><ds:SignatureValue>
</ds:SignatureValue><ds:KeyInfo>
<wsse:SecurityTokenReference><wsse:Reference ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" URI="#uuid_e861f15d-dd66-4b05-b101-c9fed7feda38"/>
</wsse:SecurityTokenReference></ds:KeyInfo></ds:Signature>
</wsse:Security>
</S:Header>

そして、これは .NET チームから提供されたサンプルと完全には一致しませんが、正しいと思います。ただし、.NET サービスを呼び出すと、まだエラーが発生します。これは、それらから SOAPFault で返されるエラー メッセージです。

System.Web.Services.Protocols.SoapHeaderException: サーバーを利用できません。後で試してください ---> System.ApplicationException: WSE841: 送信障害応答の処理中にエラーが発生しました。---> System.Web.Services.Protocols.SoapHeaderException: Microsoft.Web.Services3.Security.SecurityFault: セキュリティ トークンを認証または承認できませんでした ---> System.Security.SecurityException: WSE3003: 証明書の信頼チェーンが検証されません。証明書が Trusted People Certificate ストアに正しくインストールされているかどうかを確認してください。または、これがテスト証明書である場合は、allowTestRoot 構成セクションを true に設定することもできます。

そのため、私は現在、彼らと協力して、証明書の信頼チェーンを検証できない理由を突き止めています。その特定の問題が私の側にあるのか、彼らの問題なのかは不明です。任意の提案をいただければ幸いです!

于 2010-03-23T15:23:33.973 に答える