[英]java SSL and cert keystore
我的java程序如何知道包含證書的密鑰庫在哪里? 或者我如何告訴我的java程序在哪里查找密鑰庫?
以某種方式指定密鑰庫后,如何指定用於向客戶端驗證服務器的證書?
SSL屬性通過系統屬性在JVM級別設置。 這意味着您可以在運行程序時設置它們(java -D ....)或者您可以通過執行System.setProperty在代碼中設置它們。
您必須設置的具體鍵如下:
javax.net.ssl.keyStore - 包含應用程序進程自己的證書和私鑰的Java密鑰庫文件的位置。 在Windows上,指定的路徑名必須使用正斜杠/,而不是反斜杠。
javax.net.ssl.keyStorePassword - 從javax.net.ssl.keyStore指定的密鑰庫文件訪問私鑰的密碼。 此密碼使用兩次:解鎖密鑰庫文件(存儲密碼),以及解密存儲在密鑰庫中的私鑰(密鑰密碼)。
javax.net.ssl.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.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。
首先,有兩種密鑰庫。
個人和一般
應用程序將使用啟動或系統默認中指示的應用程序。
如果JRE或JDK正在運行,或者您檢查個人或“全局”文件夾,它將是一個不同的文件夾。
它們也是加密的
簡而言之,路徑將是:
$JAVA_HOME/lib/security/cacerts
為“general one”,它擁有權威機構的所有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
提供了certs和keystore的路徑,如下所示
--conf 'spark.driver.extraJavaOptions=
-Djavax.net.ssl.trustStore=/home/user/SSL/my-cacerts
-Djavax.net.ssl.keyStore=/home/user/SSL/server_keystore.jks'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.