我的Java程序如何知道包含证书的密钥库在哪里?或者可替代地:如何告诉我的Java程序在哪里查找密钥库?在以某种方式指定密钥库之后,如何指定用于向客户端验证服务器的证书?
2wnc66cl1#
SSL属性通过系统属性在JVM级别设置。这意味着您可以在运行程序时设置它们(java -D.或者您可以通过执行System在代码中设置它们。setProperty。您必须设置的特定键如下:
javax.net.keyStore-包含应用程序进程自己的证书和私钥的Java密钥库文件的位置。在Windows上,指定的路径名必须使用正斜杠/代替反斜杠。javax.net.keyStorePassword-从javax指定的密钥库文件中访问私钥的密码。net.ssl.keyStore.此密码使用两次:解锁密钥库文件(存储密码)和解密密钥库中存储的私钥(密钥密码)。javax.net.trustStore-包含此应用程序进程信任的CA证书集合的Java密钥库文件的位置(信任库)。在Windows上,指定的路径名必须使用正斜杠/代替反斜杠\。
/
\
如果未使用此属性指定信任存储位置,SunJSSE实现将在以下位置搜索并使用密钥库文件(按顺序):
$JAVA_HOME/lib/security/jssecacerts
$JAVA_HOME/lib/security/cacerts
javax.net.ssl.trustStorePassword-用于解锁javax.net.ssl.trustStore指定的密钥库文件(存储密码)的密码。javax.net.trustStoreType-(可选)对于Java密钥库文件格式,此属性的值为jks(或JKS)。通常不指定此属性,因为它的默认值已经是jks。javax.net.debug-要打开SSL/TLS层的日志记录,请将此属性设置为ssl。
javax.net.ssl.trustStore
nnsrf1az2#
System.setProperty("javax.net.ssl.trustStore", path_to_your_jks_file);
pxiryf3j3#
只是提醒一下。如果您试图在Java 9或更高版本中打开现有的JKS密钥库,则需要确保您也提到了以下属性,其值为“JKS”:
javax.net.ssl.keyStoreType javax.net.ssl.trustStoreType
原因是www.example中规定的默认密钥库类型 www.example.com Java 9开始,com文件已从jks更改为pkcs12。
gorkyyrv4#
你也可以在运行时使用-D属性指定路径,如下所示
-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
extraJavaoptions
--conf 'spark.driver.extraJavaOptions= -Djavax.net.ssl.trustStore=/home/user/SSL/my-cacerts -Djavax.net.ssl.keyStore=/home/user/SSL/server_keystore.jks'
ncgqoxb05#
首先,有两种密钥库。
个人和一般
应用程序将使用系统启动时指示的值或系统默认值。如果JRE或JDK正在运行,或者如果您选中个人或“全局”文件夹,则它将是一个不同的文件夹。
也加密了
简而言之,路径将是这样的:$JAVA_HOME/lib/security/cacerts为“一般的一个”,谁拥有所有的CA为当局,是相当重要的。
0s7z1bwu6#
在一个M1 iMac系统上,要导入一个与Java或像jGRASP这样的IDE一起使用的密钥,请使用命令sudo keytool -importcert -keystore,在这里是java密钥库的路径,在这里是你要导入的证书的路径,在我的例子中,我有pfsense SSL证书用于代理和防火墙。
sudo keytool -importcert -keystore/Library/Java/JavaVirtualMachines/jdk-19。jdk/Contents/Home/lib/security/cacerts -storepass changeit -file ~/Downloads/SquidCA.crt -alias“root_cert”/Library/Java/JavaVirtualMachines/jdk-19。jdk/Contents/Home/lib/security/cacerts
在M1 iMAC上列出Java证书存储中的内容:
keytool -list -keystore“/Library/Java/JavaVirtualMachines/jdk-19。jdk/Contents/Home/lib/security/cacerts”警告:使用-cacerts选项访问cacerts密钥库
默认密码为changeit重新安装jGRASP或您使用的IDE后,它的功能与java代码,URL news = new URL(“ www.example.com );BufferedReader in = new BufferedReader(new InputStreamReader(news.public void run();Image: Java program running with trusted root SSL cert installed using https URL. URL seen in both proxy Pfsense Firewall and jGRASP IDE同样,是的,Java JDK工具可以使用SSL自签名证书。它也可以在Windows 11中工作,只需使用Oracle的JDK工具包路径C:\Program Files\Java\jdk-20\lib\security\cacerts刀具轨迹C:\Program Files\Java\jdk-20\bin\keytool我只需要把我需要的证书放进名为security的文件夹中,运行与imac类似的命令,只是路径不同。示例:Windows 10 Example of UseJava Root Cert Now added我喜欢这个的地方是当我用import语句测试Java代码时,防火墙可以看到任何一个offs或任何HTTP/https获取请求,这些请求不应该在大型源代码中出现。如果某个导入项目中隐藏了什么,防火墙现在可以看到它。
6条答案
按热度按时间2wnc66cl1#
SSL属性通过系统属性在JVM级别设置。这意味着您可以在运行程序时设置它们(java -D.或者您可以通过执行System在代码中设置它们。setProperty。
您必须设置的特定键如下:
javax.net.keyStore-包含应用程序进程自己的证书和私钥的Java密钥库文件的位置。在Windows上,指定的路径名必须使用正斜杠/代替反斜杠。
javax.net.keyStorePassword-从javax指定的密钥库文件中访问私钥的密码。net.ssl.keyStore.此密码使用两次:解锁密钥库文件(存储密码)和解密密钥库中存储的私钥(密钥密码)。
javax.net.trustStore-包含此应用程序进程信任的CA证书集合的Java密钥库文件的位置(信任库)。在Windows上,指定的路径名必须使用正斜杠
/
代替反斜杠\
。如果未使用此属性指定信任存储位置,SunJSSE实现将在以下位置搜索并使用密钥库文件(按顺序):
$JAVA_HOME/lib/security/jssecacerts
$JAVA_HOME/lib/security/cacerts
javax.net.ssl.trustStorePassword-用于解锁
javax.net.ssl.trustStore
指定的密钥库文件(存储密码)的密码。javax.net.trustStoreType-(可选)对于Java密钥库文件格式,此属性的值为jks(或JKS)。通常不指定此属性,因为它的默认值已经是jks。
javax.net.debug-要打开SSL/TLS层的日志记录,请将此属性设置为ssl。
nnsrf1az2#
pxiryf3j3#
只是提醒一下。如果您试图在Java 9或更高版本中打开现有的JKS密钥库,则需要确保您也提到了以下属性,其值为“JKS”:
原因是www.example中规定的默认密钥库类型 www.example.com Java 9开始,com文件已从jks更改为pkcs12。
gorkyyrv4#
你也可以在运行时使用
-D
属性指定路径,如下所示在我的apache spark应用程序中,我曾经在spark-submit中使用
--conf
选项和extraJavaoptions
提供证书和密钥库的路径,如下所示ncgqoxb05#
首先,有两种密钥库。
个人和一般
应用程序将使用系统启动时指示的值或系统默认值。
如果JRE或JDK正在运行,或者如果您选中个人或“全局”文件夹,则它将是一个不同的文件夹。
也加密了
简而言之,路径将是这样的:
$JAVA_HOME/lib/security/cacerts
为“一般的一个”,谁拥有所有的CA为当局,是相当重要的。0s7z1bwu6#
在一个M1 iMac系统上,要导入一个与Java或像jGRASP这样的IDE一起使用的密钥,请使用命令sudo keytool -importcert -keystore,在这里是java密钥库的路径,在这里是你要导入的证书的路径,在我的例子中,我有pfsense SSL证书用于代理和防火墙。
sudo keytool -importcert -keystore/Library/Java/JavaVirtualMachines/jdk-19。jdk/Contents/Home/lib/security/cacerts -storepass changeit -file ~/Downloads/SquidCA.crt -alias“root_cert”/Library/Java/JavaVirtualMachines/jdk-19。jdk/Contents/Home/lib/security/cacerts
在M1 iMAC上列出Java证书存储中的内容:
keytool -list -keystore“/Library/Java/JavaVirtualMachines/jdk-19。jdk/Contents/Home/lib/security/cacerts”警告:使用-cacerts选项访问cacerts密钥库
默认密码为changeit
重新安装jGRASP或您使用的IDE后,它的功能与java代码,
URL news = new URL(“ www.example.com );
BufferedReader in = new BufferedReader(new InputStreamReader(news.public void run();Image: Java program running with trusted root SSL cert installed using https URL. URL seen in both proxy Pfsense Firewall and jGRASP IDE
同样,是的,Java JDK工具可以使用SSL自签名证书。
它也可以在Windows 11中工作,只需使用Oracle的JDK工具包路径
C:\Program Files\Java\jdk-20\lib\security\cacerts
刀具轨迹
C:\Program Files\Java\jdk-20\bin\keytool
我只需要把我需要的证书放进名为security的文件夹中,运行与imac类似的命令,只是路径不同。
示例:Windows 10 Example of Use
Java Root Cert Now added
我喜欢这个的地方是当我用import语句测试Java代码时,防火墙可以看到任何一个offs或任何HTTP/https获取请求,这些请求不应该在大型源代码中出现。如果某个导入项目中隐藏了什么,防火墙现在可以看到它。