我的 Java 程序如何知道包含证书的密钥存储库在哪里?
或者: 我如何告诉我的 Java 程序在哪里查找密钥存储库?
在以某种方式指定密钥存储库之后,如何指定用于向客户端验证服务器的证书?
System.setProperty("javax.net.ssl.trustStore", path_to_your_jks_file);
SSL 属性通过系统属性在 JVM 级别设置。这意味着您可以在运行程序时设置它们(java-D...) ,或者可以通过 System.setProperty 在代码中设置它们。
你需要设定的特定按键如下:
KeyStore -位置 包含 申请程序本身的证明书 和私钥。在 Windows 上, 指定的路径名必须使用转发 用斜杠代替反斜杠。 KeyStorePassword -Password 来访问私钥 指定的密钥存储库文件 密码 使用两次: 解锁密钥存储库 文件(存储密码) ,并解密 存储在密钥存储库中的私钥 (密钥密码)。 值存储 -位置 包含 受信任的 CA 证书集合 通过这个申请过程(信任 在 Windows 上,指定的 路径名必须使用正斜杠, 代替反斜杠,\。 如果信任存储区位置不是 使用此属性指定的 SunJSSE 实现搜索 中使用密钥存储库文件 下列地点(依次序) : $JAVA_HOME/lib/security/jssecacerts $JAVA_HOME/lib/security/cacerts 信任存储密码 - 解锁密钥存储库文件的密码 指定的(存储密码) javax.net.ssl.trustStore. TrustStoreType -(可选) 对于 Java 密钥存储库文件格式,如下 属性的值为 JKS (或 JKS)。 您通常不指定这个 属性,因为它的默认值是 已经开玩笑了。 Debug -切换 关于 SSL/TLS 层的日志记录,设置 将此属性转移到 ssl。
KeyStore -位置 包含 申请程序本身的证明书 和私钥。在 Windows 上, 指定的路径名必须使用转发 用斜杠代替反斜杠。
KeyStorePassword -Password 来访问私钥 指定的密钥存储库文件 密码 使用两次: 解锁密钥存储库 文件(存储密码) ,并解密 存储在密钥存储库中的私钥 (密钥密码)。
值存储 -位置 包含 受信任的 CA 证书集合 通过这个申请过程(信任 在 Windows 上,指定的 路径名必须使用正斜杠, 代替反斜杠,\。
\
如果信任存储区位置不是 使用此属性指定的 SunJSSE 实现搜索 中使用密钥存储库文件 下列地点(依次序) :
$JAVA_HOME/lib/security/jssecacerts
$JAVA_HOME/lib/security/cacerts
信任存储密码 - 解锁密钥存储库文件的密码 指定的(存储密码) javax.net.ssl.trustStore.
javax.net.ssl.trustStore
TrustStoreType -(可选) 对于 Java 密钥存储库文件格式,如下 属性的值为 JKS (或 JKS)。 您通常不指定这个 属性,因为它的默认值是 已经开玩笑了。
Debug -切换 关于 SSL/TLS 层的日志记录,设置 将此属性转移到 ssl。
首先,有两种密钥存储库。
个人 强 > 及 一般
应用程序将使用在启动或系统默认值中指示的那个。
如果 JRE 或 JDK 正在运行,或者如果您检查个人文件夹或“全局”文件夹,那么它将是一个不同的文件夹。
它们也被加密了
简而言之,道路将是这样的:
$JAVA_HOME/lib/security/cacerts为“一般的一个”,谁拥有所有的通讯局为当局,是相当重要的。
还可以使用 -D属性在运行时提到路径,如下所示
-D
-Djavax.net.ssl.trustStore=/home/user/SSL/my-cacerts -Djavax.net.ssl.keyStore=/home/user/SSL/server_keystore.jks
在我的阿帕奇火花应用程序,我用来提供的路径证书和密钥存储使用 --conf选项和 extraJavaoptions在火花提交如下
--conf
extraJavaoptions
--conf 'spark.driver.extraJavaOptions= -Djavax.net.ssl.trustStore=/home/user/SSL/my-cacerts -Djavax.net.ssl.keyStore=/home/user/SSL/server_keystore.jks'
提醒你一句。如果您试图在 Java9之后打开一个现有的 JKS 密钥存储库,那么您需要确保提到以下值为“ JKS”的属性:
javax.net.ssl.keyStoreType javax.net.ssl.trustStoreType
原因是 Java.security 文件中规定的默认密钥库类型已经从 Java9开始从 jks 更改为 pkcs12。