簡體   English   中英

java SSL和cert密鑰庫

[英]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實現將在以下位置(按順序)搜索並使用密鑰庫文件:

  1. $JAVA_HOME/lib/security/jssecacerts
  2. $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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM