您正在使用空的 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中文網其他相關文章!