จะตรวจสอบใบรับรอง TLS ของเซิร์ฟเวอร์ SMTP ระยะไกลได้อย่างไร


63

เรามีเซิร์ฟเวอร์ Exchange 2007 ที่ทำงานบน Windows Server 2008 ลูกค้าของเราใช้เซิร์ฟเวอร์อีเมลของผู้ขายรายอื่น นโยบายความปลอดภัยของพวกเขาต้องการให้เราใช้ TLS ที่บังคับใช้ มันใช้งานได้ดีจนกระทั่งเมื่อไม่นานมานี้

ตอนนี้เมื่อ Exchange พยายามที่จะส่งจดหมายไปยังเซิร์ฟเวอร์ของลูกค้ามันจะบันทึกสิ่งต่อไปนี้:

การเชื่อมต่อที่ปลอดภัยไปยังโดเมนที่ปลอดภัยของโดเมน 'ourclient.com' บนตัวเชื่อมต่อ 'จดหมายภายนอกที่เป็นค่าเริ่มต้น' ไม่สามารถสร้างได้เนื่องจากการตรวจสอบใบรับรอง Transport Layer Security (TLS) สำหรับ ourclient.com ล้มเหลวด้วยสถานะ 'UntrustedRoot ติดต่อผู้ดูแลระบบของ ourclient.com เพื่อแก้ไขปัญหาหรือลบโดเมนออกจากรายการโดเมนที่ปลอดภัย

การลบ ourclient.com ออกจาก TLSSendDomainSecureList ทำให้ข้อความถูกส่งสำเร็จโดยใช้ TLS แบบฉวยโอกาส แต่นี่เป็นการแก้ปัญหาชั่วคราวที่ดีที่สุด

ลูกค้าเป็น บริษัท ระหว่างประเทศที่มีขนาดใหญ่และมีความปลอดภัยสูง ฝ่ายไอทีของเรามีการอ้างว่าไม่ทราบว่ามีการเปลี่ยนแปลงใด ๆ ในใบรับรอง TLS ฉันขอให้เขาซ้ำ ๆ เพื่อระบุอำนาจที่สร้างใบรับรองเพื่อให้ฉันสามารถแก้ไขข้อผิดพลาดในการตรวจสอบ แต่จนถึงขณะนี้เขายังไม่สามารถให้คำตอบได้ สำหรับทั้งหมดที่ฉันรู้ลูกค้าของเราสามารถแทนที่ใบรับรอง TLS ที่ถูกต้องด้วยใบรับรองจากหน่วยงานภายในองค์กร

ไม่มีใครรู้วิธีตรวจสอบใบรับรอง TLS ของเซิร์ฟเวอร์ SMTP ระยะไกลด้วยตนเองเพราะใคร ๆ ก็สามารถทำได้สำหรับใบรับรองเซิร์ฟเวอร์ HTTPS ระยะไกลในเว็บเบราว์เซอร์ อาจมีประโยชน์มากในการพิจารณาว่าใครเป็นผู้ออกใบรับรองและเปรียบเทียบข้อมูลนั้นกับรายการใบรับรองหลักที่เชื่อถือได้บนเซิร์ฟเวอร์ Exchange ของเรา

คำตอบ:


100

คุณสามารถใช้ OpenSSL หากคุณต้องตรวจสอบใบรับรองด้วยSTARTTLSให้ทำ

openssl s_client -connect mail.example.com:25 -starttls smtp

หรือสำหรับพอร์ต smtp ที่ปลอดภัย:

openssl s_client -connect mail.example.com:465

สวย. ข้อผิดพลาดในการตรวจสอบที่คล้ายกันใน OpenSSL แต่มีรายละเอียดมากขึ้น ตอนนี้เรารู้แล้วว่าปัญหาไม่ได้ จำกัด อยู่ที่เมลเซิร์ฟเวอร์ของเรา
Skyhawk

1
@Miles: หากคุณลองทำสิ่งนี้บน Windows อย่าลืมว่าopensslไม่รองรับการใช้ที่เก็บใบรับรอง Windows ดังนั้นมันจะล้มเหลวในการตรวจสอบความถูกต้องเสมอ
grawity

3
ฉันจะดูวันหมดอายุของใบรับรองเซิร์ฟเวอร์ได้อย่างไร
nimrodm

9
@nimrodm: ส่งใบรับรองไปที่ "openssl x509 -text"
Dan Andreatta

2
@DanAndreatta @nimrodm หรือไปป์ที่openssl x509 -noout -datesเอาต์พุตที่สั้นกว่า
Skippy le Grand Gourou

9

ฉันรู้ว่านี่เป็นคำถามเก่า แต่ก็ยังเป็นคำถามที่เกี่ยวข้องแม้กระทั่งทุกวันนี้สำหรับผู้ดูแลระบบที่ต้องการยืนยันความถูกต้องของใบรับรอง SSL บนเซิร์ฟเวอร์อีเมลของพวกเขา

คุณสามารถเยี่ยมชมhttps://www.checktls.comและทำการทดสอบได้ฟรี


สิ่งนี้ใช้ได้ผลสำหรับฉันอ่านได้ง่ายกว่าบรรทัดคำสั่ง
marijnz0r

1
ฉันมีปัญหาในการค้นหาการทดสอบบนเว็บไซต์ ตัวชี้ใด ๆ
Zero3

1
มีช่องป้อนข้อมูลในส่วน 'Internet Secure Email is Easy' ด้วยปุ่ม 'CheckTLS' ในสีดำ
Ketan Patel

@KetanPatel Aaaand ... ฉันจะหาส่วน 'Internet Secure Email is Easy' ได้ที่ไหน?
Zero3

น่าเสียดายนี่ดูเหมือนว่าจะตรวจสอบโดเมนสำหรับเซิร์ฟเวอร์ SMTP ที่ระบุไว้ใน DNS และทำการค้นหา แต่ฉันต้องการตรวจสอบเซิร์ฟเวอร์โดยตรง
kerridge0

4

หากคุณไม่มี OpenSSL คุณสามารถใช้ตัวอย่างของ Python นี้:

import smtplib
import ssl

connection = smtplib.SMTP() 
connection.connect('[hostname].')
connection.starttls()
print ssl.DER_cert_to_PEM_cert(connection.sock.getpeercert(binary_form=True))

โดยที่ [hostname] เป็นเซิร์ฟเวอร์

ที่มา: https://support.google.com/a/answer/6180220

สิ่งนี้จะดึงไลบรารี OpenSSL สำหรับคุณซึ่งทำให้การติดตั้งง่ายขึ้นเล็กน้อย


จากเอกสารโมดูล Python ssl : "โมดูลนี้ใช้ไลบรารี OpenSSL" ดังนั้นคำตอบนี้ทำให้เข้าใจผิดเล็กน้อยว่าเกิดอะไรขึ้น
fbmd

@ fbmd ขอบคุณสำหรับความคิดเห็น การแก้ไขนี้ดีขึ้นหรือไม่ (ดูประโยคสุดท้าย)
2559

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