
まとめ
アプリケーションでトラストストアとして使用する .JKS ファイルを作成するには、サーバーから自己署名証明書をダウンロードする必要があります。Red Hat サーバーからこれを行うにはどうすればよいですか?
私が試したこと
証明書を取得するために openssl を使用しようとしました:
echo -n | openssl s_client -connect hostname.example.com:20000 -showcerts | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > downloadedcerts.cert
これは次のメッセージで失敗します:
verify error:num=19:self signed certificate in certificate chain
実際、このサーバーのルート証明書はは自己署名されており、CA からのものではありません。ルート証明書は私の国の政府機関に属しているので、これで問題ありませんが、openssl は証明書をダウンロードするために接続しません。
Firefox で URL を読み込み、手動で証明書エラーを無視して証明書をダウンロードするのは簡単ですが、ファイアウォールのためデスクトップ マシンからサーバーに接続できません。
ご協力いただければ幸いです:)
答え1
検証エラー:num=19:証明書チェーン内の自己署名証明書
実際、このサーバーのルート証明書は CA からのものではなく、自己署名されています。
それは CA ですが、信頼されていないだけです ;)
ブラウザ (ほぼすべてを信頼する) とは異なり、OpenSSL は何も信頼しません (何を信頼するかを指定する必要があります)。
あなたの国のCA証明書をダウンロードしてください(通常はないチェーンで送られた)。ないチェーンに送信されるのは、信頼ポイントであるためです。すでにそれを所有していて、信頼している必要があります。
通常、CA証明書はオンラインで見つかります。たとえば、ここDigiCertの、ここVerisign などです。ダウンロードした証明書を検証してください。検証は難しい部分です。ブラウザは、検証済みの独自の証明書をバンドルして持ち歩くことでこの問題を解決しています。
あなたの国の CA 証明書を独自のファイルに置きます。次に、openssl s_client -connect hostname.example.com:20000 -CAfile my-country-ca.pem
.を使用すると、 または と同様のものs_client
が完了しますVerify OK (0)
。
答え2
独自の証明機関を作成することをお勧めします [編集 - 望んでいたものではありません。次の段落を参照してください]。これはちょっと面倒で、やり方を調べてみると実際よりも難しいように思えます。架空の会社を作り、その会社の証明書をクライアントの信頼されたルートに配置するだけで、自己署名証明書を使用するのではなく、証明書に署名できるようになります。
この質問に対するブルーノの回答の中に説明を見つけました: https://stackoverflow.com/questions/4103472/ssl-handshake-fails-with-a-verisign-chain-certificate-that-contains-two-ca-s
ルート証明書が自己署名されているとは考えていませんでしたが、それは理にかなっています。したがって、私が正しく理解していれば、必要な証明書 (最初の証明書) だけでなく、証明書チェーン内の他のすべての証明書も取得していることになります。ルート証明書がメッセージの原因です。