Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java SSL和证书密钥库_Java_Keystore - Fatal编程技术网

java SSL和证书密钥库

java SSL和证书密钥库,java,keystore,Java,Keystore,我的java程序如何知道包含证书的密钥库在哪里?或者,我如何告诉java程序在哪里查找密钥库 在以某种方式指定密钥库之后,如何指定用于向客户端验证服务器的证书 SSL属性通过系统属性在JVM级别设置。这意味着您可以在运行程序时设置它们(java-D…),也可以通过执行System.setProperty在代码中设置它们 System.setProperty("javax.net.ssl.trustStore", path_to_your_jks_file); 必须设置的特定键如下所示: jav

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


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

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

System.setProperty("javax.net.ssl.trustStore", path_to_your_jks_file);
必须设置的特定键如下所示:

javax.net.ssl.keyStore-文件的位置 包含 申请进程自己的证书 和私钥。在Windows上 指定的路径名必须使用forward 斜杠,/,代替反斜杠

javax.net.ssl.keystrepassword-密码 要从中访问私钥,请执行以下操作: 指定的密钥库文件 javax.net.ssl.keyStore。这个密码 用于两次:解锁密钥库 文件(存储密码),并进行解密 存储在密钥库中的私钥 (钥匙密码)

javax.net.ssl.trustStore-文件的位置 包含 受信任的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


    首先,有两种密钥库

    个人一般

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

    如果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应用程序中,我使用spark submit中的
    --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' 
    

    只是提醒一下。如果您试图在Java 9以后的版本中打开一个现有的JKS密钥库,则需要确保您也提到了以下属性,其值为“JKS”:


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

    更适合链接到引用该文件的文档。我猜是这样的:正式文档应该是JSSE参考指南:JDK7现在更合适了。对于任何想要编辑系统信任库的人,默认密码是“changeit”:+1表示javax.net.ssl.trustStorePassword属性。我已经四处寻找了一段时间,这是第一次提到它。有人知道如何在windows框中引用它吗?System.setProperty(“javax.net.ssl.trustStore”,“C:\\ProgramFiles(x86)\\Java\\jdk1.7.0\U 21\\jre\\lib\\security\\cacerts”);不适合我:(在Windows上,指定的路径名必须使用正斜杠/,而不是反斜杠。\。这是否有效?我使用的代码与我的“jks”文件包含CA证书的代码相同。但我仍然得到javax.xml.ws.webserviceCeption:org.apache.axis2.AxisFault:传输错误:403错误:通过SOAP生成的证书调用客户端代码时出现的禁止错误。)tubs.有什么想法吗?还有一个密码系统属性(javax.net.ssl.trustStorePassword)。也可以作为JVM参数传递-Djavax.net.ssl.trustStore=clientTrustStore.key-Djavax.net.ssl.trustStorePassword=customPassword@james26111nov:如果您收到HTTP 403错误(或任何其他HTTP响应)调用HTTPS端点,则意味着您成功通过了TLS设置:HTTP交互仅在TLS通道设置完成后发生(否则无法保护)。因此--是的,这个答案显然对您有效。:-)最好避免使用System.setProperty设置(以下方法),请参阅:,如何为SSLContext构造KeyManagerFactory类型为“keystore”和“truststore”。请不要发明多余的术语。
    javax.net.ssl.keyStoreType
    javax.net.ssl.trustStoreType