Java - 通过证书授权

标签 java ssl https

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

我有:

  1. 私钥:priv.key
  2. 公共(public)证书:pub.crt
  3. ALPHA_CA_root.pem - 允许通过 https 进行通信的证书。

当我像这样使用 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"}'

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

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

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

最佳答案

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

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

关于Java - 通过证书授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36337683/

相关文章:

java - 如何获取 google talk 聊天客户端的电子邮件(默认 IM)而不是公共(public) IM

java - GAE 和套接字数据

ssl - 使用客户端 SSL 唯一标识客户端

c - Windows 中的 C 语言如何进行端口重定向?

security - 我们如何确保浏览器实际检查 CA 的 SSL 证书?

java - 使用 Jersey 加密 RESTful 服务的数据

java - 有没有办法通过jmockit从嵌套类调用方法?

ssl - 引入 SSL 时 ActiveMQ 证书错误

PHP上传问题

https - 使用 SharpPCap 检测 HTTPS