繁体   English   中英

java SSL和cert密钥库

[英]java SSL and cert keystore

我的java程序如何知道包含证书的密钥库在哪里? 或者我如何告诉我的java程序在哪里查找密钥库?

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

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

您必须设置的具体键如下:

javax.net.ssl.keyStore - 包含应用程序进程自己的证书和私钥的Java密钥库文件的位置。 在Windows上,指定的路径名​​必须使用正斜杠/,而不是反斜杠。

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

javax.net.ssl.trustStore - 包含此应用程序进程信任的CA证书集合(信任库)的Java密钥库文件的位置。 在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。

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

只是提醒一句。 如果您尝试在Java 9之后打开现有的JKS密钥库,则需要确保提及以下属性,其值为“JKS”:

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

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

首先,有两种密钥库。

个人一般

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

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

它们也是加密的

简而言之,路径将是:

$JAVA_HOME/lib/security/cacerts为“general one”,它拥有权威机构的所有CA并且非常重要。

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

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

在我的apache spark应用程序中,我曾经在spark-submit中使用--conf选项和extraJavaoptions提供了certs和keystore的路径,如下所示

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

暂无
暂无

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

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