我有一個連接到很多外部服務的工作應用程序。我正在添加一個需要客戶端身份驗證的新SOAP客戶端。我可以讓它工作,但不是在不打破應用程序中的其他事情的情況下,所以我對於發生的事情感到非常困惑。一些快速背景:Java客戶端證書衝突
- 我們使用默認的cacerts文件,並在那裏導入了很多可信任的證書。
- 我們創建了一個私鑰,生成了一個證書請求,獲得了證書,並創建了一個包含用於客戶端身份驗證的證書和私鑰的p12文件。
- 如果我們指定P12文件作爲密鑰存儲的應用程序的SOAP客戶端的工作原理:
-Djavax.net.ssl.keyStore = 「keystore.p12」 -Djavax.net.ssl.keyStorePassword =」密碼」 -Djavax.net.ssl.keyStoreType = 「PKCS12」
- 如果我們不這樣做上述情況,而是導入到cacerts文件這個做:
- 了java.lang.RuntimeException:無法實例化類com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClient的實例
- COM .amazonaws.AmazonClientException:無法訪問默認的SSL上下文
- java.security.NoSuchAlgorithmException:錯誤構建的實現(算法:默認,供應商:SunJSSE,等級:sun.security.ssl.SSLContextImpl $ DefaultSSLContext)
- java.security .UnrecoverableKeyException:無法恢復密鑰
keytool -importkeystore -srckeystore keystore.p12 -destkeystore cacerts -srcstoretype pkcs12
它不起作用!如果我們這樣做並且它不工作,並且指定cacerts作爲每步3的密鑰庫(不包括最後一個arg,因爲它是不同的商店類型,對吧?)
因此,通過步驟1-3,我們有了新的集成工作,但問題是,現在應用程序中的其他東西打破了!之前沒有指定其他密鑰庫(我的理解是,它默認爲cacerts)。我們現在有錯誤,如與AWS的SES(電子郵件)服務拋出異常,如:
有人可以向我解釋什麼是造成這種衝突和如何解決它?非常感謝您的幫助!
傑夫
您是否檢查過您是否擁有訪問jre安全庫/文件夾的管理員權限。有時如果你沒有管理權限,你可能會遇到這種例外情況。 –
Cacerts是信任商店而不是關鍵商店。 – beny23
我有權訪問cacerts - 我已經添加了證書以信任那裏,這工作得很好。我對關鍵和信任商店之間的區別感到困惑。從概念上講,我明白了,但是當我指定一個特定的密鑰存儲區時,其他東西就會中斷,而沒有其他配置。對於每個java文檔和我的文件,它看起來應該放到keystore的cacerts中。 – Jeff057