我在尝试托管的 Web 服务时遇到问题。
在 CentOS 6.5 amd64 / linux x86_64、Tomcat 8.0.9、Java 1.7.0_60、CXF 3.0 上运行。
当我这样设置我的连接器时:
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
keystoreFile="${catalina.base}/conf/server.jks"
keyAlias="salesproxy.<domain>.com"
keystorePass="<password>"
clientAuth="false" sslProtocol="TLS" />
我可以通过 HTTPS 拉取 WSDL 并查看证书,一切都很好。
但是,如果我设置 clientAuth="true" 并将 truststoreFile、truststoreType 和 truststorePass 属性添加到连接器,我什至无法通过 HTTPS 访问 WSDL。我收到来自 Chrome 的“错误代码:ERR_SSL_PROTOCOL_ERROR”消息。
在我设置了 javax.net.debug=ssl 的日志中,下面是最后几行:
*** ServerHelloDone
http-nio-443-exec-4, WRITE: SSLv3 Handshake, length = 13028
http-nio-443-exec-6, READ: SSLv3 Alert, length = 2
http-nio-443-exec-6, RECV SSLv3 ALERT: warning, no_certificate
SSL -- handshake alert: no_certificate
http-nio-443-exec-6, fatal error: 80: problem unwrapping net record
javax.net.ssl.SSLProtocolException: handshake alert: no_certificate
%% Invalidated: [Session-67, TLS_DHE_RSA_WITH_AES_128_CBC_SHA]
http-nio-443-exec-6, SEND SSLv3 ALERT: fatal, description = internal_error
http-nio-443-exec-6, WRITE: SSLv3 Alert, length = 2
http-nio-443-exec-6, called closeOutbound()
http-nio-443-exec-6, closeOutboundInternal()
在 Chrome 和 Windows 8 certmgr 中,我已经在每个对我有意义的地方安装了客户端证书,而不会改变行为。需要注意的一点是,服务器使用的是 GoDaddy 通配符 SSL 证书。我以前使用过通配符证书,但没有使用 2-way SSL 身份验证。
任何帮助/建议/建议将不胜感激!