我的应用程序调用Web服务请求。此Web服务的提供程序正在请求基于证书的身份验证。
不幸的是,在进行握手时,证书不会作为CertificateRequest步骤的一部分返回。以下是日志跟踪
Cert Authorities:
<Empty>
*** ServerHelloDone
Warning: no suitable certificate found - continuing without client
authentication
我已使用以下属性放置密钥库和信任库,这些属性在握手期间被拾取(记录在日志中)
-Djavax.net.ssl.keyStore=$CMX_SSL_KEY_STORE
-Djavax.net.ssl.keyStorePassword=123456
-Djavax.net.debug=ssl
-Djavax.net.ssl.keyStoreType=pkcs12
JAVA_OPTS= JAVA_OPTS="-D$PS_TOKEN$ENV_TOKEN $LOCAL_MEM_OPTS $GC_OPTS
$CMAX_OPTS $JMX_OPTS $CMX_SSL_TRUST_STORE_OPT $MQ_OPTS
$ADDITIONAL_JVM_OPTS $LOCAL_JVM_OPTS $CMX_SSL_KEY_STORE_OPT"
我没有私钥作为密钥库的一部分,因为提供证书的供应商拒绝提供私钥。作为密钥库的一部分,我拥有整个证书链,但仍然无法正常工作
日志中出现的错误如下所示
Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)
at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:2023)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1125)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
需要一些指导才能解决此问题
我看了
why doesn't java send the client certificate during SSL handshake?
这是同一个问题,但Bruno提供的解决方案失败了。无法使用相同的别名
将证书附加到私钥答案 0 :(得分:0)
我没有私钥作为密钥库的一部分
然后你没有密钥库:你有一个信任库。
由于提供证书的供应商拒绝提供私钥。
他当然做到了。没有你的蜂蜡。
您应该在自己的密钥库中提供自己的私钥和证书。
你在这里有一个严重的误解。