我想了解 Java 运行时对 SSL 证书存储的一般要求。我知道它可以复制到主机的 /etc/ssl/certs 文件夹,但对于 Java,是否需要导入到特定的密钥库以便运行时能够在应用程序的任何 SSL 验证过程中使用和使用?例如,如果我有一个 JRE 客户端,需要打包根/中间证书以使 Web 客户端内部连接到 site1.foo.com,我将需要依赖于链的根证书和中间证书来验证请求。
对于各种其他运行时环境,似乎我可以将它们放在 /etc/ssl/certs 文件夹中: NodeJS =>如何将自定义证书颁发机构(CA)添加到 Nodejs Go => Golang 从哪里获取根 CA?
但是,大概为了在 Java 中使用,我需要采取额外的步骤并使用 keytool 并导入到特定的密钥库中?据推测,它不能像上面那样从公共目录中获取?希望我的问题有意义。
在 Java 中,通常通过接口访问证书集合KeyStore。
正如评论中所述,默认情况 SSLContext下将从位于 的 PKCS12(或 JKS)文件中读取证书$JRE_HOME/lib/security/cacerts。
然而,这不是唯一的可能性,您不必调用keytool来添加受信任的证书:
在 Debianoids 上,您可以使用-Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts(参见此问题)来使用软件包提供的 PKCS12 文件ca-certificates-java。只要您致电,它就会更新update-ca-certificates。因此,您只需添加一个*.crt文件/usr/local/share/ca-certificates并运行即可update-ca-certificates。
如果您不使用默认值,SSLContext您可以使用不同的值来初始化它TrustManager(参见这个问题)。这就是 Tomcat 8.5+ 加载 PEM 格式证书的方式。
不幸的是,没有KeyStore从目录读取证书的实现,但可以轻松编写。
编辑:在 Debianoids 上,打包的 JRE 已经使用/etc/ssl/java/cacerts,因此不需要进一步配置。
| 归档时间: |
|
| 查看次数: |
2646 次 |
| 最近记录: |