如何将 ssl 密码转换为 curl 格式?

Ben*_*ird 15 configuration ssl openssl curl nss

官方的ssl文档列出密码在不同的格式卷曲发生。例如,如果我想让 curl 使用密码 TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,我必须通过它curl --ciphers ecdhe_rsa_3des_sha。我知道一些映射是什么,但不是全部 - 例如,我必须传递什么才能让 curl 使用密码 TLS_DHE_RSA_WITH_AES_128_GCM_SHA256?

有什么地方可以找到显示 ssl 文档中的密码名称如何映射到 curl 接受的密码名称的文档?

编辑:我最终发现我的 curl 是由 NSS 支持的,而不是 OpenSSL,这个问题的具体原因是没有关于使用 NSS 支持的 curl 的良好文档,而它需要一个与 OpenSSL 不同的参数来使用相同的密码。所以我的问题是针对 NSS 的。

Ben*_*ird 22

没有文档涵盖密码名称与 curl 期望作为参数的名称之间的所有转换。

幸运的是,卷曲是开源的,并且映射在可用的源代码

为了未来搜索者的利益,我在这里更简洁地复制它:

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

TLS 1.0:可导出的 56 位密码套件。

<argument>                 <name>
rsa_des_56_sha             TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA
rsa_rc4_56_sha             TLS_RSA_EXPORT1024_WITH_RC4_56_SHA
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

RFC 中指定的新 HMAC-SHA256 密码套件

<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
Run Code Online (Sandbox Code Playgroud)

RFC 5288 和 RFC 5289 中的 AES GCM 密码套件

<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
Run Code Online (Sandbox Code Playgroud)

因此,如果您想使用 cipher TLS_DHE_RSA_WITH_AES_128_CBC_SHA,命令将是:

curl --ciphers dhe_rsa_aes_128_cbc_sha <url>
Run Code Online (Sandbox Code Playgroud)

要指定多个密码,请用逗号分隔列表。因此,如果您还想使用密码TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256,则命令为:

curl --ciphers dhe_rsa_aes_128_cbc_sha,ecdh_rsa_aes_128_gcm_sha_256 <url>
Run Code Online (Sandbox Code Playgroud)

要查看 curl 使用的密码列表,您需要一个外部服务 - 像这样:

curl --ciphers ecdhe_rsa_aes_256_sha https://www.howsmyssl.com/a/check
Run Code Online (Sandbox Code Playgroud)

尽管注意,该服务不接受所有密码,这意味着如果您将连接限​​制为仅一个未使用的密码,您将收到错误“无法与对等方安全通信:没有通用加密算法”而不是响应。


Ste*_*ich 2

没有curl format。curl 使用的密码格式取决于后端,至少可以是 NSS、GnuTLS、SecureTransport、SChannel、OpenSSL。

但看起来您正在询问 OpenSSL 语法。在这种情况下,请参阅https://www.openssl.org/docs/apps/ciphers.html#CIPHER-SUITE-NAMES了解密码名称之间的翻译。