2013-12-13 243 views
5

我有我的linux電子郵件服務器exim的自簽名證書。爲了使我的Java函數訪問通過GlassFish的此電子郵件服務器,我最初發布:新手keytool命令 - 如何更新已添加到密鑰庫的證書?

# keytool -importcert -v -noprompt -alias mail.mycompany.com -file /path/to/mail.mycompany.com.der -keystore /path/to/config/cacerts.jks -storepass changeit 
Certificate was added to keystore 

這工作得很好,直到證書過期。我必須創建一個新的自簽名證書,現在Java提供了錯誤PKIX path validation failed … path does not chain with any of the trust anchors

爲了嘗試解決這個問題,我從新的exim cert(原來的做法)中導出了一個新的mail.mycompany.com.der文件。但是,當我發出上述keytool命令(如最初那樣),它給出了錯誤Certificate not imported, alias <mail.mycompany.com> already exists.

我認爲問題是我不能使用相同的keytool命令。我需要使用另一個不會將證書添加到密鑰庫的方法,但會使用較新的版本更新已有的證書。任何人都可以爲我指出正確的方向嗎?

順便說一句,有沒有一些自動化過程,我錯過了?也就是說,證書的所有時間到期......這是否意味着IT管理員需要使用這樣的代碼手動更新密鑰存儲和新證書?或者,這可以自動化嗎?

回答

17

也許最簡單的方法是讓keytool刪除原始證書並使用相同的信息生成新的證書。解決這個問題的一個好方法是,如果你有一個小型虛擬機,你可以爲它安裝備份,那就是安裝EJBCA。它有點笨重,但EJBCA是一個免費的,用Java編寫的開源CA服務器。您可以創建自己的僞造的CA證書,用戶證書,服務器證書等,它們都具有信任鏈。另外,當您在證書過期後重新簽發證書時,爲您快速生成新的JKS文件相當不錯。

刪除:

keytool -delete -keystore myfile.jks -alias 'alias_from_keytool_-list'

+0

非常感謝邁克,真正幫助! – ggkmath

相關問題