繁体   English   中英

Java 运行时是否需要强制使用 SSL 证书的密钥库?

[英]Does Java Runtimes require use of Keystore for SSL certificates as mandatory?

我想了解 Java 运行时对 SSL 证书存储的一般要求。 我知道它可以复制到主机的 /etc/ssl/certs 文件夹,但是对于 Java,它是否需要导入到特定的密钥库才能使运行时能够在应用程序的任何 SSL 验证过程中使用和消费? 例如,如果我有一个 JRE 客户端需要打包根/中间证书以使 web 客户端在内部访问 site1.foo.com,我将需要依赖于链的根证书和中间证书来验证请求。

对于其他各种运行时环境,我似乎可以将它们放在 /etc/ssl/certs 文件夹中:NodeJS => 如何将自定义证书颁发机构 (CA) 添加到 nodejs Go => Golang 从哪里获取根 CA?

但是,大概是为了在 Java 中使用,我需要 go 一个额外的步骤并使用 keytool 并导入到特定的 Keystore? 大概,它不能像上面那样从一个公共目录中提取? 希望我的问题有意义。

Java、collections的证书通常通过KeyStore接口访问。

如评论中所述,默认SSLContext将从位于$JRE_HOME/lib/security/cacerts的 PKCS12(或 JKS)文件中读取证书。

但是,这不是唯一的可能性,您不必调用keytool来添加受信任的证书:

  • 在 Debianoids 上,您可以使用-Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts (参见这个问题)来使用ca-certificates-java ZEFE90A8E604A7C840E88ZD03A67F6B7D. 每当您调用update-ca-certificates时,它都会更新。 因此,您只需在/usr/local/share/ca-certificates中添加一个*.crt文件并运行update-ca-certificates

  • 如果您不使用默认的SSLContext ,您可以使用不同的TrustManager对其进行初始化(参见此问题)。 这就是 Tomcat 8.5+ 加载 PEM 格式证书的方式。

不幸的是,没有从目录中读取证书的KeyStore实现,但是可以很容易地编写出来。

编辑:在 Debianoids 上,打包的 JRE 已经使用/etc/ssl/java/cacerts ,因此不需要进一步的配置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM