我的 Java 程序如何知道包含证书的密钥库在哪里?
或者:我如何告诉我的 Java 程序在哪里寻找密钥库?
以某种方式指定密钥库后,如何指定用于向客户端验证服务器的证书?
SSL 属性通过系统属性在 JVM 级别设置。这意味着您可以在运行程序时设置它们 (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 上,指定的 路径名必须使用正斜杠,
, 代替反斜杠,/
.\
如果信任存储位置不是 使用此属性指定, 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.
System.setProperty("javax.net.ssl.trustStore", path_to_your_jks_file);
请注意。如果您尝试在 Java 9 及更高版本中打开现有的 JKS 密钥库,则需要确保您也提及以下属性并将其值设置为“JKS”:
javax.net.ssl.keyStoreType
javax.net.ssl.trustStoreType
原因是 java.security 文件中规定的默认密钥库类型已从 Java 9 开始从 jks 更改为 pkcs12。
您还可以在运行时使用
-D
属性提及路径,如下所示
-Djavax.net.ssl.trustStore=/home/user/SSL/my-cacerts
-Djavax.net.ssl.keyStore=/home/user/SSL/server_keystore.jks
在我的 apache spark 应用程序中,我曾经使用
--conf
选项和 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'
首先,有两种密钥库。
个人和一般
应用程序将使用启动时指定的或系统默认的。
如果运行的是JRE或JDK,或者勾选个人或“全局”的,会是不同的文件夹
它们也被加密了
简而言之,路径将是这样的:
$JAVA_HOME/lib/security/cacerts
对于“一般人”,拥有当局的所有CA并且非常重要。
在 M1 iMac 系统上导入密钥以与 Java 或 IDE(如 jGRASP)一起使用,使用命令 sudo keytool -importcert -keystore与代理和防火墙一起使用。
sudo keytool -importcert -keystore /图书馆/Java/JavaVirtualMachines/jdk-19.jdk/Contents/Home/lib/security/cacerts -storepass changeit -file ~/Downloads/SquidCA.crt -别名“root_cert”/Library/Java/JavaVirtualMachines/jdk-19.jdk/Contents/Home/lib/security/cacerts
在 M1 iMAC 上列出 Java 证书存储中的内容:
keytool -list -keystore “/图书馆/Java/JavaVirtualMachines/jdk-19.jdk/Contents/Home/lib/security/cacerts” 警告:使用 -cacerts 选项访问 cacerts 密钥库
默认密码是 changeit
重新安装 jGRASP 或您使用的 IDE 后,它可以像 java 代码一样运行,
URL news = new URL("https://moxie.foxnews.com/feedburner/world.xml/");
BufferedReader in = new BufferedReader(new InputStreamReader(news.openStream()));
再次,是的,Java JDK 工具可以使用 SSL 自签名证书。
它也适用于 Windows 11 只需使用 Oracle 的 JDK 工具包路径
C:\Program Files\Java\jdk-20\lib\securit