OpenSSL: Ekran DH Parametreleri


15

Farklı bir cehennem anahtar değişimine dayanan SSL Şifrelerini kullanırken, kullanılan özel anahtarın boyutu, bu anahtar değişiminin güvenliği için çok önemlidir.

Bir sunucuya "openssl s_client" aracını kullanarak bağlandığımda, kullanılan DH parametrelerini nasıl sorgulayabilirim?

Yanıtlar:


17

Kullanımı kolay bir komut satırı anahtarı bilmiyorum, ancak openssl s_clientkomut satırında, -msgel sıkışma mesajının onaltılık bir dökümünü almak için seçenek ekleyebilirsiniz . Sonra ServerKeyExchangemesajı arayın ; şöyle görünmelidir:

<<< 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
    (...)

ve şu şekilde okur:

  • 0c 00 03 0b: 0x00030B bayt uzunluğunda "ServerKeyExchange" ("0c") türünde ileti.
  • İlk eleman, iki bayt uzunluk başlıklı büyük bir tamsayı olarak DH modülüdür. Burada uzunluk, 01 000x0100 bayt üzerinde kodlanmış bir tam sayı olarak kodlanır. Bu 256 bayttır, bu nedenle modülün uzunluğu 2041 ile 2048 bit arasındadır.
  • Modül baytları, imzasız big-endian sırasıyla izler. Bu modülün en üst baytı bu durumda ff ff ff ff.... Bu durumda modülün uzunluğu tam olarak 2048 bittir.

Bir ECDHE şifreleme paketi (eliptik eğri) kullanıyorsanız, ServerKeyExchangeformat elbette farklıdır.

Mesajın tanımı için standarda bakın ServerKeyExchange. DHE şifre takımları için, p , jeneratör g ve sunucu DH ortak anahtarı y modülünü içerir, bu sırayla, her biri yukarıda açıklanan formatta büyük bir tamsayı olarak ifade edilir (bayt cinsinden uzunluğu içeren 16 bitlik başlık, ardından tamsayı imzasız big-endian kodlamasındaki değer).

Son OpenSSL sürümleri, sunucunun anahtar çiftinin ( iletiyi imzalamak için kullanılır) gücüyle eşleşen (güvenlik açısından) bir DH modülü boyutu seçme eğilimindedir ServerKeyExchange. Yukarıdaki örnekte, sunucunun 2048 bitlik RSA anahtarı vardır, bu nedenle OpenSSL, 2048 bitlik DH modülünü kullanmayı seçmiştir (bu durumda, RFC 3526, bölüm 3'te açıklanan iyi bilinen modül ).

Diğer bazı sunucular, daha büyük DH gruplarını desteklemeyen bazı mevcut istemcilerle uyumluluk sağlamak için 1024 bit DH gruplarına bağlı kalmaktadır (en büyük suçlu Java'nın 2012'de Java 8 build 56'da düzeltilen SSL uygulamasıdır ). DHE şifreleme paketleri için TLS protokolünde bilinen bir kusur, istemcinin hangi modül boyutunu destekleyebileceğini belirleyememesidir (bu, ECDHE için sabittir, çünkü istemci kabul ettiği eğrilerin tam listesini belirleyebilir) .


1
OpenSSL DHE'yi otomatik olarak seçmez, ancak bir uygulama geri araması yapılabilir. OpenSSL 1.0.2 (Ocak 2015) isteğe bağlı olarak ECDHE'yi otomatik olarak seçebilir ve ayrıca s_client1.0.2'de "el sıkışma x okuyor ve y yazmış" ifadesinden hemen önce "Geçici sunucu anahtarı" DH & boyutu veya ECDH ve eğri görüntülenir, böylece artık ihtiyacınız kalmaz kodunu çözmek için. Son zamanlarda DHE'yi otomatik olarak seçen Apache mod_ssl : httpd.apache.org/docs/trunk/mod/mod_ssl.html#sslcertificatefile (Java istemcileriyle ilgili sorunu not eder).
dave_thompson_085

Ben openssl 1.0.1e kullanmak ve herhangi alamadım ServerKeyExchangeile 0c 00 03 0b. çıktı almak için kesin komutu verebilir misiniz? Ben El 0c
Sıkışmalar

Sunucu tarafından seçilen şifre takımı "DHE" veya "ECHDE" şifre takımı değilse, ServerKeyExchange mesajı olmayacaktır.
Thomas Pornin

<<< TLS 1.2 El Sıkışma [uzunluk 01cd], ServerKeyExchange 0c 00 01 c9 03 00 17 41 04 08 5f 82 88 1e e5 b6 ardından beşinci sekizliden başlayarak 0x1c9 uzunluğuna karşılık gelen 443 oktet alıyorum. Ancak "0300", 768 oktet anlamına gelirken DH parametremin "sadece" 2048 bit olduğundan eminim.
Law29

1
@ Law29 Bu daha çok bir ECDHE ServerKeyExchange'e benziyor. Eliptik bir eğri kullanılıyorsa, "03" bu "adlandırılmış bir eğridir, sonraki iki bayt eğri tanımlayıcısını kodlar" anlamına gelir. Daha sonra "00 17", NIST P-256 (ECDHE için en çok kullanılan eğri) olan eğri tanımlayıcıdır. O zaman "41", ortak nokta uzunluğudur; sıkıştırılmamış formatta bir P-256 noktası için tam olarak doğru değerdir; böyle bir nokta 0x04 değerine sahip bir baytla başlar ve tam olarak sahip olduğunuz şey budur. Özetlemek gerekirse: TLS 1.2 anlaşmanız DHE değil, ECDHE kullanıyor.
Thomas Pornin

9

PEM biçiminde sertifikanız varsa, bu komutu deneyebilirsiniz, eğer Açar komutundan size uygun bir çıktı vermelidir.

openssl dhparam -inform PEM -in ./imapd.pem -check -text

(Örnek çıktı)
    PKCS # 3 DH Parametreleri: (512 bit)
        önemli:
            xx: xx: xx: xx
            xx: xx: xx: xx
            xx: xx: xx: xx
        jeneratör: 2 (0x2)
DH parametreleri iyi görünüyor.
----- DH PARAMETRELERİNE BAŞLAYIN -----
XXXX
XXXX
----- DH PARAMETRELERİ SONLANDIR -----

Umarım aradığınız şey budur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.