วิธีบันทึกใบรับรอง SSL เซิร์ฟเวอร์ระยะไกลภายในเครื่องเป็นไฟล์


319

ฉันต้องดาวน์โหลดใบรับรอง SSL ของเซิร์ฟเวอร์ระยะไกล (ไม่ใช่ HTTPS แต่การจับมือ SSL ควรเหมือนกับ Google Chrome / IE / wget และ curl ทั้งหมดให้ข้อผิดพลาดในการตรวจสอบใบรับรองล้มเหลว) และเพิ่มใบรับรองเป็นที่เชื่อถือได้ในแล็ปท็อปของฉัน Windows ' ที่เก็บใบรับรองเนื่องจากฉันไม่สามารถรับคนไอทีของฉันให้ใบรับรอง CA แก่ฉัน

นี่คือการสื่อสารในสำนักงานดังนั้นฉันจึงไม่สามารถใช้ลูกค้าจริงเพื่อรับใบรับรองได้

ฉันจะทำสิ่งนี้ได้อย่างไรฉันมี Windows 7 และกอง Linux ที่สะดวกดังนั้นเครื่องมือใด ๆ / ภาษาสคริปต์ได้ดี


หากต้องการรับใบรับรองเซิร์ฟเวอร์อีเมลโปรดดูที่security.stackexchange.com/questions/70528/…
นั่นคือ Guy บราซิล

เป็นไปได้มากที่เบราว์เซอร์ของคุณมีคุณสมบัติในตัวสำหรับสิ่งนี้ - อาจอยู่ภายใต้ "เครื่องมือสำหรับนักพัฒนา"
โนเบิล

คำตอบ:


316

หากคุณมีสิทธิ์เข้าถึง OpenSSL ลอง

openssl s_client -connect {HOSTNAME}:{PORT} -showcerts

แทนที่ {HOSTNAME} และ {PORT} ด้วยค่าของคุณ


2
ฉันชอบตัวเลือกนี้เนื่องจากไม่ต้องเปิด GUI และฉันสามารถทำได้ผ่าน SSH จากเซิร์ฟเวอร์ของเรา
บึง

2
นอกจากนี้ยังใช้งานได้กับโปรโตคอลอื่นที่ไม่ใช่ HTTP
แมตต์

14
โซลูชันของ elec3647 ทำการแยก PEM โดยอัตโนมัติใน shell shell
phs

4
443 เป็นพอร์ตเริ่มต้นสำหรับ HTTPS
Flimm

4
ฉันต้องการ-servernameตัวเลือกเพื่อรับใบรับรองโฮสต์เสมือน gist.github.com/Artistan/5219484efb2fe51cd064175b3d0d5971
Artistan

240

วิธีที่รวดเร็วในการดึงและดาวน์โหลดใบรับรองคือการเรียกใช้คำสั่งต่อไปนี้ซึ่งไพพ์เอาต์พุตจาก -showcerts ไปยังคำสั่ง x509 ssl ซึ่งเพิ่งตัดสิ่งที่ไม่เกี่ยวข้องออกไป ตัวอย่างเช่น:

openssl s_client -showcerts -connect server.edu:443 </dev/null 2>/dev/null|openssl x509 -outform PEM >mycertfile.pem

ในการใช้ใบรับรองด้วย wget

wget https:/server.edu:443/somepage --ca-certificate=mycertfile.pem

5
ฉันลองสิ่งนี้ (ในเว็บไซต์อื่น) - แต่คาดว่าจะมีห่วงโซ่ทั้งหมด: ดูเหมือนว่าสิ่งนี้จะนำกลับมาเป็นครั้งแรกในห่วงโซ่ - นั่นเป็นสิ่งที่คาดหวังหรือไม่?
monojohnny

8
นั่นไม่ทำงานสำหรับฉัน: ไม่สามารถโหลดใบรับรอง 27262: ข้อผิดพลาด: 0906D06C: รูทีน PEM: PEM_read_bio: ไม่มีบรรทัดเริ่มต้น: /SourceCache/OpenSSL098/OpenSSL098-50/src/crypto/pem_lib.c: 648: คาดว่าจะได้รับ: TRED ใบรับรอง
Janusz

4
ฉันเห็นด้วยกับ monojohnny สิ่งนี้ไม่ได้ให้ประโยชน์เต็มที่แก่คุณ
Michael Munsey

4
ล่าช้า แต่ @monojohnny: openssl s_client -showcertsแสดง certs ทั้งหมดใน chain ที่ได้รับ (หากการเชื่อมต่อสำเร็จ) แต่การ piping through openssl x509ใช้เพียงอันแรกและทิ้งส่วนที่เหลือ เพื่อให้ได้ทั้งหมดของพวกเขาแทนการใช้...| sed -n '/^-----BEGIN CERT/,/^-----END CERT/p'หรือ...| awk '/^-----BEGIN CERT/,/^-----END CERT/'คุณยังสามารถใช้ความซับซ้อนเพิ่มขึ้นเล็กน้อยawkเพื่อใส่ใบรับรองแต่ละใบในไฟล์แยกซึ่งทำให้พวกเขาใช้งานง่ายขึ้นด้วยopensslและเครื่องมืออื่น ๆ
dave_thompson_085

3
ใช้ wget ดูเหมือนว่าจะบันทึก a index.html=>HTTP request sent, awaiting response... 200 OK Length: unspecified [text/html] Saving to: ‘index.html.1’
OZZIE

126

ความจริงแล้วฉันไม่เคยลองมาก่อน (ไม่จำเป็น) อย่างไรก็ตามฉันเพิ่งลองใช้ Firefox และดูเหมือนจะทำงานเพื่อการประหยัด:

  1. คลิกที่ไอคอนใบรับรอง SSL ที่ด้านบน / Padlock ที่ด้านล่าง
  2. คลิก View Certificate
  3. คลิกที่Detailsแท็บ
  4. เลือกใบรับรองที่คุณต้องการจากลำดับชั้น [ไม่วนในรูปภาพ]
  5. คลิก Export

ข้อความแสดงแทน


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

1
นั่นคือใบรับรองเซิร์ฟเวอร์ไม่ใช่ใบรับรองไคลเอ็นต์ เหตุผลหลักในการส่งออกคีย์ส่วนตัว & ใบรับรองของลูกค้าคือการสำรองข้อมูลหรือหากคุณต้องการตรวจสอบสิทธิ์โดยใช้เบราว์เซอร์หรือคอมพิวเตอร์เครื่องอื่น
gbroiles

@ gbroiles - อ่านคำถามเขาใช้คำศัพท์ที่ผิด แต่สิ่งนี้สามารถแก้ไขปัญหาของเขาได้
William Hilsum

1
ถูกและฉันตอบคำถามของคุณ - ทำไมบางคนต้องการบันทึกใบรับรองลูกค้า "ใบรับรองไคลเอ็นต์ SSL" เป็นคำของคุณไม่ใช่ของเขา
gbroiles

1
ดูเหมือนว่าจะมีวิธีการใน Chrome ใช่ไหม!
fatuhoku

50

ส่งออกใบรับรองโดยใช้เบราว์เซอร์ Chrome

  1. เชื่อมต่อกับเว็บไซต์โดยใช้ SSL ( https: // any )

2. คลิกที่สัญลักษณ์ล็อคแล้วคลิกที่รายละเอียด

  1. ตั้งแต่ Chrome รุ่น 56 คุณทำสิ่งต่อไปนี้: ไปที่เมนูสามจุด -> เครื่องมือเพิ่มเติม -> เครื่องมือสำหรับนักพัฒนาแล้วคลิกที่แท็บความปลอดภัย สิ่งนี้จะให้ภาพรวมความปลอดภัยพร้อมปุ่มดูใบรับรอง

  2. คลิกที่ดูใบรับรองปุ่ม

    หน้าต่างโมดัลจะเปิดขึ้น มันมีบานหน้าต่างสองบาน ด้านบนสุดจะแสดงลำดับชั้นความน่าเชื่อถือของใบรับรองของเว็บไซต์ (รายการสุดท้ายที่แสดง), ใบรับรองระดับกลางและใบรับรองหลัก (อันดับสูงสุด)

    บานหน้าต่างที่สองที่ใหญ่ขึ้นแสดงรายละเอียดของหนึ่งในใบรับรอง

    อาจมีใบรับรองขั้นกลางเป็นศูนย์หรือมากกว่านั้น

    โปรดทราบว่าใบรับรองหลักมีไอคอนที่มีขอบสีทอง คนอื่น ๆ มีเส้นขอบสีน้ำเงิน

    ดูภาพหน้าจอด้านล่าง

  3. วิธีส่งออกใบรับรอง:

    1. ขั้นแรกให้คลิกที่ไอคอนใบรับรองในลำดับชั้นความเชื่อถือ
    2. ใบรับรองจะปรากฏในส่วนหลักของคำกริยา
    3. คลิกที่ไอคอนขนาดใหญ่ของใบรับรองในส่วนหลักของคำกริยา ลากไอคอนไปยังเดสก์ท็อปของคุณ Chrome จะคัดลอกใบรับรองไปยังเดสก์ท็อปของคุณ

ป้อนคำอธิบายรูปภาพที่นี่


1
ฉันต้องลากไอคอนไปยังโปรแกรมแก้ไขข้อความเดสก์ท็อปไม่ทำงานสำหรับฉัน
Cory Klein

2
สำหรับ Chrome บน Windows หลังจากคุณคลิก 'ดูใบรับรอง' modal นั้นแตกต่างจาก Mac คลิกแท็บรายละเอียดจากนั้นคัดลอกไปยังไฟล์ ... จากนั้นเลือกรูปแบบและชื่อไฟล์ซึ่งตรงไปตรงมา
PolyTekPatrick

1
เมื่อฉันใช้ Chrome v63 บน Mac OS ไฟล์ข้อความที่ฉันได้รับจากการลากใบรับรองนั้นสามารถอ่านได้โดยมนุษย์ แต่ไม่ใช่ในรูปแบบที่มีโครงสร้างใด ๆ ที่ฉันสามารถหาวิธีแปลงเป็นรูปแบบที่เครื่องอ่านได้เช่น X.509 .crt
Jim DeLaHunt

ไม่แตกต่างหากเปิดจากแถบที่อยู่หรือจากแท็บ dev นี้และยังคงไม่สามารถดาวน์โหลด crt ...
user25

1
ไม่ทำงานอีกต่อไปบน Chrome 72.0.3626.121
A. D'Alfonso

20

นี่คือคำตอบของ gbroilesแต่ฉันต้องการชี้ให้เห็นว่าโครงการ cURL มีหน้าเว็บที่มีรายละเอียดเพิ่มเติมเกี่ยวกับการใช้opensslเพื่อบันทึกใบรับรอง SSL ของเซิร์ฟเวอร์ระยะไกล:

  • openssl s_client -connect {HOSTNAME}: {PORT} | logfile ที
  • พิมพ์QUITและกดปุ่ม Enter / Return
  • ใบรับรองจะแสดงอยู่ระหว่างเครื่องหมาย "BEGIN CERTIFICATE" และ "END CERTIFICATE"
  • หากคุณต้องการดูข้อมูลในใบรับรองคุณสามารถใช้:

    openssl x509 -inform PEM - ใน certfile - ข้อความ - ออกใบรับรอง

    ที่เป็นใบรับรองที่สกัดจากcertfile ดูในlogfilecertdata


สิ่งนี้ใช้ได้สำหรับฉัน เพื่อให้ชัดเจนยิ่งขึ้นฉันแก้ไข logfile และตัดทุกอย่างที่อยู่นอก BEGIN CERTIFICATE และ END CERTIFICATE และบันทึกผลลัพธ์เป็น certfile.pem (ไม่แน่ใจว่าจำเป็นต้องมีนามสกุลหรือไม่)
Michael Welch

16

อัตโนมัติ

- ชื่อผู้ใช้จำเป็นสำหรับฉันในการรับใบรับรองที่ถูกต้องจากโฮสต์เสมือนบนเซิร์ฟเวอร์ของเรา

openssl s_client -showcerts -connect host.name.com:443 -servername host.name.com </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > host.name.com.pem

คุณสามารถแปลงเป็นใบรับรองสำหรับเดสก์ท็อป

openssl x509 -inform PEM -in host.name.com.pem -outform DER -out host.name.com.cer

ส่วนสุดท้ายคือการเพิ่มลงใน certs ของคุณไม่แน่ใจใน windows
สำหรับ mac keychain ที่ฉันใช้ควรจะคล้ายกัน ...

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain host.name.com.cer



โปรดทราบว่าบางแอปพลิเคชันมีปัญหากับระบบและ SystemRoot keychains (Golang ฉันกำลังมองคุณ) ดังนั้นหลังจากติดตั้งและตั้งค่าความน่าเชื่อถือสำหรับระดับเหล่านั้นคุณอาจต้องการคัดลอกไปยังผู้ใช้ของคุณเองlogin.keychainผ่านKeychain Accessแอป สามารถเรียกดูใบรับรองในระบบ / SystemRoot และคลิกและลากไปยังloginพวงกุญแจของคุณ
dragon788

1
@ dragon788 - ความตั้งใจของฉันคือการทำให้มันเป็นแบบอัตโนมัติด้วย command line และมันก็ใช้ได้กับฉัน กรุณาแชร์ที่นี่หากคุณพบทางออกสำหรับ login.keychain ผ่าน CLI เช่นกัน! ขอบคุณ!
Artistan

ตัดสินจากสิ่งที่ฉันได้อ่านบนเว็บฉันเชื่อว่าเพียงแค่ละเว้น-dจากคำสั่งจะใช้กับพวงกุญแจผู้ใช้แทนระบบพวงกุญแจ
dragon788

หากคุณกำลังเพิ่มใบรับรองระดับกลางคุณจะต้องใช้trustAsRootแทนtrustRootเพื่อที่จะได้รับการเพิ่มอย่างถูกต้อง
dragon788

2

สิ่งนี้จะให้ผลลัพธ์ที่มีใบรับรองเท่านั้น

echo QUIT | \
openssl s_client -showcerts -connect hostname:port | \
awk '/-----BEGIN CERTIFICATE-----/ {p=1}; p; /-----END CERTIFICATE-----/ {p=0}' "

0

พบวิธีที่ง่ายกว่ามากถ้าใช้ Windows พยายาม Microsoft Edge (pre-chromium) และคลิกที่ล็อคในแถบที่อยู่ -> ดูกล่องโต้ตอบใบรับรองจะปรากฏขึ้นพร้อมกับปุ่ม "ส่งออกเป็นไฟล์" ซึ่งบันทึกเป็นไฟล์. crt

ไม่มากที่ฉันจะใช้ Edge สำหรับ แต่นี่เป็นเค้กชิ้นหนึ่ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.