[英]Where is a CAcert's password used?
我正在使用供應商的設備,他們使用默認的 Java cacert
添加證書以允許自簽名證書。 在執行此過程時,我注意到 cacert 使用默認密碼changeit
為了提高安全性,我想更改cacert
密碼。 網上有說明。 但是,我擔心一旦更改密碼,使用cacert
的應用程序將停止正常運行。
我意識到我並不真正了解 Java 如何訪問cacert
。
cacert
密碼嗎?cacert
密碼嗎?cacert
密碼? 首先,它是末尾帶有“s”的cacerts
,而不是cacert
。 密碼只需要修改文件,包括添加或刪除證書。 使用此文件不需要密碼,但如果您提供密碼,它將用於驗證文件的完整性。
Java 在驗證證書鏈時默認使用cacerts
,默認情況下它不使用密碼。 即使 JDK 發布了使用密碼changeit
保護的cacerts
文件,Java 運行時也不會假定這一點。 您可以通過幾種方式更改默認行為,其中最簡單的是將 Java 系統屬性javax.net.ssl.trustStorePassword
設置為密碼。 還有一個 Java 系統屬性javax.net.ssl.trustStore
可用於指向要用來代替cacerts
的文件。 使用這些工具,您可以選擇並獨立地:
cacerts
文件的密碼。cacerts
。 盡管如此,有一個明顯的警告需要提及。 你說這是供應商的設備。 這意味着 Java 環境可能已經被定制。 也許那里已經有代碼假設cacerts
密碼是changeit
。 您確實詢問過是否有任何東西使用cacerts
密碼。
以上實際上只是一個摘要,完整的故事記錄在JSSE 參考指南中。 我將在此處復制與您的問題特別相關的部分:
您可以自己直接實現此接口,也可以從基於提供者的 TrustManagerFactory(例如由 SunJSSE 提供者提供的)獲取一個接口。 您還可以實現自己的接口,委托給工廠生成的信任管理器。 例如,您可以這樣做來過濾生成的信任決策並通過圖形用戶界面查詢最終用戶。
如果將空 KeyStore 參數傳遞給 SunJSSE PKIX 或 SunX509 TrustManagerFactory,則工廠使用以下過程來嘗試查找信任材料:
- 如果定義了
javax.net.ssl.trustStore
屬性,則 TrustManagerFactory 會嘗試使用該系統屬性指定的文件名查找文件,並將該文件用於 KeyStore 參數。 如果還定義了javax.net.ssl.trustStorePassword
系統屬性,則其值用於在打開信任庫之前檢查其數據的完整性。 如果定義了javax.net.ssl.trustStore
屬性但指定的文件不存在,則會創建一個使用空密鑰庫的默認 TrustManager。- 如果未指定
javax.net.ssl.trustStore
系統屬性,則:
- 如果文件java-home/lib/security/jssecacerts
存在,則使用該文件;
- 如果文件java-home/lib/security/cacerts
存在,則使用該文件;
- 如果這些文件都不存在,則 TLS 密碼套件是匿名的,不執行任何身份驗證,因此不需要信任庫。要了解有關 java-home 所指內容的更多信息,請參閱術語和定義。
在檢查
cacerts
文件之前,工廠會查找通過javax.net.ssl.trustStore
安全屬性指定的文件或jssecacerts
文件。 因此,您可以提供一組特定於 JSSE 的受信任根證書,這些根證書與cacerts
中可能存在的證書分開,用於代碼簽名目的。
$JAVA_HOME/lib/security/cacerts
是 Java 安裝的默認信任庫。
信任庫與密鑰庫相同,但在運行時應用不同。 如果需要,建議創建您自己的密鑰庫和信任庫文件,並在啟動時告訴 JVM 去哪里找。
您可以將密碼分配給 Java 密鑰庫(jks 文件),您可以將密碼分配給存儲在密鑰庫中的證書/密鑰,您甚至可以同時執行這兩項操作。
java truststore 的默認密碼是changeit
,如果你認真對待它,你甚至會被要求更改它。 啟動某些 Java 應用程序時,您可以指定密鑰庫的位置和密碼,通常對於需要密鑰的應用程序,您還可以指定用於從密鑰庫中獲取密鑰的別名和密碼。
也可以看看
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.