จะทราบได้หรือไม่ว่าเว็บไซต์ / โดเมนใดที่ใบรับรอง SSL (pem) อนุมัติ


3

A (ไม่ใช่ตัวแทน) ใบรับรอง SSL จะสามารถออกเพื่อให้ตรงกับหลายโดเมนและโดเมนย่อยเช่นmysub1.example1.com, www.example2.comและอื่น ๆ อีกมากมายทั้งหมดในหนึ่งใบรับรองกับคีย์ส่วนตัวเหมือนกัน

เป็นไปได้ไหมที่จะรับรายชื่อของโดเมนที่ใบรับรองนั้นใช้ได้? อย่างไร? เป็นไปได้จากเบราว์เซอร์หรือฉันควรใช้ OpenSSL CLI

กรุณาสอบถามข้อมูลเพิ่มเติมหากคุณต้องการมัน สุจริตฉันไม่ทราบวิธีการตั้งคำถามในคำที่ชัดเจนและฉันยินดีที่จะปรับปรุง

คำตอบ:


4

ชื่อโดเมนที่ถูกต้องสำหรับใบรับรองมีการระบุในสองแห่ง

First คือชื่อสามัญ (CN) ซึ่งเป็นส่วนหนึ่งของฟิลด์หัวเรื่อง มีพื้นที่เพียงหนึ่งชื่อที่นี่ซึ่งหมายความว่ามันอาจจะเป็นชื่อคงที่เช่นเป็นหรือสัญลักษณ์เช่นwww.example.com*.example.com

อย่างที่สองคือส่วนขยาย Subject Alternate Name (SAN) ซึ่งแสดงรายการชื่อเพิ่มเติมที่ใบรับรองนั้นใช้ได้ มีตัวเลือกมากมายสำหรับฟิลด์ SAN แต่ตัวเลือกที่คุณสนใจคือ DNS

หากคุณดู GUI ใบรับรองของเบราว์เซอร์ส่วนใหญ่คุณจะเห็นทั้งฟิลด์ Subject และ SAN

เพื่อดูพวกเขาโดยใช้ OpenSSL เพียงแค่เรียกใช้:

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

โปรดทราบว่า-nameopt multilineเป็นตัวเลือก แต่ทำให้อ่านง่ายขึ้น ตัวอย่างต่อไปนี้มาจาก ssl.com เนื่องจากมีตัวอย่างที่ดีของ SAN:

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
...

มีเพียงcommonName Subjectฟิลด์ที่ใช้เป็นชื่อของโดเมน รายการอื่น ๆ ทั้งหมดภายในSubjectเช่นรายการorganizationalUnitNameที่ไม่เกี่ยวข้องแม้ว่าจะดูเหมือนชื่อโดเมน

หากต้องการดึง certs ทั้งหมดและบันทึกให้ลอง:

$ 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' '{*}'

ขอบคุณสำหรับคำตอบ สามารถทำได้โดยไม่ต้องดาวน์โหลดใบรับรองด้วยตนเองหรือไม่? คุณช่วยระบุคำสั่งที่จะทำเช่นนี้ได้openssl s_client connectหรือไม่?
นักฟิสิกส์ควอนตัม

แม้ว่าopenssl s_client -show-certs -connect www.ssl.com:443จะแสดงหัวเรื่องและผู้ออกใบรับรองระยะไกลทั้งหมดในเครือ แต่จะไม่แสดงส่วนขยายใด ๆ ดังนั้นคุณจะไม่สามารถเห็น SAN ได้ ในทำนองเดียวกันgnutls-cli -print-certs www.ssl.com </dev/nullจะแสดงหัวเรื่องและผู้ออก แต่ไม่มี SAN
garethTheRed

คำถามสุดท้าย. คุณช่วยให้วิธีการดาวน์โหลดใบรับรองโดยใช้ openssl (หรือวิธีบรรทัดคำสั่งอื่น ๆ )? ขอบคุณ
นักฟิสิกส์ควอนตัม

sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > out.pemท่อส่งออกของทั้งสองคำสั่งในความคิดเห็นก่อนหน้าของฉันไป out.pemอาจมีใบรับรองมากกว่าหนึ่งใบ คุณจะต้องแบ่งออกเป็นไฟล์ต่างๆหากคุณต้องการเรียกใช้ผ่านopenssl x509 ...คำสั่งในคำตอบของฉันมิฉะนั้นจะแสดงเฉพาะใบรับรองแรกเท่านั้น
garethTheRed

"... ชื่อโดเมนที่ถูกต้องสำหรับใบรับรองถูกกำหนดในสองแห่ง ... อันดับแรกคือชื่อสามัญ (CN) ซึ่งเป็นส่วนหนึ่งของฟิลด์หัวเรื่อง" - การวางชื่อโฮสต์ใน CN นั้นเลิกใช้แล้วทั้ง IETF และ CA / ฟอรั่ม B หากชื่อโฮสต์อยู่ใน CN รายการนั้นจะต้องแสดงอยู่ใน SAN ด้วย ไม่จำเป็นต้องตรวจสอบ CN ยกเว้นว่าเป็นใบรับรองที่มีรูปแบบไม่ถูกต้อง
jww
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.