この投稿 に従ってSSL証明書を更新しようとしています。
私は証明書の初心者なので、 このガイド に従いました。しかし、私が入るとき
keytool -keystore mycacerts -storepass changeit -importcert -file "C:\Users\Noks\Desktop\cacerts.pem" -v
エラーが表示されます:
keytool error: Java.lang.Exception: Input not an X.509 certificate
Java.lang.Exception: Input not an X.509 certificate
at Sun.security.tools.KeyTool.addTrustedCert(KeyTool.Java:1913)
at Sun.security.tools.KeyTool.doCommands(KeyTool.Java:818)
at Sun.security.tools.KeyTool.run(KeyTool.Java:172)
at Sun.security.tools.KeyTool.main(KeyTool.Java:166)
どうすれば修正できますか?
Cacerts.pemファイルは単一の証明書を保持していますか?それはPEMなので、それを見てください、それはで始まる必要があります
-----BEGIN CERTIFICATE-----
で終わる
-----END CERTIFICATE-----
最後に、破損していないことを確認するには、opensslを入手して、詳細を出力します
openssl x509 -in cacerts.pem -text
多くのCAは、PKCS7形式の証明書を提供します。
Oracleドキュメント によると、keytoolコマンドはPKCS#7を処理できますが、失敗する場合があります
Keytoolコマンドは、X.509 v1、v2、v3証明書、およびそのタイプの証明書で構成されるPKCS#7形式の証明書チェーンをインポートできます。インポートするデータは、インターネットRFC 1421標準で定義されているバイナリエンコード形式または印刷可能なエンコード形式(Base64エンコードとも呼ばれる)で提供する必要があります。後者の場合、エンコーディングは、先頭が----- BEGINで始まる文字列で区切られ、末尾が----- ENDで始まる文字列で区切られている必要があります。
PKCS7ファイルをインポートできない場合は、PKCS7からX.509に変換してみてください。
openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
これは古いスレッドのように見えますが、ここで私の経験を追加します。私も証明書をインストールしようとしましたが、そのエラーが発生しました。次に、txtエディターでcerファイルを開きましたが、各行の終わりに余分なスペース(文字)があることに気付きました。これらの行を削除すると、証明書をインポートできました。
これが他の誰かにとって何か価値があることを願っています。
また、誰かに役立つ場合に備えて、ここに私の経験を追加します。
職場では、一般的に次の2つのコマンドを使用して、IntelliJ IDEAを有効にして、内部Mavenリポジトリなどのさまざまなサーバーと通信します。
[Elevated]C:\Program Files\JetBrains\IntelliJ IDEA {version}\jre64>bin\keytool
-printcert -rfc -sslserver maven.services.{our-company}.com:443 > public.crt
[Elevated]C:\Program Files\JetBrains\IntelliJ IDEA {version}\jre64>bin\keytool
-import -storepass changeit -noprompt -trustcacerts -alias services.{our-company}.com
-keystore lib\security\cacerts -file public.crt
さて、時々起こることは、ファイアウォールがそれを妨げる、ユーザーがVPNを開始するのを忘れたなど、一時的な接続の問題のために、keytool -printcert
コマンドが外部と通信できないことです。これが起こるのは人生の事実です。これは実際には問題ではありません。
問題は、愚かなツールがそのようなエラーに遭遇したとき、標準エラーデバイスにエラーメッセージを出力せず、標準出力デバイスに出力することです!
そのため、最終的には次のようになります。
public.crt
ファイルにkeytool error: Java.lang.Exception: No certificate from the SSL server
というエラーメッセージが含まれるようになりました。public.crt
のキーの代わりにエラーメッセージが見つかるため、keytool error: Java.lang.Exception: Input not an X.509 certificate
と言って失敗します。一番下の行は:keytool -printcert ... > public.crt
の後にpublic.crt
の内容を常にダンプして、keytool -import ... -file public.crt
の実行に進む前に、エラーメッセージではなく実際にキーであることを確認します
私は3つのことを変更し、それが機能します: