概要
アプリケーションでトラストストアとして使用する.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をロードし、証明書エラーを手動で無視して証明書をダウンロードするのは簡単ですが、ファイアウォールが原因でデスクトップマシンからサーバーに接続できません。
どんな助けでも大歓迎です:)
エラーの確認:num = 19:証明書チェーン内の自己署名証明書
実際、このサーバーのルート証明書は自己署名されており、CAからのものではありません。
それはCAであり、信頼されていないだけです;)
ブラウザ(ほぼすべてを信頼する)とは異なり、OpenSSLは何も信頼しません(何を信頼するかを指示する必要があります)。
あなたの国のCA証明書をダウンロードします(通常notはチェーンで送信されます)。そのnotは、信頼ポイントであるため、チェーンで送信されます。あなたはすでにそれを持っていて、それを信頼しなければなりません。
通常、CA証明書はオンラインで見つけることができます。たとえば、 here はDigiCert、 here はVerisignなどです。ダウンロードした証明書を確認してください。検証は難しい部分です。ブラウザは、検証済みの証明書を独自にバンドルして持ち歩くことで解決します。
国のCA証明書を独自のファイルに配置します。次に、_openssl s_client -connect hostname.example.com:20000 -CAfile my-country-ca.pem
_を使用します。 _s_client
_はVerify OK (0)
または同様のもので完了します。
独自の認証局を作成することをお勧めします[編集-必要なものではありません。次の段落を参照]。それは一種のPITAであり、その方法を研究するとき、実際よりも難しいように思われます。クライアントの信頼されたルートに証明書を挿入する架空の会社を作成するだけで、自己署名証明書を使用する代わりに証明書に署名できるようになります。
私はここでこの質問に対するブルーノの回答で説明を見つけました: https://stackoverflow.com/questions/4103472/ssl-handshake-fails-with-a-verisign-chain-certificate-that-contains- two-ca-s
私はルート証明書を自己署名とは考えていませんでしたが、それは理にかなっています。したがって、私が正しく理解していれば、必要な証明書(最初の証明書)だけでなく、証明書チェーン内の他のすべてのものも取得しています。ルート証明書は、メッセージの原因となる証明書です。