Linuxメールサーバーeximの自己署名証明書を持っています。私のJava関数がGlassFish経由でこのメールサーバーにアクセスできるようにするために、私は最初に以下を発行しました。
# 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証明書から新しいmail.mycompany.com.der
ファイルを派生させました(最初に行ったように)。しかし、上記のkeytoolコマンドを(最初に行ったように)発行すると、エラーCertificate not imported, alias <mail.mycompany.com> already exists.
が発生します。
問題は、同じkeytoolコマンドを使用できないことだと思います。キーストアに証明書を追加しない別の証明書を使用する必要がありますが、すでにそこにある証明書を新しいバージョンで更新します。誰でもそのコマンドの正しい方向に私を向けることができますか?
余談ですが、私が見逃している自動化されたプロセスはありますか?つまり、証明書は常に期限切れになります...つまり、IT管理者は、このようなコードを使用して、常に新しい証明書でキーストアを手動で更新する必要がありますか?または、これを何らかの方法で自動化できますか?
おそらく最も簡単な方法は、keytoolで元の証明書を削除し、同じ情報で新しい証明書を生成することです。これを回避する良い方法は、小さなVM余裕がある場合は、EJBCAをインストールすることです。ちょっと不格好ですが、EJBCAはJavaで記述された無料のオープンソースCAサーバーです。 。すべて信頼チェーンを持つ独自の偽のCA証明書、ユーザー証明書、サーバー証明書などを作成できます。さらに、有効期限が切れた後に証明書を再発行するときに、新しいJKSファイルをすばやく生成するのに非常に適しています。
削除するには:
keytool -delete -keystore myfile.jks -alias 'alias_from_keytool_-list'