2

このガイドを使用して Metro の証明書を作成しました: http://www.jroller.com/gmazza/entry/using_openssl_to_create_certificates

これで、servicestore.jks と clientstore.jks ができました。

キーストアを確認すると、servicestore.jks の PrivateKeyEntry が myservicekey で、trustedCertEntry が myclientkey であることがわかります。clientstore.jks ではその逆です。

これらをクライアント xml とサービス wsit xml で使用します。公式の WSIT チュートリアルに従って、Netbeans でこれを行いました。すべてが正常に展開されます。

したがって、クライアントからのメソッド呼び出しをテストすると、次の例外が発生します。

[#|2011-10-19T08:59:38.465+0200|INFO|glassfish3.1.1|com.sun.metro.policy|_ThreadID=81;_ThreadName=http-thread-pool-8080(1);|WSP5018: ロード済みファイルからの WSIT 構成: file:/opt/glassfish3/glassfish/domains/domain1/applications/testwebapp/WEB-INF/classes/META-INF/wsit-client.xml.|#]

[#|2011-10-19T08:59:41.167+0200|SEVERE|glassfish3.1.1|javax.enterprise.resource.xml.webservices.security|_ThreadID=84;_ThreadName=http-thread-pool-8080(4); |WSS1533: 自己署名証明書の検証に失敗しました.|#]

[#|2011-10-19T08:59:41.171+0200|SEVERE|glassfish3.1.1|com.sun.xml.wss.provider.wsit|_ThreadID=84;_ThreadName=http-thread-pool-8080(4); |WSITPVD0035: インバウンド・メッセージのセキュリティー検査でエラーが発生しました。com.sun.xml.wss.XWSSecurityException: 自己署名証明書の検証が com.sun.xml.wss.impl.misc.WSITProviderSecurityEnvironment.validateCertificate(WSITProviderSecurityEnvironment.java:937) com.sun.xml.ws.security で失敗しました。 opt.impl.incoming.X509BinarySecurityToken.validate(X509BinarySecurityToken.java:185) at com.sun.xml.ws.security.opt.impl.incoming.SecurityRecipient.handleSecurityHeader(SecurityRecipient.java:396) at com.sun.xml. com.sun.xml.ws.security.opt.impl.incoming.SecurityRecipient の ws.security.opt.impl.incoming.SecurityRecipient.cacheHeaders(SecurityRecipient.java:275)。

クライアント xml で間違ったパスワードを使用しようとすると、別の例外が発生し、間違ったファイル名を使用すると、ファイルが見つからないという例外が発生しました。したがって、少なくともクライアントストアが見つかります。

そのため、サービス キーストアに何か問題があるのではないかと考え (自分のキーストアではなく、デフォルトの GlassFish キーストアを使用している可能性があると考えています)、domain.xml でいくつかのオプションを見つけました。だから私はこれらを変更しました:

-Dcom.sun.enterprise.security.httpsOutboundKeyAlias=myservicekey -Djavax.net.ssl.keyStore=${com.sun.aas.instanceRoot}/config/servicestore.jks -Djavax.net.ssl.keyStorePassword=sspas -Djavax. net.ssl.trustStore=${com.sun.aas.instanceRoot}/config/servicestore.jks -Djavax.net.ssl.trustStorePassword=sspass -DSERVER_KEY_ALIAS=myservicekey -DCLIENT_KEY_ALIAS=myclientkey

しかし、サーバーを再起動すると、この例外が発生し、管理コンソールのログインにアクセスできません:

............. 原因: java.io.IOException: キーストアが改ざんされたか、sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:772) でパスワードが正しくありませんでした.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:55) at java.security.KeyStore.load(KeyStore.java:1214) at com.sun.enterprise.security.ssl.impl.SecuritySupportImpl.loadKS(SecuritySupportImpl) .java:254) at com.sun.enterprise.security.ssl.impl.SecuritySupportImpl.loadStores(SecuritySupportImpl.java:208) ... 63 詳細 原因: java.security.UnrecoverableKeyException: sun.security でパスワードの検証に失敗しました。 provider.JavaKeyStore.engineLoad(JavaKeyStore.java:770) ... 67 もっと見る

次に、WSIT チュートリアルで次のことを読みました。Glassfish で WSIT セキュリティを使用するには、信頼できるストアを GlassFish のキーストアにインポートし、NetBeans IDE からそれらの証明書を指定する必要があります。

では、自分のキーストアを使用することはできませんか? domain.xml を変更したときに何か見落としましたか? それとも、jvmオプション全体の前に間違っていましたか?

4

1 に答える 1

1

「自己署名証明書の検証に失敗しました」という期待メッセージから、サーバーは SOAP メッセージに署名/暗号化するクライアント証明書を信頼していないと結論付けます。

Glassfish が使用するトラストストアと、クライアント証明書が含まれているかどうかを確認する必要があります。私はグラスフィッシュについてあまり知りませんが、ここにいくつかの方向性があるようです. トラストストアとして使用される servicestore.jks であり、正確なクライアント証明書が実際に含まれています。clientstore.jks を簡単に再生成して、トラストストアを再作成するのを忘れる可能性があります。

トラストストアに予期される証明書が含まれており、実際に glassfish によって使用されている場合は、クライアントから送信された証明書も確認する必要があります。ヘッダーを調べて、BinarySecurityToken を探します。選択した WSIT に応じて、メッセージで使用される証明書が含まれます。

于 2011-10-20T13:20:14.607 に答える