Java - 证书授权

时间:2016-03-31 15:30:01

标签: java ssl https

我的java应用程序中的证书存在问题,我自己无法解决。

我有:

  1. 私钥:priv.key
  2. 公共证书:pub.crt
  3. ALPHA_CA_root.pem - 允许通过https进行通信的证书。
  4. 当我像这样使用curl时,它可以工作:

    curl -v https://server.com --cert pub.crt --key priv.key --cacert ALPHA_CA_root.pem -H "Content-Type: application/json" -X POST -d '{"json", "jsonContent"}'
    

    但是在导入密钥库时,我收到错误并且未建立通信。我按如下方式导入证书:

    openssl pkcs12 -export -in pub.crt -inkey priv.key -out client.p12 -name "sc"
    keytool -importkeystore -srckeystore client.p12 -srcstoretype pkcs12 -destkeystore keystore.jks -deststoretype jks -deststorepass password
    keytool -import -alias gridserverSSL -file ../ALPHA_CA_root.pem -storepass password-keystore keystore.jks
    

    之后,我在我的应用程序中设置了java参数:

    -Djavax.net.debug=ssl -Djavax.net.ssl.keyStoreType=jks -Djavax.net.ssl.keyStore=keystore.jks -Djavax.net.ssl.keyStorePassword=password
    

    该应用程序使用Apache httpClient与服务器建立通信。在我的错误日志中,我看到类似的东西:

    cause javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    

    有人可以帮忙吗?我真的很感激。

2 个答案:

答案 0 :(得分:0)

如果步骤(3)中的证书是签名链的一部分,并且不清楚,则需要将它们与(2)处的证书合并,并且所有证书都与私人一起导入密钥,在同一别名下。

如果它们是用于验证对等证书的可信CA条目,则它们应位于信任库中,而不是私钥所在的密钥库,并且应使用keytool -trustcacerts导入它们。

答案 1 :(得分:0)

好的,我设法解决了这个问题。 我不得不从这里添加ale证书: https://support.globalsign.com/customer/portal/articles/1223298-alphassl-intermediate-certificates