SSL 和证书密钥库

问题描述 投票:0回答:6

我的 Java 程序如何知道包含证书的密钥库在哪里?

或者:我如何告诉我的 Java 程序在哪里寻找密钥库?

以某种方式指定密钥库后,如何指定用于向客户端验证服务器的证书?

java keystore
6个回答
334
投票

SSL 属性通过系统属性在 JVM 级别设置。这意味着您可以在运行程序时设置它们 (java -D....) 或者您可以通过执行 System.setProperty 在代码中设置它们。

需要设置的具体按键如下:

javax.net.ssl.keyStore-位置 Java 密钥库文件包含 申请过程自己的证书 和私钥。在 Windows 上, 指定的路径名必须使用 forward 斜线,/,代替反斜线。

javax.net.ssl.keyStorePassword - 密码 从访问私钥 指定的密钥库文件 javax.net.ssl.keyStore。这个密码 使用两次:解锁密钥库 文件(存储密码),并解密 存储在密钥库中的私钥 (密钥密码)。

javax.net.ssl.trustStore - 位置 Java 密钥库文件包含 可信 CA 证书集合 通过此应用程序(信任 店铺)。在 Windows 上,指定的 路径名必须使用正斜杠,

/
, 代替反斜杠,
\
.

如果信任存储位置不是 使用此属性指定, SunJSSE 实现搜索 并在 以下地点(按顺序):

  1. $JAVA_HOME/lib/security/jssecacerts
  2. $JAVA_HOME/lib/security/cacerts

javax.net.ssl.trustStorePassword - 解锁密钥库文件的密码 (存储密码)由指定

javax.net.ssl.trustStore
.

javax.net.ssl.trustStoreType -(可选) 对于 Java 密钥库文件格式,这 属性的值为 jks(或 JKS)。 你通常不指定这个 属性,因为它的默认值为 已经jks了

javax.net.debug - 切换 在 SSL/TLS 层的日志记录中,设置 这个属性到 ssl.


125
投票
System.setProperty("javax.net.ssl.trustStore", path_to_your_jks_file);

37
投票

请注意。如果您尝试在 Java 9 及更高版本中打开现有的 JKS 密钥库,则需要确保您也提及以下属性并将其值设置为“JKS”:

javax.net.ssl.keyStoreType
javax.net.ssl.trustStoreType

原因是 java.security 文件中规定的默认密钥库类型已从 Java 9 开始从 jks 更改为 pkcs12。


17
投票

您还可以在运行时使用

-D
属性提及路径,如下所示

-Djavax.net.ssl.trustStore=/home/user/SSL/my-cacerts 
-Djavax.net.ssl.keyStore=/home/user/SSL/server_keystore.jks

在我的 apache spark 应用程序中,我曾经使用

--conf
选项和
extraJavaoptions
在 spark-submit 中提供证书和密钥库的路径,如下所示

--conf 'spark.driver.extraJavaOptions= 
-Djavax.net.ssl.trustStore=/home/user/SSL/my-cacerts 
-Djavax.net.ssl.keyStore=/home/user/SSL/server_keystore.jks' 

9
投票

首先,有两种密钥库。

个人一般

应用程序将使用启动时指定的或系统默认的。

如果运行的是JRE或JDK,或者勾选个人或“全局”的,会是不同的文件夹

它们也被加密了

简而言之,路径将是这样的:

$JAVA_HOME/lib/security/cacerts
对于“一般人”,拥有当局的所有CA并且非常重要。


0
投票

在 M1 iMac 系统上导入密钥以与 Java 或 IDE(如 jGRASP)一起使用,使用命令 sudo keytool -importcert -keystore与代理和防火墙一起使用。

sudo keytool -importcert -keystore /图书馆/Java/JavaVirtualMachines/jdk-19.jdk/Contents/Home/lib/security/cacerts -storepass changeit -file ~/Downloads/SquidCA.crt -别名“root_cert”/Library/Java/JavaVirtualMachines/jdk-19.jdk/Contents/Home/lib/security/cacerts

在 M1 iMAC 上列出 Java 证书存储中的内容:

keytool -list -keystore “/图书馆/Java/JavaVirtualMachines/jdk-19.jdk/Contents/Home/lib/security/cacerts” 警告:使用 -cacerts 选项访问 cacerts 密钥库

默认密码是 changeit

重新安装 jGRASP 或您使用的 IDE 后,它可以像 java 代码一样运行,

URL news = new URL("https://moxie.foxnews.com/feedburner/world.xml/");

BufferedReader in = new BufferedReader(new InputStreamReader(news.openStream())); Image: Java program running with trusted root SSL cert installed using https URL. URL seen in both proxy Pfsense Firewall and jGRASP IDE

再次,是的,Java JDK 工具可以使用 SSL 自签名证书。

它也适用于 Windows 11 只需使用 Oracle 的 JDK 工具包路径

C:\Program Files\Java\jdk-20\lib\securit

© www.soinside.com 2019 - 2024. All rights reserved.