进行SSL握手时未发送证书

时间:2018-03-30 12:57:56

标签: ssl

我的应用程序调用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提供的解决方案失败了。无法使用相同的别名

将证书附加到私钥

1 个答案:

答案 0 :(得分:0)

  

我没有私钥作为密钥库的一部分

然后你没有密钥库:你有一个信任库。

  

由于提供证书的供应商拒绝提供私钥。

他当然做到了。没有你的蜂蜡。

您应该在自己的密钥库中提供自己的私钥和证书。

你在这里有一个严重的误解。