¿Cómo convertir cifrados SSL a formato curl?

12

Los documentos oficiales de SSL enumeran los cifrados en un formato diferente al de curl. Por ejemplo, si quiero que curl use el cifrado TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, tengo que pasarlo curl --ciphers ecdhe_rsa_3des_sha. Sé cuáles son algunas de las asignaciones, pero no todas, por ejemplo, ¿qué tengo que pasar para curl para que use el cifrado TLS_DHE_RSA_WITH_AES_128_GCM_SHA256?

¿Hay algún lugar donde pueda encontrar un documento que muestre cómo los nombres de cifrado en los documentos SSL se asignan a los nombres de cifrado que curl acepta?

Editar: Eventualmente descubrí que mi curl está respaldado por NSS, no por OpenSSL, y el problema es específicamente porque no hay buena documentación sobre el uso de curl respaldado por NSS, mientras que requiere un argumento diferente que OpenSSL para usar el mismo cifrado. Entonces mi pregunta es específica para NSS.

Benubird
fuente

Respuestas:

17

No hay documentación que cubra todas las conversiones entre el nombre del cifrado y el nombre que curl espera como argumento.

Afortunadamente, curl es de código abierto, y la asignación está disponible en el código fuente .

Para beneficio de los futuros buscadores, lo reproduzco de manera más clara aquí:

Conjuntos de cifrado 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

Conjuntos de cifrado 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: Cipher Suites 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

Cifrados 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

Cifrados 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

Nuevos conjuntos de cifrado HMAC-SHA256 especificados en 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

Conjuntos de cifrado AES GCM en RFC 5288 y 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

Entonces, si desea utilizar el cifrado TLS_DHE_RSA_WITH_AES_128_CBC_SHA, el comando sería:

curl --ciphers dhe_rsa_aes_128_cbc_sha <url>

Para especificar múltiples cifrados, separe la lista con comas. Entonces, si desea utilizar también el cifrado TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256, el comando sería:

curl --ciphers dhe_rsa_aes_128_cbc_sha,ecdh_rsa_aes_128_gcm_sha_256 <url>

Para ver una lista de los cifrados que curl está utilizando, necesitará un servicio externo, como este:

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

Aunque NB, ese servicio no acepta todos los cifrados, lo que significa que si está restringiendo la conexión a un solo cifrado que no está en uso, recibirá un error "No se puede comunicar de forma segura con el igual: no hay un algoritmo de cifrado común" en lugar de una respuesta.

Benubird
fuente
Fantástica respuesta, gracias! Acabo de sugerir una pequeña edición para demostrar cómo especificar múltiples cifrados
Dallin
2

No existe curl format. El formato de los cifrados utilizados por curl depende del backend que puede ser al menos NSS, GnuTLS, SecureTransport, SChannel, OpenSSL.

Pero parece que está pidiendo la sintaxis de OpenSSL. En este caso, consulte https://www.openssl.org/docs/apps/ciphers.html#CIPHER-SUITE-NAMES para obtener una traducción entre los nombres de cifrado.

Steffen Ullrich
fuente
No, estoy buscando los NSS, pero los documentos oficiales para NSS no tienen una lista completa.
Benubird
0

Si obtiene el error "error al establecer la lista de cifrado".

Consulta el documento oficial aquí

Asegúrese de elegir el nombre correcto para su biblioteca de seguridad de back-end. Puede verificar la biblioteca dependiente de rizos por

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
fuente