首頁 >Java >java教程 >當使用帶有有空 KeyManager 陣列的 SSLContext.init 時,為什麼會出現「忽略不可用的密碼套件」和「沒有通用的密碼套件」錯誤?

當使用帶有有空 KeyManager 陣列的 SSLContext.init 時,為什麼會出現「忽略不可用的密碼套件」和「沒有通用的密碼套件」錯誤?

Barbara Streisand
Barbara Streisand原創
2024-11-01 08:52:021068瀏覽

Why am I getting

您正在使用空的 KeyManager 陣列初始化 SSLContext。

金鑰管理員負責處理伺服器憑證(在伺服器端),這就是您可能打算在使用 javax.net.ssl.keyStore 時進行設定。

但是,如JSSE 參考指南中所述,對第一個參數使用null 並不會實現您認為的效果:

如果KeyManager[] 參數為null,則將為該上下文定義一個空的KeyManager
。如果 TrustManager[] 參數為 null,
將在已安裝的安全提供者中搜尋
TrustManagerFactory 的最高優先權實現,從中取得
適當的 TrustManager。同樣,
SecureRandom 參數可能為 null,在這種情況下,將使用預設的
實作。

空的 KeyManager 不包含任何 RSA 或 DSA 憑證。因此,所有依賴此類憑證的預設密碼套件都已停用。這就是為什麼您收到所有這些「忽略不可用的密碼套件」訊息,最終導致「沒有共同的密碼套件」訊息。

如果您希望將金鑰庫用作金鑰庫,您將需要載入它並用它初始化一個KeyManagerFactory:

KeyStore ks = KeyStore.getInstance("JKS");
InputStream ksIs = new FileInputStream("...");
try {

ks.load(ksIs, "password".toCharArray());

} 最後{

if (ksIs != null) {
    ksIs.close();
}

}

KeyFactory kmManager KeyManagerFactory.getInstance(KeyManagerFactory

    .getDefaultAlgorithm());

kmf.init(ks , "keypassword".toCharArray());

使用kmf.getKeyManagers() 作為SSLContext.init() 的第一個個參數。信任管理器,您也可以使用預設的空SecureRandom。

以上是當使用帶有有空 KeyManager 陣列的 SSLContext.init 時,為什麼會出現「忽略不可用的密碼套件」和「沒有通用的密碼套件」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn