SSL証明書を拒否するブラウザーの数を調べる


11

WebサーバーにHTTPリクエストを送信するときに、SSL証明書を拒否するブラウザーの数を調べたいと思います。現在、ほとんどの最新ブラウザで認識されているように見える無料のCAを使用していますが、ブラウザとオペレーティングシステムの組み合わせを徹底的にテストすることなく、いくつかの数値を取得したいと思います。

証明書の検証が失敗するとブラウザが接続を終了することを理解していますが、Apacheがこれを検出する方法はありますか?特定の診断情報を取得する予定はありません-証明書/ SSLの問題があったという事実だけで十分です。


1
Apacheでこれを行うことはできません。おそらく、Apacheの前にHAProxyのようなものを置くことで、はるかに簡単になります。
フローリンAsăvoaie14年

SSLプロトコルにはエラーコードフィールドがあります。このフィールドを使用して、接続を終了する側は、接続が終了した理由を相手に伝えることができます。そのフィールドの情報がどの程度具体的であるか、またはこの特定のケースに適用できるかどうかはわかりません。私もこの質問に答えます。答えは自分にとっても役立つかもしれないからです。
カスペルド

回答:


3

SSLプロトコルには、CAが不明な場合のアラートコードが実際にあります... tsharkのようなものを使用して、それを検出できます。

しかし、より便利なのは、問題を回避する方法を知っていることです。Apacheでは、次の3つのディレクティブがあることを確認してください。

SSLCertificateFile /etc/pki/tls/certs/myserver.cert
SSLCertificateKeyFile /etc/pki/tls/private/myserver.key
SSLCertificateChainFile /etc/pki/tls/certs/myserver.ca-bundle

ファイル名に付けられた拡張子は、Apacheにとっては重要ではありません。この場合、SSLCertificateFileはサーバーのサブジェクトを持つ単一のX.509証明書になり、SSLCertificateChainFileは中間CA証明書とルートCA証明書の連結になります(最初にルートから始まります)。

PEMエンコーディングで証明書チェーンを探索するのに役立つ便利なスクリプトを次に示します。

#!/bin/bash
#
# For an input of concatenated PEM ("rfc style") certificates, and a
# command-line consisting of a command to run, run the command over each PEM
# certificate in the file. Typically the command would be something like
# 'openssl x509 -subject -issuer'.
#
# Example:
#
#    ssl-rfc-xargs openssl x509 -subject -issuer -validity -modulus -noout < mynewcert.pem
#
sed -e 's/^[ \t]*<ds:X509Certificate>\(.*\)$/-----BEGIN CERTIFICATE-----\n\1/' \
    -e 's/^[ \t]*<\/ds:X509Certificate>[ \t]*$/-----END CERTIFICATE-----\n/' \
    -e 's/^\(.*\)<\/ds:X509Certificate>[ \t]*$/\1\n-----END CERTIFICATE-----\n/' \
| gawk -vcommand="$*" '
    /^-----BEGIN /,/^-----END / {
        print |& command
    }
    /^-----END / {
        while ((command |& getline results) > 0) {
             print results
        }
        close(command)
    }
    '

(この特定のスクリプトは特定のXMLアプリケーションにも使用されます。これは、開始近くのsedビットがサポートすることを意味します。興味深い部分はgawkによって行われます。)

これを使用する方法の例は次のとおりです(CAバンドルの証明書が正しい順序であるかどうかを判断するなど、これは重要な場合があります)。

$ openssl s_client -connect google.com:443 -showcerts </dev/null 2>&1 | ssl-rfc-xargs openssl x509 -subject -issuer -noout
subject= /C=US/ST=California/L=Mountain View/O=Google Inc/CN=google.com
issuer= /C=US/O=Google Inc/CN=Google Internet Authority G2
subject= /C=US/O=Google Inc/CN=Google Internet Authority G2
issuer= /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
subject= /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
issuer= /C=US/O=Equifax/OU=Equifax Secure Certificate Authority

1つの証明書の発行者が親のサブジェクトに隣接していることに注意してください[すぐ下]

次に、そのスクリプトを使用してローカルファイルを検査する方法の別の例を示します。

$ < /etc/pki/tls/certs/example.ca-bundle ssl-rfc-xargs openssl x509 -subject -issuer -noout
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.