web-dev-qa-db-ja.com

OpenSSLS_Serverを使用して着信SSLを確認する

Opensslを使用した双方向の証明書認証を使用したいと考えています。

次のようにs_serverを開くと、クライアントは私のサーバーに接続できます。

openssl s_server -accept 12345 -cert our-cert.pem

(our-cert.pemは私たちの証明書です。)

これは正常に機能します。ただし、私の要件は次のとおりです。

  1. 着信証明書が信頼できるCAで有効であることを確認し、
  2. 共通名が予想どおりであることを確認します。

私はこれを試しました:

openssl s_server -accept 12345 -cert our-cert.pem -CApath /etc/ssl/certs/

これにより、クライアントは接続できます。しかし、私の質問は次のとおりです。

  1. 着信SSLが有効であり、CAによって発行されていることを確認するにはどうすればよいですか?
  2. 共通名が私が期待するものであることをどのように検証できますか?
11
HenryHayes

サーバーの場合、「-Verify」オプションを追加して、クライアントに証明書の提供を強制する必要があります。深さは、クライアント証明書チェーンの最大長です。

それは質問#1の世話をする必要があります。

#2の場合、これらのOpenSSLコマンドを使用して共通名で制限する方法があるかどうかはわかりません。

サーバー/クライアントコマンドのOpenSSLドキュメントは次の場所にあります。

s_server

s_client

6
gtrig

CAをテストするには、次を使用します。

/usr/local/ssl/bin/openssl s_server -accept 7569 -cert /opt/GCTI/cert/Host1_cert.pem -CAfile /opt/GCTI/cert/ca_cert.pem -key /opt/GCTI/cert/Host1_priv_key.pem              

-cert is the public key file for this Host
-key is the private key file for this Host
-CAfile is the CA file, needed for self signed certificate
-port is the port number to open up

これにより、指定された証明書を使用したTLS接続を受け入れるリッスンポート7569が開きます。

cAが有効でない場合、最後の行は次のようになります。

Verify return code: 21 (unable to verify the first certificate)

このサーバーに接続するには、完全なエンドツーエンドのテスト(実際には質問ではありません)

openssl s_client -showcerts -connect Host1:7569 -CAfile  /opt/GCTI/cert/ca_cert.pem  

host1を実際のホストに置き換えます。これにより、TLSサービスが有効であり、同じCAによって署名された証明書が実行されていることが確認されます。

4
oden