web-dev-qa-db-ja.com

SSL(pem)証明書が承認するWebサイト/ドメインを見つけることができますか?

(ワイルドカードではない)SSL証明書を発行して、mysub1.example1.comwww.example2.comなどの複数のドメインやサブドメインを、すべて同じ秘密鍵を持つ1つの証明書に一致させることができます。

証明書が有効なドメインのリストを取得することは可能ですか?どうやって?それはブラウザから可能ですか、それともOpenSSL CLIを使用する必要がありますか?

必要に応じて詳細をお尋ねください。正直なところ、質問を明確な言葉で表現する方法がわからないので、改善したいと思っています。

証明書の有効なドメイン名は2か所に規定されています。

1つ目は、Subjectフィールドの一部であるCommon Name(CN)です。ここには1つの名前のスペースしかありません。つまり、www.example.comなどの固定名または*.example.comなどのワイルドカードを使用できます。

2つ目は、サブジェクト代替名(SAN)拡張機能で、証明書が有効な追加の名前を一覧表示します。 SANフィールドには多くのオプションがありますが、関心のあるものはDNSです。

ほとんどのブラウザの証明書GUIを見ると、件名とSAN)フィールドの両方が表示されているはずです。

OpenSSLを使用してそれらを表示するには、次のコマンドを実行するだけです。

$ openssl x509 -noout -text -nameopt multiline -in <cert file>

-nameopt multilineはオプションですが、読みやすくなることに注意してください。次の例は、SANの良い例が含まれているため、ssl.comからのものです。

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            23:dd:f6:40:e2:ad:3f:24:2f:31:9c:c6:48:db:64:92
    Signature Algorithm: sha256WithRSAEncryption
        Issuer:
            countryName               = US
            organizationName          = SSL.com
            organizationalUnitName    = Controlled by COMODO exclusively for SSL.com
            organizationalUnitName    = www.ssl.com
            commonName                = SSL.com Premium EV CA
        Validity
            Not Before: Mar 11 00:00:00 2016 GMT
            Not After : Nov 18 23:59:59 2016 GMT
        Subject:
            serialNumber              = NV20081614243
            jurisdictionCountryName   = US
            jurisdictionStateOrProvinceName = Texas
            jurisdictionLocalityName  = Houston
            businessCategory          = Private Organization
            countryName               = US
            postalCode                = 77025
            stateOrProvinceName       = Texas
            localityName              = Houston
            streetAddress             = Suite 286C
            streetAddress             = 2617 W Holcombe Blvd
            organizationName          = SSL Corp
            organizationalUnitName    = Security
            organizationalUnitName    = COMODO EV Multi-Domain SSL
            commonName                = www.ssl.com
        Subject Public Key Info:
...
            X509v3 Subject Alternative Name: 
                DNS:www.ssl.com, DNS:answers.ssl.com, DNS:faq.ssl.com, DNS:info.ssl.com, DNS:links.ssl.com, DNS:reseller.ssl.com, DNS:secure.ssl.com, DNS:ssl.com, DNS:support.ssl.com, DNS:sws.ssl.com, DNS:tools.ssl.com
...

ドメインの名前として使用されるのは、commonNameSubjectフィールドのみです。 Subjectなど、organizationalUnitName内の他のすべてのエントリは、ドメイン名のように見えても関係ありません。

すべての証明書を取得して保存するには、次のことを試してください。

$ openssl s_client -showcerts -connect www.ssl.com:443 < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | csplit - -z -f cert- '/-END CERTIFICATE-/1' '{*}'
5
garethTheRed