SSL証明書のLinux openssl CN /ホスト名の解決

SSL証明書のLinux openssl CN /ホスト名の解決

CN=hostnameopenssl 1.0.1+を使用するEnterprise Linuxシステムは、証明書の値がそのシステムが配置されているサーバーと一致するかどうかを確認します。 SSL Webアプリケーションを受信するアダプタのIPアドレスに既存の一般的なリバースDNSルックアップを使用しますか? gethostnameライブラリ機能を使用していますか? /etc/hosts ファイルを読みますか? nsswitch.confは動作しますか?

修正する: 他の人と話をした後、これはすべてブラウザ/クライアント側で行われたようです。 URL のホスト部分がアプリケーションにインストールされた証明書の CN 値と一致する場合、ブラウザは満足します。そうですか?

ベストアンサー1

はい、あなたが説明する内容は技術的に正確ですが、より多くのことが起こっています。ブラウザは、いくつかのインジケータに基づいてホストのCNが正しいかどうかを決定します。

主な表示は、HTTPSトラフィック用のSSL証明書を提供するホストが正しいドメインでそれを提供しており、証明書を発行してチェーン署名した認証局(CA)に基づいて証明書の署名チェーンが正しいことです。

opensslを使用して、s_clientブラウザが実行する前後の動作を確認することもできます。

はい

$ openssl s_client -connect encrypted.google.com:443 < /dev/null | head -10
depth=3 C = US, O = Equifax, OU = Equifax Secure Certificate Authority
verify return:1
depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA
verify return:1
depth=1 C = US, O = Google Inc, CN = Google Internet Authority G2
verify return:1
depth=0 C = US, ST = California, L = Mountain View, O = Google Inc, CN = *.google.com
verify return:1
CONNECTED(00000003)
---
Certificate chain
 0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=*.google.com
   i:/C=US/O=Google Inc/CN=Google Internet Authority G2
 1 s:/C=US/O=Google Inc/CN=Google Internet Authority G2
   i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
 2 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
   i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority
---
...
...
DONE

このコマンドを使用すると、SSL証明書の生成に使用されたCNを確認できます。

$ openssl s_client -connect encrypted.google.com:443 < /dev/null|& grep "CN.*google"
depth=0 C = US, ST = California, L = Mountain View, O = Google Inc, CN = *.google.com
 0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=*.google.com
subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=*.google.com

CN=...したがって、ブラウザはこの証明書を提示するホスト名が証明書に含まれるホスト名階層に属していることを確認します。

ニューラルネットワーク研究所

以前は、HTTPS経由で使用する各SSLサーバーのホスト名に対して特定のIPアドレスを予約する必要がありました。ただし、SNI(サーバー名表示)のため、もはやそうではありません。

抜粋

このアプローチは、サイトが各IPアドレスにSSL証明書をインストールするときに有効です(以前は厳しい要件でした)。 SNI(サーバー名を表示)を使用すると、Webサーバーは同じIPアドレスに複数のSSL証明書をインストールできます。 SNIをサポートするブラウザは、初期ハンドシェイク中にアクセスするサーバーのホスト名を指定します。これにより、Webサーバーは接続に使用する正しいSSL証明書を決定できます。

opensslこの状況では、ブラウザが実行する操作を再シミュレートできます。

$ openssl s_client -connect someserver:443 -servername sslsite-example.com

抜粋

SSLネゴシエーションは、リモートサーバーにHTTP要求を送信する前に行わなければなりません。つまり、ブラウザとサーバーはプロセスの最初に証明書を交換する必要があり、ブラウザはアクセスするサイトを指定する機会がありません。 SNIは、SSLネゴシエーション中にHost:ヘッダータイプを交換できるようにすることでこの問題を解決します。

引用する

おすすめ記事