使用jks文件访问https服务的Java过程

3
  1. Java code to call a remote web service with JKS file.
  2. How to access authorized service using certificate. and added please define java keystore. I am very new these processes. I am getting following error while trying related to this

    cause javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: 
    PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException
    

我已经苦苦挣扎了一个月。请有人帮忙。 对于语法错误,请原谅。


3
这与C#,PHP或Javascript有什么关系? - HamZa
1
抱歉,我不知道它的含义。无论如何,感谢您让我了解标签。 - Mohammed Yasin
1个回答

5

首先,您需要从您要连接的服务器获取公共证书。这可以通过多种方式完成,例如联系服务器管理员并请求其证书、使用openssl下载证书,或者如果它是一个HTTP服务器,则使用任何浏览器连接到它,查看页面的安全信息,并保存证书的副本。(谷歌应该能够告诉您如何为您特定的浏览器执行此操作。)

现在,您已经将证书保存在文件中,需要将其添加到JVM的信任存储库中。对于JDK,位于$JAVA_HOME/jre/lib/security/,对于JRE,位于$JAVA_HOME/lib/security/,有一个名为cacerts的文件,它随Java一起提供,并包含知名认证机构的公共证书。要导入新证书,请以具有写入cacerts权限的用户身份运行keytool:

keytool -import -file <the cert file> -alias <some meaningful name> -keystore <path to cacerts file>

它很可能会要求您输入密码。作为Java默认提供的密码是“changeit”。几乎没有人更改它。在您完成这些相对简单的步骤后,您将可以安全地进行通信,并确保您正在与正确的服务器进行通信,而且仅与正确的服务器进行通信(只要他们不丢失私钥)。


谢谢。虽然有一种编程方式来获取另一个密钥库,但这种方法更加优雅和容易实现(不需要任何代码更改)。在将服务器证书提取到.cer文件后,我按照您的答案将其添加到了客户端应用程序使用的JVM的cacerts密钥库中。PS:Linux/AIX用户,如果遇到问题,请检查您的权限。 - ADTC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接