2

安全なWebサービスを呼び出すためのJavaクライアント(weblogic 10.3上)を作成しています。cacerts、DemoIdentity.jksおよびDemoTrust、jksにインストールしたクライアント証明書が提供されました。私のweblogicでは、キーストアをDemoIdentityおよびDemoTrustとして設定しました。weblogicコンソールで、「Two Way Client Cert Behavior:」を「ClientCerts requestedbutnotforced」として設定しました。「SSLリッスンポートが有効になっています:」チェックボックスをオンにしました。

Webサービスにアクセスしようとすると、次の例外が発生します。

] FaultActor [null] Detail [<detail><bea_fault:stacktrace xmlns:bea_fault="http:
//www.bea.com/servers/wls70/webservice/fault/1.0.0">javax.net.ssl.SSLHandshakeEx
ception: [Security:090497]HANDSHAKE_FAILURE alert received from ************** Check both sides of the SSL configuration for mismatches in supported ciphers, supported protocol versions, trusted CAs, and hos
tname verification settings.
        at com.certicom.tls.interfaceimpl.TLSConnectionImpl.fireException(Unknow
n Source)
        at com.certicom.tls.interfaceimpl.TLSConnectionImpl.fireAlertReceived(Un
known Source)
        at com.certicom.tls.record.alert.AlertHandler.handle(Unknown Source)
        at com.certicom.tls.record.alert.AlertHandler.handleAlertMessages(Unknow
n Source)
        at com.certicom.tls.record.MessageInterpreter.interpretContent(Unknown S
ource)
        at com.certicom.tls.record.MessageInterpreter.decryptMessage(Unknown Sou
rce)
        at com.certicom.tls.record.ReadHandler.processRecord(Unknown Source)
        at com.certicom.tls.record.ReadHandler.readRecord(Unknown Source)
        at com.certicom.tls.record.ReadHandler.readUntilHandshakeComplete(Unknow
n Source)
        at com.certicom.tls.interfaceimpl.TLSConnectionImpl.completeHandshake(Un
known Source)
        at com.certicom.tls.record.WriteHandler.write(Unknown Source)
        at com.certicom.io.OutputSSLIOStreamWrapper.write(Unknown Source)
        at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65
)
        at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
        at java.io.FilterOutputStream.flush(FilterOutputStream.java:123)
        at weblogic.net.http.HttpURLConnection.writeRequests(HttpURLConnection.j
ava:158)
        at weblogic.net.http.HttpURLConnection.getInputStream(HttpURLConnection.
java:363)
        at weblogic.net.http.SOAPHttpsURLConnection.getInputStream(SOAPHttpsURLC
onnection.java:37)
        at weblogic.wsee.connection.transport.TransportUtil.getInputStream(Trans
portUtil.java:85)
        at weblogic.wsee.connection.transport.http.HTTPClientTransport.receive(H
TTPClientTransport.java:271)
        at weblogic.wsee.connection.soap.SoapConnection.receive(SoapConnection.j
ava:485)
        at weblogic.wsee.ws.dispatch.client.ConnectionHandler.handleResponse(Con
nectionHandler.java:179)
        at weblogic.wsee.handler.HandlerIterator.handleResponse(HandlerIterator.
java:287)
        at weblogic.wsee.handler.HandlerIterator.handleResponse(HandlerIterator.
java:271)
        at weblogic.wsee.ws.dispatch.client.ClientDispatcher.handleResponse(Clie
ntDispatcher.java:213)
        at weblogic.wsee.ws.dispatch.client.ClientDispatcher.dispatch(ClientDisp
atcher.java:150)
        at weblogic.wsee.ws.WsStub.invoke(WsStub.java:87)
        at weblogic.wsee.jaxrpc.StubImpl._invoke(StubImpl.java:339)
        at sips_cn_contract.PaymentService_Stub.processPaymentWebInit(Unknown So
urce)
        at uk.gov.gateway.payments.SipsStartupController.handleRequest(SipsStart
upController.java:73)
        at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.ha
ndle(SimpleControllerHandlerAdapter.java:45)
        at org.springframework.web.servlet.DispatcherServlet.doService(Dispatche
rServlet.java:485)
        at org.springframework.web.servlet.FrameworkServlet.serviceWrapper(Frame
workServlet.java:342)
        at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServl
et.java:318)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
        at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run
(StubSecurityHelper.java:227)
        at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecuri
tyHelper.java:125)
        at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.jav
a:300)
        at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.jav
a:183)
        at weblogic.servlet.internal.WebAppServletContext$ServletInvocationActio
n.doIt(WebAppServletContext.java:3686)
        at weblogic.servlet.internal.WebAppServletContext$ServletInvocationActio
n.run(WebAppServletContext.java:3650)
        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(Authenticate
dSubject.java:321)
        at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:
121)
        at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppS
ervletContext.java:2268)
        at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletC
ontext.java:2174)
        at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.j
ava:1446)
        at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
        at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
</bea_fault:stacktrace></detail>]; nested exception is:

ただし、Firefoxでは、証明書を追加しました。Webサービスのwsdlを表示すると、証明書の入力を求められ、[OK]をクリックすると、安全なWebサービスのwsdlファイルがレンダリングされます。クライアントをJavaを使用して動作させるには、どうすればよいか考えている人はいますか?

4

2 に答える 2

13

本当の問題は、WeblogicがJDKによって提供される標準のSun HTTPS実装を使用しておらず、次の行で明らかなように、独自の実装を使用していることだと思います。

at weblogic.net.http.SOAPHttpsURLConnection.getInputStream(SOAPHttpsURLConnection.java:37)

標準のSun実装クラスはと呼ばれjavax.net.ssl.HttpsURLConnectionます。

その結果、証明書ポリシーは、スタンドアロンのJavaプログラムとはWeblogic内で異なります。私はちょうどこのデバッグが同様の問題であることを発見しました。

このページでは、Weblogicの代わりにSunの実装を使用することをお勧めします: http ://webtech-kapil.blogspot.com/2010/06/javalangclasscastexception.html

彼らは、次のフラグでWLを開始するようにアドバイスしています。

-DUseSunHttpHandler=true

これは、標準のSunのSSLの実装を使用します。しかし、個人的にはまだ試していません。

ありがとう、

イゴール

于 2011-09-01T20:33:57.203 に答える
2

証明書とキーが正しくインポートされていない可能性があります。JUnitなどに以下を追加することで、キーストアをテストできます。

static {
        System.setProperty("javax.net.ssl.keyStoreType", "pkcs12"); // or whatever
        System.setProperty("javax.net.ssl.keyStore", "c:/folder/mycert.p12");
        System.setProperty("javax.net.ssl.keyStorePassword", "mypassword");
        System.setProperty("javax.net.debug", "ssl");
}

に設定されたjavax.net.debugプロパティsslは、証明書チェーンと他のすべてのSSLログを出力します。これは役立つ場合があります。すでに本番環境にあるように、証明書などをアプリケーションコンテナに追加することをお勧めします。

SSLを使用してデバッグしてみて、その結果を確認してください。多くの場合、weblogicを正しく構成する必要があります。カスタムSSLエンドポイント構成があるかどうかを確認します(つまり、URIが/ test / testの場合はkeyStoreXYZを使用します)。

于 2011-08-18T18:34:31.860 に答える