Answers:
System.setProperty("javax.net.ssl.trustStore", path_to_your_jks_file);
SSL属性是通过系统属性在JVM级别设置的。这意味着您可以在运行程序时设置它们(java -D ....),也可以通过执行System.setProperty在代码中对其进行设置。
您必须设置的特定键如下:
javax.net.ssl.keyStore-包含应用程序进程自己的证书和私钥的Java密钥库文件的位置。在Windows上,指定的路径名必须使用正斜杠/代替反斜杠。
javax.net.ssl.keyStorePassword-从javax.net.ssl.keyStore指定的密钥库文件访问私钥的密码。此密码使用了两次:解锁密钥库文件(存储密码),以及解密存储在密钥库中的私钥(密钥密码)。
javax.net.ssl.trustStore -Java密钥库文件的位置,该文件包含此应用程序进程信任的CA证书的集合(信任库)。在Windows上,指定的路径名必须使用正斜杠
/
代替反斜杠\
。如果未使用此属性指定信任存储位置,则SunJSSE实现将在以下位置(按顺序)搜索并使用密钥存储文件:
$JAVA_HOME/lib/security/jssecacerts
$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。
请注意。如果要尝试从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
对于“通用机构”而言,拥有所有机构的CA,这一点非常重要。
您还可以使用-D
以下属性在运行时提及路径
-Djavax.net.ssl.trustStore=/home/user/SSL/my-cacerts
-Djavax.net.ssl.keyStore=/home/user/SSL/server_keystore.jks
在我的apache spark应用程序中,我曾经使用--conf
option和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'