java 收到 HANDSHAKE_FAILURE 警报

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/7109550/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-30 18:40:20  来源:igfitidea点击:

HANDSHAKE_FAILURE alert received

javaweb-servicessecuritysslhandshakeexception

提问by Priyanka

I am writing a Java client (on weblogic 10.3) to invoke a secure web service. I have been provided with a client certificate which I have installed in cacerts, DemoIdentity.jks and DemoTrust,jks In my weblogic I have set up keystore as DemoIdentity and DemoTrust. In weblogic console I have set "Two Way Client Cert Behavior:" as "Client Certs requested but not enforced". and for "SSL Listen Port enabled:" I have checked the checkbox.

我正在编写一个 Java 客户端(在 weblogic 10.3 上)来调用安全的 Web 服务。我已经获得了一个客户端证书,该证书已安装在 cacerts、DemoIdentity.jks 和 DemoTrust,jks 中。在我的 weblogic 中,我已将密钥库设置为 DemoIdentity 和 DemoTrust。在 weblogic 控制台中,我将“双向客户端证书行为:”设置为“请求但未强制执行的客户端证书”。对于“已启用 SSL 侦听端口:”,我已选中复选框。

I get the below exception while trying to access the web service:

尝试访问 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:

However in firefox, i have added the certificate, and when i view the wsdl of the web service.It prompts me with the certificate and after i click ok, it renders the wsdl file for secure web service. Anybody has idea what should I do to make the client working using Java?

但是在 Firefox 中,我添加了证书,当我查看 Web 服务的 wsdl 时,它会提示我提供证书,单击“确定”后,它会呈现安全 Web 服务的 wsdl 文件。有人知道我应该怎么做才能使客户端使用 Java 工作吗?

采纳答案by hisdrewness

You have likely not imported your certificate and key correctly. You can test your keystore by adding the following to a JUnit or something similar:

您可能没有正确导入您的证书和密钥。您可以通过将以下内容添加到 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");
}

The javax.net.debugproperty set to sslwill print your certificate chain and all other SSL logging, which can be helpful. You'll want to add the certificate, etc. to your application container like you already have in production.

javax.net.debug设置为的属性ssl将打印您的证书链和所有其他 SSL 日志记录,这可能会有所帮助。您需要像在生产中一样将证书等添加到应用程序容器中。

Try debugging with SSL and see what comes of that. More than likely you just need to configure weblogic correctly. Check to see if there are custom SSL endpoint configurations (i.e. when URI is /test/test use keyStore XYZ).

尝试使用 SSL 进行调试,看看会发生什么。您很可能只需要正确配置 weblogic。检查是否有自定义 SSL 端点配置(即当 URI 为 /test/test 时使用 keyStore XYZ)。

回答by ipolevoy

I think that the real problem is that Weblogic is not using standard Sun HTTPS implementation provided by JDK, but rather uses its own, as apparent on this line:

我认为真正的问题是 Weblogic 没有使用 JDK 提供的标准 Sun HTTPS 实现,而是使用它自己的实现,如这一行所示:

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

The standard Sun implementation class is called javax.net.ssl.HttpsURLConnection.

标准的 Sun 实现类称为javax.net.ssl.HttpsURLConnection.

As a result, the certificate policy is different inside Weblogic than in a standalone Java program. I just discovered this debugging a similar problem.

因此,Weblogic 内部的证书策略与独立 Java 程序中的不同。我刚刚发现这个调试一个类似的问题。

This page advises to use a Sun implementation instead of Weblogic: http://webtech-kapil.blogspot.com/2010/06/javalangclasscastexception.html

此页面建议使用 Sun 实现而不是 Weblogic:http: //webtech-kapil.blogspot.com/2010/06/javalangclasscastexception.html

They advice to start WL with the following flag:

他们建议使用以下标志启动 WL:

-DUseSunHttpHandler=true

-DUseSunHttpHandler=true

which will use standard Sun's implementation of SSL. However, I personally have not tried this yet.

这将使用标准 Sun 的 SSL 实现。但是,我个人还没有尝试过。

Thanks,

谢谢,

Igor

伊戈尔