Jak przekonwertować szyfry ssl na format curl?

12

W oficjalnych docs ssl listy szyfrów w innym formacie niż curl trwa. Na przykład, jeśli chcę, aby curl używał szyfru TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, muszę go przekazać curl --ciphers ecdhe_rsa_3des_sha. Wiem, jakie są niektóre mapowania, ale nie wszystkie - na przykład, co muszę przekazać, aby się zawinąć, aby użyć szyfru TLS_DHE_RSA_WITH_AES_128_GCM_SHA256?

Czy jest gdziekolwiek mogę znaleźć dokument pokazujący, w jaki sposób nazwy szyfrów w dokumentach ssl mapują się na nazwy szyfrów akceptowane przez curl?

Edycja: W końcu odkryłem, że moje zwijanie jest wspierane przez NSS, a nie OpenSSL, a problem polega konkretnie na tym, że nie ma dobrej dokumentacji na temat używania zwijania wspieranego przez NSS, podczas gdy wymaga innego argumentu niż OpenSSL, aby użyć tego samego szyfru. Moje pytanie dotyczy więc NSS.

Benubird
źródło

Odpowiedzi:

17

Nie ma dokumentacji obejmującej wszystkie konwersje między nazwą szyfru a nazwą, której curl oczekuje jako argumentu.

Na szczęście curl jest open source, a mapowanie jest dostępne w kodzie źródłowym .

Z myślą o przyszłych poszukiwaczach odtwarzam go bardziej schludnie tutaj:

Zestawy szyfrów SSL2

<argument>                 <name>
rc4                        SSL_EN_RC4_128_WITH_MD5
rc4-md5                    SSL_EN_RC4_128_WITH_MD5
rc4export                  SSL_EN_RC4_128_EXPORT40_WITH_MD5
rc2                        SSL_EN_RC2_128_CBC_WITH_MD5
rc2export                  SSL_EN_RC2_128_CBC_EXPORT40_WITH_MD5
des                        SSL_EN_DES_64_CBC_WITH_MD5
desede3                    SSL_EN_DES_192_EDE3_CBC_WITH_MD5

Zestawy szyfrów SSL3 / TLS

<argument>                 <name>
rsa_rc4_128_md5            SSL_RSA_WITH_RC4_128_MD5
rsa_rc4_128_sha            SSL_RSA_WITH_RC4_128_SHA
rsa_3des_sha               SSL_RSA_WITH_3DES_EDE_CBC_SHA
rsa_des_sha                SSL_RSA_WITH_DES_CBC_SHA
rsa_rc4_40_md5             SSL_RSA_EXPORT_WITH_RC4_40_MD5
rsa_rc2_40_md5             SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5
rsa_null_md5               SSL_RSA_WITH_NULL_MD5
rsa_null_sha               SSL_RSA_WITH_NULL_SHA
fips_3des_sha              SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA
fips_des_sha               SSL_RSA_FIPS_WITH_DES_CBC_SHA
fortezza                   SSL_FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA
fortezza_rc4_128_sha       SSL_FORTEZZA_DMS_WITH_RC4_128_SHA
fortezza_null              SSL_FORTEZZA_DMS_WITH_NULL_SHA

TLS 1.0: 56-bitowe zestawy szyfrów do eksportu.

<argument>                 <name>
rsa_des_56_sha             TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA
rsa_rc4_56_sha             TLS_RSA_EXPORT1024_WITH_RC4_56_SHA

Szyfry AES.

<argument>                 <name>
dhe_dss_aes_128_cbc_sha    TLS_DHE_DSS_WITH_AES_128_CBC_SHA
dhe_dss_aes_256_cbc_sha    TLS_DHE_DSS_WITH_AES_256_CBC_SHA
dhe_rsa_aes_128_cbc_sha    TLS_DHE_RSA_WITH_AES_128_CBC_SHA
dhe_rsa_aes_256_cbc_sha    TLS_DHE_RSA_WITH_AES_256_CBC_SHA
rsa_aes_128_sha            TLS_RSA_WITH_AES_128_CBC_SHA
rsa_aes_256_sha            TLS_RSA_WITH_AES_256_CBC_SHA

Szyfry ECC.

<argument>                 <name>
ecdh_ecdsa_null_sha        TLS_ECDH_ECDSA_WITH_NULL_SHA
ecdh_ecdsa_rc4_128_sha     TLS_ECDH_ECDSA_WITH_RC4_128_SHA
ecdh_ecdsa_3des_sha        TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA
ecdh_ecdsa_aes_128_sha     TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA
ecdh_ecdsa_aes_256_sha     TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA
ecdhe_ecdsa_null_sha       TLS_ECDHE_ECDSA_WITH_NULL_SHA
ecdhe_ecdsa_rc4_128_sha    TLS_ECDHE_ECDSA_WITH_RC4_128_SHA
ecdhe_ecdsa_3des_sha       TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA
ecdhe_ecdsa_aes_128_sha    TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
ecdhe_ecdsa_aes_256_sha    TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
ecdh_rsa_null_sha          TLS_ECDH_RSA_WITH_NULL_SHA
ecdh_rsa_128_sha           TLS_ECDH_RSA_WITH_RC4_128_SHA
ecdh_rsa_3des_sha          TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA
ecdh_rsa_aes_128_sha       TLS_ECDH_RSA_WITH_AES_128_CBC_SHA
ecdh_rsa_aes_256_sha       TLS_ECDH_RSA_WITH_AES_256_CBC_SHA
echde_rsa_null             TLS_ECDHE_RSA_WITH_NULL_SHA
ecdhe_rsa_rc4_128_sha      TLS_ECDHE_RSA_WITH_RC4_128_SHA
ecdhe_rsa_3des_sha         TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
ecdhe_rsa_aes_128_sha      TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
ecdhe_rsa_aes_256_sha      TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
ecdh_anon_null_sha         TLS_ECDH_anon_WITH_NULL_SHA
ecdh_anon_rc4_128sha       TLS_ECDH_anon_WITH_RC4_128_SHA
ecdh_anon_3des_sha         TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA
ecdh_anon_aes_128_sha      TLS_ECDH_anon_WITH_AES_128_CBC_SHA
ecdh_anon_aes_256_sha      TLS_ECDH_anon_WITH_AES_256_CBC_SHA

nowe zestawy szyfrów HMAC-SHA256 określone w RFC

<argument>                 <name>
rsa_null_sha_256                TLS_RSA_WITH_NULL_SHA256
rsa_aes_128_cbc_sha_256         TLS_RSA_WITH_AES_128_CBC_SHA256
rsa_aes_256_cbc_sha_256         TLS_RSA_WITH_AES_256_CBC_SHA256
dhe_rsa_aes_128_cbc_sha_256     TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
dhe_rsa_aes_256_cbc_sha_256     TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
ecdhe_ecdsa_aes_128_cbc_sha_256 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
ecdhe_rsa_aes_128_cbc_sha_256   TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

Zestawy szyfrów AES GCM w RFC 5288 i RFC 5289

<argument>                 <name>
rsa_aes_128_gcm_sha_256         TLS_RSA_WITH_AES_128_GCM_SHA256
dhe_rsa_aes_128_gcm_sha_256     TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
dhe_dss_aes_128_gcm_sha_256     TLS_DHE_DSS_WITH_AES_128_GCM_SHA256
ecdhe_ecdsa_aes_128_gcm_sha_256 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
ecdh_ecdsa_aes_128_gcm_sha_256  TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256
ecdhe_rsa_aes_128_gcm_sha_256   TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
ecdh_rsa_aes_128_gcm_sha_256    TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256

Więc jeśli chcesz użyć szyfru TLS_DHE_RSA_WITH_AES_128_CBC_SHA, polecenie byłoby:

curl --ciphers dhe_rsa_aes_128_cbc_sha <url>

Aby podać wiele szyfrów, oddziel listę przecinkami. Więc jeśli chcesz również użyć szyfru TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256, polecenie brzmiałoby:

curl --ciphers dhe_rsa_aes_128_cbc_sha,ecdh_rsa_aes_128_gcm_sha_256 <url>

Aby wyświetlić listę szyfrów używanych przez curl, potrzebujesz usługi zewnętrznej - takiej jak ta:

curl --ciphers ecdhe_rsa_aes_256_sha https://www.howsmyssl.com/a/check

Mimo że usługa ta nie akceptuje wszystkich szyfrów, co oznacza, że ​​jeśli ograniczysz połączenie tylko do jednego nieużywanego szyfru, zamiast odpowiedzi pojawi się błąd „Nie można bezpiecznie komunikować się z węzłem równorzędnym: brak wspólnego algorytmu szyfrowania”.

Benubird
źródło
Fantastyczna odpowiedź, dziękuję! Właśnie zasugerowałem małą edycję, aby zademonstrować, jak określić wiele szyfrów
Dallin
2

Nie ma curl format. Format szyfrów używanych przez curl zależy od backendu, którym może być co najmniej NSS, GnuTLS, SecureTransport, SChannel, OpenSSL.

Ale wygląda na to, że pytasz o składnię OpenSSL. W takim przypadku zobacz https://www.openssl.org/docs/apps/ciphers.html#CIPHER-SUITE-NAMES, aby znaleźć tłumaczenie między nazwami szyfrów.

Steffen Ullrich
źródło
Nie, szukam NSS, ale oficjalne dokumenty NSS nie mają pełnej listy.
Benubird,
0

Jeśli pojawia się błąd „nieudana konfiguracja listy szyfrów”.

Sprawdź oficjalny dokument tutaj

Upewnij się, że wybrałeś poprawną nazwę dla swojej biblioteki bezpieczeństwa zaplecza. Możesz sprawdzić bibliotekę zależną od zwijania przez

curl --version
curl 7.51.0 (x86_64-apple-darwin16.0.0) libcurl/7.51.0 OpenSSL/1.0.2n zlib/1.2.8 nghttp2/1.16.0
Ji Fang
źródło