Score:2

เหตุใด RSA DANE TLSA ของฉันจึงใช้งานได้ แต่ ECDSA DANE TLSA ของฉันล้มเหลว

ธง id

ฉันซื้อใบรับรอง 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

anx avatar
fr flag
anx
คุณอาจพบว่า [Hardenize](https://www.hardenize.com/) และ [crt.sh](https://crt.sh/) มีประโยชน์มากกว่าสำหรับเอาต์พุตตามใบรับรอง (-chain)คุณค่อนข้างแน่ใจหรือไม่ว่าเซิร์ฟเวอร์ของคุณกำลังส่งไปตามสื่อกลาง - ควรจะเป็นเช่นนั้น เพราะการลงนามโดย *Sectigo* มิฉะนั้นจะมีประโยชน์อะไร
synacksoldier avatar
id flag
ฉันไม่แน่ใจเลย ฉันสันนิษฐานว่าห่วงโซ่แห่งความไว้วางใจเป็นเช่นนั้นใบรับรองของฉันในฐานะใบจะใกล้เคียงกับบันทึกที่รู้จัก / เผยแพร่เพื่อให้มีประโยชน์ "นอกกรอบ" ฉันได้พยายามรวมข้อมูลช่องว่างของคีย์หลักเพื่อแก้ไขปัญหาโดยไม่ทราบว่าคำว่า "ระดับกลาง" หรือเกี่ยวข้องกับสถานการณ์ของฉันอย่างไร ฉันจะพยายามค้นคว้าเพิ่มเติมเกี่ยวกับวิธีการให้ข้อมูลดังกล่าว
anx avatar
fr flag
anx
CA ให้สองสิ่งแก่คุณ: ใบรับรองเอง ("leaf", .crt) และอื่นๆ ที่จะส่งไปพร้อมกับใบรับรอง ("ตัวกลาง", .ca-bundle) ที่พวกเขาเชื่อว่าจะเชื่อมโยงเชนกับรากที่รู้จักและเชื่อถือได้ หาก CA ให้แต่ละรายการแยกกัน คุณต้องสร้างไฟล์สำหรับแต่ละอัลกอริทึมที่มีทั้งสองไฟล์ (1: ecc cert + the ecc intermediates 2: rsa cert + the rsa intermediates) ฉัน *สงสัย* คุณให้ใบรับรองแก่ Postfix เท่านั้น จากนั้นการตั้งค่า DANE ของคุณจะทำงานต่อไป แต่ *นอกจากนี้* ใบรับรองของคุณจะตรวจสอบได้ง่ายแม้กับไคลเอนต์ที่พยายามดูว่าใบรับรองเชื่อมโยงกับ CA รูทที่เชื่อถือได้หรือไม่
Score:1
ธง fr
anx

ใช่ เครื่องมือที่คุณกล่าวถึงให้ผลลัพธ์ที่ทำให้คุณเข้าใจผิด

การทดสอบที่ดีจำเป็นต้องตรวจสอบอัลกอริทึมของที่อยู่ IP ข้ามผลิตภัณฑ์และจากนั้นสำหรับแต่ละรายการ: ตรวจสอบว่าใบรับรองที่นำเสนอเชื่อมโยงกับ CA ที่เชื่อถือได้หรือไม่ และ ไม่ว่าจะเชื่อมโยงกับหรือตรงกับใบรับรองที่เผยแพร่ผ่าน TLSAนั่นคือ 8 ขั้นตอนการยืนยันจากความพยายามในการเจรจาที่ไม่ซ้ำกัน 4 ครั้ง ก่อนที่จะพิจารณาเวอร์ชันโปรโตคอลและ SNI ที่เก่ากว่าด้วยซ้ำ

บางการทดสอบจะลองใช้ IP แรกเท่านั้น บางการทดสอบจะลองเฉพาะชุดเข้ารหัสที่เจรจาไว้ชุดแรกเท่านั้น การทดสอบส่วนใหญ่ล้มเหลวในการรายงานในภาษาที่ชัดเจนว่าการจับคู่ DANE หรือ PKI ล้มเหลวหรือไม่

เดอะ s_client คำสั่งที่คุณพยายามใช้ได้ดี .. แต่ คุณต้องการวิ่ง สี่ไม่ใช่สอง คำสั่ง (สองเท่าหากคุณใช้ IPv4 และ IPv6) เพราะฉัน สงสัย ในขณะที่บันทึก TLSA ของคุณไม่เป็นไร แต่คุณยังไม่ได้ส่งตัวกลาง (ที่ถูกต้อง) ไปด้วย

synacksoldier avatar
id flag
สำเนาที่ดีเกี่ยวกับความจำเป็นในการเรียกใช้ opensl s_client สองครั้งสำหรับแต่ละเวอร์ชัน ip (v4,v6) ฉันได้อัปเดตข้อความเพื่อรวมตัวอย่างสำหรับแต่ละเวอร์ชันแต่ฉันต้องรวมอะไรไว้ก่อนหน้านั้น? ฉันพลาดอะไรไปก่อนที่จะขยายสำหรับเวอร์ชัน ip

โพสต์คำตอบ

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