Comment convertir des chiffres SSL au format Curl?

12

Les documents officiels de SSL répertorient les chiffres dans un format différent de celui de curl. Par exemple, si je veux que curl utilise le chiffre TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, je dois le passer curl --ciphers ecdhe_rsa_3des_sha. Je sais ce que sont certains mappages, mais pas tous - par exemple, que dois-je passer pour boucler pour qu'il utilise le chiffrement TLS_DHE_RSA_WITH_AES_128_GCM_SHA256?

Existe-t-il un endroit où je peux trouver un document montrant comment les noms de chiffrement dans les documents SSL correspondent aux noms de chiffrement que curl accepte?

Edit: j'ai finalement découvert que ma boucle est soutenue par NSS, pas OpenSSL, et le problème est précisément parce qu'il n'y a pas de bonne documentation sur l'utilisation de la boucle soutenue par NSS, alors qu'elle nécessite un argument différent de celui d'OpenSSL pour utiliser le même chiffre. Ma question est donc spécifique au NSS.

Benubird
la source

Réponses:

17

Il n'y a aucune documentation couvrant toutes les conversions entre le nom du chiffre et le nom que curl attend comme argument.

Heureusement, curl est open source et le mappage est disponible dans le code source .

Pour le bénéfice des futurs chercheurs, je le reproduis plus soigneusement ici:

Suites de chiffrement 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

Suites de chiffrement 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: suites de chiffrement exportables de 56 bits.

<argument>                 <name>
rsa_des_56_sha             TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA
rsa_rc4_56_sha             TLS_RSA_EXPORT1024_WITH_RC4_56_SHA

Chiffres 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

Chiffres 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

nouvelles suites de chiffrement HMAC-SHA256 spécifiées dans 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

Suites de chiffrement AES GCM dans RFC 5288 et 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

Donc, si vous souhaitez utiliser le chiffrement TLS_DHE_RSA_WITH_AES_128_CBC_SHA, la commande serait:

curl --ciphers dhe_rsa_aes_128_cbc_sha <url>

Afin de spécifier plusieurs chiffres, séparez la liste par des virgules. Donc, si vous souhaitez également utiliser le chiffrement TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256, la commande serait:

curl --ciphers dhe_rsa_aes_128_cbc_sha,ecdh_rsa_aes_128_gcm_sha_256 <url>

Pour afficher une liste des chiffres que curl utilise, vous aurez besoin d'un service externe - comme ceci:

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

Bien que NB, ce service n'accepte pas tous les chiffres, ce qui signifie que si vous limitez la connexion à un seul chiffre qui n'est pas utilisé, vous obtiendrez une erreur "Impossible de communiquer en toute sécurité avec l'homologue: pas d'algorithme de chiffrement commun" au lieu d'une réponse.

Benubird
la source
Réponse fantastique, merci! Je viens de suggérer une petite modification pour montrer comment spécifier plusieurs chiffres
Dallin
2

Il n'y en a pas curl format. Le format des chiffres utilisés par curl dépend du backend qui peut être au moins NSS, GnuTLS, SecureTransport, SChannel, OpenSSL.

Mais il semble que vous demandiez la syntaxe OpenSSL. Dans ce cas, voir https://www.openssl.org/docs/apps/ciphers.html#CIPHER-SUITE-NAMES pour une traduction entre les noms de chiffrement.

Steffen Ullrich
la source
Non, je recherche les NSS, mais les documents officiels pour NSS n'ont pas de liste complète.
Benubird
0

Si vous obtenez l'erreur "Échec de la configuration de la liste de chiffrement".

Consultez le document officiel ici

Assurez-vous de choisir le nom correct pour votre bibliothèque de sécurité principale. Vous pouvez vérifier la bibliothèque dépendante de curl en

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
la source