ฉันซื้อใบรับรอง SSL แบบไวด์การ์ดสองโดเมนเดียวจาก Namecheap/Sectigo/Comodo ฉันสร้าง CSR ตามแบบฉบับโดยใช้ openssl
$ openssl req -newkey rsa:4096 -keyout example.com.rsa.key -ออก example.com.rsa.csr
$ openssl genpkey -genparam -algorithm ec -pkeyopt ec_paramgen_curve:P-256 -out example.com.ecdsa.pem
$ openssl req -newkey ec:example.com.ecdsa.pem -keyout example.com.ecdsa.key -out example.com.ecdsa.csr
ฉันส่ง CSR และได้รับใบรับรองแต่ละชุดซึ่งรวมถึง .crt และ .ca-bundle ทั้งหมดตามที่คาดไว้
ฉันสามารถติดตั้งใบรับรองทั้งสองเพื่อใช้โดย Postfix แต่ละรายการต้องการคีย์ส่วนตัวเวอร์ชันที่ไม่ได้เข้ารหัส มีการรักษาความปลอดภัยสิทธิ์
$ openssl rsa - ใน example.com.rsa.key - ออก example.com.rsa.key.unencrypted
$openssl ec -ในexample.com.ecdsa.key -out example.com.ecdsa.key.unencrypted
ฉันได้ตั้งค่า SPF, DKIM, DMARC และ DNSSEC อย่างถูกต้อง โดยแต่ละรายการได้รับการยืนยันโดยเครื่องมือของบุคคลที่สาม และมีการส่งและรับอีเมลที่มีคะแนนผ่านในส่วนหัว
ฉันใช้ opensl อีกครั้งเพื่อสร้างแฮชของใบรับรองสำหรับบันทึก DANE TLSA ของฉัน ฉันสร้างสองชุด หนึ่งชุดสำหรับแต่ละอัลกอริทึม และสำหรับทั้งพอร์ต 25 และ 587 ชุดเหล่านี้ถูกเพิ่มลงในไฟล์โซนของฉัน ตรวจสอบด้วยเนม-เช็คโซน เซ็นชื่อด้วย dnssec-signzone และเผยแพร่ใน DNS
ฉันเริ่มต้นด้วยการใช้เครื่องมือภายนอกสองตัวเพื่อตรวจสอบการกำหนดค่า เครื่องมือแรกที่ เดนเช็ค และครั้งที่สองที่ dane.sys4.de. ทั้งสองรายงานความสำเร็จโดยรวมโดยใช้ใบรับรอง RSA แต่ความล้มเหลวเฉพาะของใบรับรอง ECDSA
อดีตประสบความสำเร็จโดยรายงานบางส่วน:
DANE TLSA 3 1 1 [9679fc29..]: ตกลง ใบรับรอง EE ที่ตรงกัน
DANE TLSA 3 1 1 [ecd29ffd..]: FAIL ไม่ตรงกับใบรับรอง EE
หลังประสบความสำเร็จโดยรายงานบางส่วน:
3, 1, 1 9679fc296960a23c[...]149b990a680cad8b *สีเขียว*
3, 1, 1 ecd29ffd76d61326[...]dadbcfa42eae9158 - ไม่สามารถรับใบรับรองผู้ออกในท้องถิ่น: (20) *สีแดง*
ฉันพยายามแก้ไขปัญหานี้โดยเปลี่ยนการใช้งาน ตัวเลือก และฟิลด์การจับคู่ต่างๆ 3 0 1, 3 1 1 ฯลฯ ฉันพยายามสร้างแฮชในเครื่องด้วย openssl และใช้เครื่องมือออนไลน์เช่น gen_tlsa. เครื่องมือทั้งสองให้ผลลัพธ์การแฮชที่เหมือนกันสำหรับใบรับรองทั้งสอง เป็นอีกครั้งที่ RSA TLSA สำเร็จในขณะที่บันทึก ECDSA ล้มเหลว ในที่สุดฉันก็พบสคริปต์ chaingen ซึ่งสร้างแฮช 3 0 1, 3 1 1, 3 0 2 และ 3 1 2 ทั้งหมดที่ฉันรวมไว้สำหรับแต่ละพอร์ตโดยไม่มีการปรับปรุงสำหรับบันทึก ECDSA
ฉันใช้เวลาหลายชั่วโมงในการลองเปลี่ยนลำดับแต่ละใบรับรอง ระเบียน TLSA พอร์ต ฯลฯ ฉันลองเพิ่มระเบียน TLSA (2 0 1) สำหรับคีย์หลักของระเบียน ECDSA ไปยัง DNS ฉันลองเปลี่ยนใบรับรองที่มีให้เป็น Postfix เพื่อรวม ca-bundle พร้อมกับใบรับรองในไฟล์ .pem
การค้นคว้าที่ฉันพบ โพสต์นี้ที่ exim-users หัวข้อ "วิธีใช้ ec cert กับ DANE และ ec+rsa certs" โดย Viktor Dukhovni ซึ่งไม่ต้องการคำแนะนำในแวดวง Postfix/DANEเขาแนะนำว่าบางทีเครื่องมือออนไลน์อาจฉวยโอกาส และทันทีที่ประสบความสำเร็จกับใบรับรอง RSA ก็ไม่กังวลที่จะทดสอบกับใบรับรอง ECDSA เขาให้การเรียกที่มีคุณค่ามากไปยัง openssl เพื่อแสดงว่าคีย์นั้นถูกต้องในสถานการณ์ของผู้โพสต์ ฉันทำซ้ำความพยายามนั้นด้วยเชลล์สคริปต์สั้นๆ สองตัวโดยใช้โค้ดของ Viktor แทนที่ข้อมูลของฉัน อันหนึ่งเรียกว่า checkrsa และอีกอันเรียกว่า checkecdsa
สคริปต์ทั้งสองเรียกใช้คำสั่งสองคำสั่งโดยมีการตั้งค่าต่อไปนี้สำหรับ checkrsa (สำหรับ IPv4):
$ แมวตรวจสอบ
echo "เลิก" | openssl s_client -starttls smtp -เชื่อมต่อ mail.example.com:25 -4 -ตรวจสอบ 9 \
-dane_tlsa_domain mail.example.com \
-dane_tlsa_rrdata "3 0 1 c487cdb079b49d12ee357d9547c6f67448a2ec2e789c86c65d213a57aaec4ac9" \
-dane_tlsa_rrdata "3 1 1 9679fc296960a23c89fed73d8e6a6d0ab33f0abc99d48c44149b990a680cad8b" \
-sigalgs rsa_pkcs1_sha256:rsa_pkcs1_sha384:rsa_pkcs1_sha512:rsa_pss_rsae_sha256:rsa_pss_rsae_sha384:rsa_pss_rsae_sha512:rsa_pss_pss_sha256:rsa_pss_pss_sha384:rsa_shapss_sha256
และ checkecdsa (สำหรับ IPv6):
$ cat checkecdsa
echo "เลิก" | openssl s_client -starttls smtp -เชื่อมต่อ mail.example.com:25 -6 -ตรวจสอบ 9 \
-dane_tlsa_domain mail.example.com \
-dane_tlsa_rrdata "3 0 1 87a8c75581c9d022062416a37387de1ec30d311e4d7afbeb892be287fb13bfc5" \
-dane_tlsa_rrdata "3 1 1 ecd29ffd76d6132629ddbf7ccd31460e23ac3b4a50d47bccdadbcfa42eae9158" \
-sigalgs ecdsa_secp256r1_sha256:ecdsa_secp384r1_sha384:ecdsa_secp521r1_sha512
ผลลัพธ์:
รูท@เซิร์ฟเวอร์:~/bin# ./checkrsa
ตรวจสอบความลึกเป็น 9
เชื่อมต่อแล้ว(00000003)
ความลึก=0 CN = *.example.com
ตรวจสอบผลตอบแทน:1
---
ห่วงโซ่ใบรับรอง
0 วินาที:CN = *.example.com
i:C = GB, ST = Greater Manchester, L = Salford, O = Sectigo Limited, CN = Sectigo RSA Domain Validation CA เซิร์ฟเวอร์ที่ปลอดภัย
---
ใบรับรองเซิร์ฟเวอร์
-----เริ่มต้นใบรับรอง-----
MIIHNDCCBhygAwIBAgIQAzfJZrX65NjG2FvLmk0I0jANBgkqhkiG9w0BAQsFADCB
...
Xw8UgZDYihDaIxT8SUQUgV9weQg5Lkru
-----จบใบรับรอง-----
หัวเรื่อง=CN = *.example.com
Issuer=C = GB, ST = Greater Manchester, L = Salford, O = Sectigo Limited, CN = Sectigo RSA Domain Validation CA เซิร์ฟเวอร์ที่ปลอดภัย
---
ไม่มีการส่งชื่อ CA ของใบรับรองไคลเอ็นต์
สรุปการลงนามเพียร์: SHA256
ประเภทลายเซ็นเพียร์: RSA-PSS
คีย์อุณหภูมิเซิร์ฟเวอร์: X25519, 253 บิต
---
SSL handshake อ่าน 2904 ไบต์และเขียน 386 ไบต์
การยืนยัน: ตกลง
ชื่อเพียร์ที่ยืนยันแล้ว: *.example.com
DANE TLSA 3 1 1 ...99d48c44149b990a680cad8b จับคู่ใบรับรอง EE ที่ความลึก 0
---
ใหม่ TLSv1.3 การเข้ารหัสคือ TLS_AES_256_GCM_SHA384
รหัสสาธารณะของเซิร์ฟเวอร์คือ 4096 บิต
ไม่สนับสนุนการเจรจาใหม่อย่างปลอดภัย
การบีบอัด: ไม่มี
การขยายตัว: ไม่มี
ไม่มีการเจรจา ALPN
ข้อมูลต้นไม่ได้ถูกส่ง
ตรวจสอบรหัสส่งคืน: 0 (ตกลง)
---
250 ชิ้น
เสร็จแล้ว
รูท@เซิร์ฟเวอร์:~/bin# ./checkecdsa
ตรวจสอบความลึกเป็น 9
เชื่อมต่อแล้ว(00000003)
ความลึก=0 CN = *.example.com
ตรวจสอบผลตอบแทน:1
---
ห่วงโซ่ใบรับรอง
0 วินาที:CN = *.example.com
i:C = GB, ST = มหานครแมนเชสเตอร์, L = Salford, O = Sectigo Limited, CN = Sectigo
การตรวจสอบโดเมน ECC เซิร์ฟเวอร์ที่ปลอดภัย CA
---
ใบรับรองเซิร์ฟเวอร์
-----เริ่มต้นใบรับรอง-----
MIIEqDCCBE6gAwIBAgIRAIIKQBNWh2R9wwvn2/j30PgwCgYIKoZIzj0EAwIwgY8x
...
YemreHq/Cd5HPgIgE6InSF5ko6mWo9GMpR7w1ijpbsnShlS6EiYrpZozD0s=
-----จบใบรับรอง-----
หัวเรื่อง=CN = *.example.com
ผู้ออก = C = GB, ST = มหานครแมนเชสเตอร์, L = Salford, O = Sectigo Limited, CN = Sectigo ECC Domain Validation CA เซิร์ฟเวอร์ที่ปลอดภัย
---
ไม่มีการส่งชื่อ CA ของใบรับรองไคลเอ็นต์
สรุปการลงนามเพียร์: SHA256
ประเภทลายเซ็นเพียร์: ECDSA
คีย์อุณหภูมิเซิร์ฟเวอร์: X25519, 253 บิต
---
SSL handshake อ่าน 1811 ไบต์และเขียน 348 ไบต์
การยืนยัน: ตกลง
ชื่อเพียร์ที่ยืนยันแล้ว: *.example.com
DANE TLSA 3 1 1 ...50d47bccdadbcfa42eae9158 จับคู่ใบรับรอง EE ที่ความลึก 0
---
ใหม่ TLSv1.3 การเข้ารหัสคือ TLS_AES_256_GCM_SHA384
รหัสสาธารณะของเซิร์ฟเวอร์คือ 256 บิต
ไม่สนับสนุนการเจรจาใหม่อย่างปลอดภัย
การบีบอัด: ไม่มี
การขยายตัว: ไม่มี
ไม่มีการเจรจา ALPN
ข้อมูลต้นไม่ได้ถูกส่ง
ตรวจสอบรหัสส่งคืน: 0 (ตกลง)
---
250 ชิ้น
เสร็จแล้ว
ดังนั้นใบรับรองทั้งสองจะชำระเงินในเครื่อง แต่ยังคงล้มเหลวจากภายนอก
เมื่อเห็นว่าข้อความของ Viktor ระบุว่าบางทีเครื่องมือต่างๆ ที่ประสบความสำเร็จกับ RSA ประกันตัวแฮช ECDSA ฉันยังลองเผยแพร่บันทึก ECDSA TLSA ผลลัพธ์แสดงความล้มเหลวโดยสิ้นเชิงโดยมีเพียงแฮช ECDSA เพียงอย่างเดียว
ดังนั้นฉันยอมให้กับสถานการณ์นี้:
ฉันมีใบรับรอง SSL สองชุด ชุดหนึ่งเป็น RSA และอีกชุดเป็น ECDSA
ใบรับรองทั้งสองสำเร็จใน Postfix
ทั้งใบรับรองชำระเงินด้วย opensl
การเผยแพร่ใบรับรองทั้งสองผ่านโดยรวม โดยอ้างอิงจากใบรับรอง RSA โดยสังเกตว่าใบรับรอง ECDSA ล้มเหลว
ใบรับรอง ECDSA สำเร็จภายในเครื่อง แต่ล้มเหลวจากภายนอก
ฉันไม่แน่ใจว่าต้องไปจากที่ใด และกำลังมองหาความช่วยเหลือในการตั้งค่าใบรับรอง ECDSA ควบคู่ไปกับระเบียน RSA สำหรับ DANE