【发布时间】:2016-11-16 06:34:02
【问题描述】:
我创建了一个 JAVA 应用程序并将其部署在 Ubuntu 16.04 系统中的 Tomcat7 上。应用程序在 https:// 上发出请求,但返回以下错误:
java.io.IOException: javax.net.ssl.SSLPeerUnverifiedException: 对等体未通过身份验证
我已经尝试在系统使用的JRE中安装证书:
tomcat7 3388 1 0 11:07 ? 00:00:11 /usr/lib/jvm/default-java/bin/java
但我仍然遇到同样的错误。
我还在 cacerts.jks 密钥库中安装了证书并尝试使用 java
-Djavax.net.ssl.keyStore=/usr/lib/jvm/default-java/jre/lib/security/cacerts.jks -Djavax.net.ssl.keyStorePassword=changeit
但我仍然收到错误:
java.io.IOException: javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:467)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
in.pwc.FormHandler.doPost(FormHandler.java:184)
javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause
javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
sun.security.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:431)
org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:131)
org.apache.http.conn.ssl.SSLSocketFactory.verifyHostname(SSLSocketFactory.java:648)
org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:623)
org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:115)
org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:314)
org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:360)
org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:219)
org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:177)
org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:77)
org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:95)
org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106)
in.pwc.test.decrypt(test.java:62)
org.apache.jsp.viewAdmin_jsp._jspService(viewAdmin_jsp.java:193)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:439)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
in.pwc.FormHandler.doPost(FormHandler.java:184)
javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
我假设我的 java 和 tomcat 正在使用其他一些证书存储,但我找不到相同的。
我该如何解决这个错误?
更新:我不需要我的应用程序是 https 或使用 SSL,它发出的请求是一个 HTTPS 请求,作为设备的要求,它必须是经过验证的请求。
【问题讨论】: