ฉันไม่รู้จักสวิตช์บรรทัดคำสั่งที่ใช้งานง่าย แต่ในopenssl s_client
บรรทัดคำสั่งคุณสามารถเพิ่ม-msg
ตัวเลือกเพื่อรับดัมพ์เลขฐานสิบหกของข้อความการจับมือกัน จากนั้นมองหาServerKeyExchange
ข้อความ มันควรมีลักษณะเช่นนี้:
<<< TLS 1.2 Handshake [length 030f], ServerKeyExchange
0c 00 03 0b 01 00 ff ff ff ff ff ff ff ff c9 0f
da a2 21 68 c2 34 c4 c6 62 8b 80 dc 1c d1 29 02
4e 08 8a 67 cc 74 02 0b be a6 3b 13 9b 22 51 4a
(...)
และมันอ่านอย่างนั้น:
0c 00 03 0b
: ข้อความประเภท "ServerKeyExchange" (นั่นคือ "0c") ของความยาว 0x00030B ไบต์
- องค์ประกอบแรกคือ DH โมดูลัสเป็นจำนวนเต็มขนาดใหญ่ที่มีส่วนหัวความยาวสองไบต์ ที่นี่ความยาวถูกเข้ารหัสเป็น
01 00
หมายถึงจำนวนเต็มที่เข้ารหัสมากกว่า 0x0100 ไบต์ นั่นคือ 256 ไบต์ดังนั้นโมดูลัสจึงมีความยาวระหว่าง 2041 และ 2048 บิต
- ไบต์โมดูลัสจะตามมาในลำดับ big-endian ที่ไม่ได้ลงชื่อ ไบต์สูงสุดของโมดูลัสนั้นในกรณี
ff ff ff ff...
นี้ โมดูลัสนั้นมีความยาวถึง 2048 บิต
หากคุณใช้ชุดรหัส ECDHE (เส้นโค้งวงรี) ServerKeyExchange
รูปแบบนั้นแตกต่างกันแน่นอน
ดูมาตรฐานสำหรับคำจำกัดความของServerKeyExchange
ข้อความ สำหรับชุดรหัส DHE ประกอบด้วยโมดูลัสp , ตัวสร้างgและรหัสสาธารณะ DH ของเซิร์ฟเวอร์yตามลำดับแต่ละรายการจะแสดงเป็นจำนวนเต็มขนาดใหญ่ในรูปแบบที่อธิบายข้างต้น (ส่วนหัว 16 บิตที่ประกอบด้วยความยาวเป็นไบต์และจำนวนเต็ม ค่าในการเข้ารหัส big-endian ที่ไม่ได้ลงชื่อ)
OpenSSL เวอร์ชันล่าสุดมีแนวโน้มที่จะเลือกขนาด DH โมดูลัสที่แมตช์ (จากจุดรักษาความปลอดภัยของมุมมอง) ความแข็งแรงของคู่คีย์ของเซิร์ฟเวอร์ (ใช้ในการเข้าสู่ระบบServerKeyExchange
ข้อความ) ในตัวอย่างข้างต้นเซิร์ฟเวอร์มีคีย์ RSA 2048 บิตดังนั้น OpenSSL จึงเลือกใช้ DH modulus 2048 บิต (ในกรณีนี้ modulus ที่รู้จักกันดีที่อธิบายไว้ในRFC 3526, ส่วนที่ 3 )
บางเซิร์ฟเวอร์อื่น ๆ ติดกลุ่ม DH 1024 บิตในการสั่งซื้อเพื่อให้เข้ากันกับลูกค้าที่มีอยู่บางส่วนที่ไม่สนับสนุนกลุ่มเอชที่มีขนาดใหญ่ (ที่ใหญ่ที่สุดผู้กระทำความผิดเป็นการใช้งาน SSL ใน Java คงที่ในชวา 8 สร้าง 56ในปี 2012) ข้อบกพร่องที่ทราบในโปรโตคอล TLS สำหรับชุดเข้ารหัส DHE คือไคลเอ็นต์ไม่มีวิธีระบุขนาดของมอดุลัสที่อาจรองรับ (นี่คือการแก้ไขสำหรับ ECDHE เนื่องจากไคลเอ็นต์สามารถระบุรายการเส้นโค้งที่แน่นอนที่ยอมรับได้) .
s_client
จะแสดง "คีย์เซิร์ฟเวอร์ชั่วคราว" DH & ขนาดหรือ ECDH & เส้นโค้งเมื่อใช้งานก่อน "จับมืออ่าน x และเขียน y" ดังนั้นคุณไม่จำเป็นต้องใช้อีกต่อไป เพื่อถอดรหัส มันเป็นApache mod_sslล่าสุดที่เลือก DHE โดยอัตโนมัติ: httpd.apache.org/docs/trunk/mod/mod_ssl.html#sslcertificatefile (ซึ่งบันทึกปัญหาเกี่ยวกับไคลเอนต์ Java)