現在、NginX リバース プロキシを介してメール サーバーのクライアント証明書認証を設定するのが難しい問題が発生しました。
この設定は、ほとんどの場合、クライアント証明書なしでうまく機能するようです。ただし、これらのチェックを有効にしてテストを実行すると、openssl s_client
常に次のような結果が表示されます。
Verify return code: 2 (unable to get issuer certificate)
私のnginx.confの関連部分は次のとおりです。
ssl on;
ssl_certificate /etc/ssl/certs/server_cert.pem;
ssl_certificate_key /etc/ssl/private/server_key.pem;
ssl_client_certificate /etc/ssl/certs/IntermediateCA_chain.crt;
ssl_crl /etc/ssl/crl.pem;
ssl_verify_client on;
文書中間CA_chain.crtこれは PEM 形式で、IntermediateCA 証明書と後続の RootCA 証明書で構成されます。
注: 私がするとき
openssl x509 -text -noout -in IntermediateCA_chain.crt
IntermediateCAの証明書のみが表示されます。私はチェーンが現れると予想しました。これは正しい行動ですか?
次のコマンドを使用して接続をテストします。
openssl s_client -connect server:995 -cert mycert.pem\
-key mykeyfile.pem -debug -CAfile IntermediateCA_chain.pem
~につながる
[...]
0b50 - b3 c3 3b 17 66 8e 52 b3-ad 7f 14 ..;.f.R....
depth=1 DC = top, DC = ad, CN = Intermediate CA
verify error:num=2:unable to get issuer certificate
issuer= C = DE, O = My Company, CN = My Companies Root CA, emailAddress = [email protected]
read from 0x10f6a10 [0x10fe333] (5 bytes => 5 (0x5))
[...]
私は両側で考えられるIntermediateCA_chain.pemのすべてのバリエーションを試しました(IntermediateCA.pem、RootCA.pem、IntermediateCA_chein.pem)。
-CAfile
useによって少し変更され、サーバーログには何も表示されないため、クライアント側に欠陥があるようです(実際には何も表示されません。接続試行がないか何もありません)。私は見るのが好きだと思います。中間CA_chain.pemサーバー側またはクライアント側では正しく読み取れません。このエラーにより、opensslはIntermediateCAと発行された証明書を検証できないようです。誰かがこの謎を解くのを助けることができますか?
答え1
問題が解決しました。
他の人に役立つ可能性を排除するために、原因と解決策を投稿します。
最初のエラー()は、verify error:num=2:unable to get issuer certificate
クライアントが使用する形式によって発生します。-CAfile
これは x509 PEM 形式で、RootCA 証明書の IntermediateCA 証明書チェーンを含みます。問題はそれです。返品その証明書ブロックの後には、各CAの証明書失効リスト(CRL)が続きます。これを削除するとエラーが修正されました。
その後、私はnginx.confでさまざまなオプションをオンにして診断した説明的ではない「SSLエラー」を受け取りました(ヒントを与えた@mofoeに感謝します!)。ssl_crl
内部にあることが判明しましたnginx.confIntermediateCA用のCRL(x509 PEM形式!)だけでなく、Root-CA用のCRLも含める必要があります。 2つのファイルを1つのCRLファイルにマージすると、2番目のエラーが解決され、サーバーは期待されたメールサーバーのウェルカムメッセージで応答しました。