java SSL和cert密钥库

时间:2011-05-03 14:45:09

标签: java keystore

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

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

5 个答案:

答案 0 :(得分:275)

通过系统属性在JVM级别设置SSL属性。这意味着您可以在运行程序时设置它们(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上,指定   pathname必须使用正斜杠/,   代替反斜杠,\

     

如果信托商店位置不是   使用此属性指定的   SunJSSE实现搜索   并在中使用密钥库文件   以下位置(按顺序):

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

    javax.net.ssl.trustStorePassword -   解锁密钥库文件的密码   (商店密码)指定   javax.net.ssl.trustStore

         

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

         

    javax.net.debug - 要切换   在记录SSL / TLS层时,设置   这个属性为ssl。

答案 1 :(得分:96)

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

答案 2 :(得分:11)

首先,有两种密钥库。

个人一般

应用程序将使用启动时或系统默认情况下指示的那个。

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

它们也是加密的

简而言之,路径将如下:

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

答案 3 :(得分:9)

请注意。如果要尝试从Java 9开始打开现有的JKS密钥库,则需要确保也提及以下属性,其值为“ JKS”:

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

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

答案 4 :(得分:7)

您还可以使用-D属性在运行时提及路径

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

在我的apache spark应用程序中,我曾经使用--conf选项提供证书和密钥库的路径,并在spark-submit中提供extraJavaoptions,如下所示

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