java SSL和证书密钥库
我的java程序如何知道包含证书的密钥库在哪里?或者,我如何告诉java程序在哪里查找密钥库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
在以某种方式指定密钥库之后,如何指定用于向客户端验证服务器的证书 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.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