SSL 和 cert 密钥存储库

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

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

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

540614 次浏览
System.setProperty("javax.net.ssl.trustStore", path_to_your_jks_file);

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

你需要设定的特定按键如下:

KeyStore -位置 包含 申请程序本身的证明书 和私钥。在 Windows 上, 指定的路径名必须使用转发 用斜杠代替反斜杠。

KeyStorePassword -Password 来访问私钥 指定的密钥存储库文件 密码 使用两次: 解锁密钥存储库 文件(存储密码) ,并解密 存储在密钥存储库中的私钥 (密钥密码)。

值存储 -位置 包含 受信任的 CA 证书集合 通过这个申请过程(信任 在 Windows 上,指定的 路径名必须使用正斜杠, 代替反斜杠,\

如果信任存储区位置不是 使用此属性指定的 SunJSSE 实现搜索 中使用密钥存储库文件 下列地点(依次序) :

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

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

TrustStoreType -(可选) 对于 Java 密钥存储库文件格式,如下 属性的值为 JKS (或 JKS)。 您通常不指定这个 属性,因为它的默认值是 已经开玩笑了。

Debug -切换 关于 SSL/TLS 层的日志记录,设置 将此属性转移到 ssl。

首先,有两种密钥存储库。

个人 一般

应用程序将使用在启动或系统默认值中指示的那个。

如果 JRE 或 JDK 正在运行,或者如果您检查个人文件夹或“全局”文件夹,那么它将是一个不同的文件夹。

它们也被加密了

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

$JAVA_HOME/lib/security/cacerts为“一般的一个”,谁拥有所有的通讯局为当局,是相当重要的。

还可以使用 -D属性在运行时提到路径,如下所示

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

在我的阿帕奇火花应用程序,我用来提供的路径证书和密钥存储使用 --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。