delphi – TIdServerIOHandlerSSLOpenSSL.SSLOptions.CipherList中的密码名称顺序是否重要?

delphi – TIdServerIOHandlerSSLOpenSSL.SSLOptions.CipherList中的密码名称顺序是否重要?,第1张

概述我限制了我的web服务只允许这些TLS 1.x密码的密码:     TLS_RSA_WITH_AES_128_CBC_SHA     TLS_RSA_WITH_AES_128_CBC_SHA256     TLS_RSA_WITH_AES_128_GCM_SHA256     TLS_RSA_WITH_AES_256_CBC_SHA     TLS_RSA_WITH_AES_256_CBC_SHA 我限制了我的web服务只允许这些TLS 1.x密码的密码:

    TLS_RSA_WITH_AES_128_CBC_SHA
    TLS_RSA_WITH_AES_128_CBC_SHA256
    TLS_RSA_WITH_AES_128_GCM_SHA256
    TLS_RSA_WITH_AES_256_CBC_SHA
    TLS_RSA_WITH_AES_256_CBC_SHA256
    TLS_RSA_WITH_AES_256_GCM_SHA384
    TLS_RSA_WITH_CAMELliA_128_CBC_SHA
    TLS_RSA_WITH_CAMELliA_256_CBC_SHA
    TLS_RSA_WITH_IDEA_CBC_SHA
    TLS_RSA_WITH_RC4_128_MD5
    TLS_RSA_WITH_RC4_128_SHA

更新以回应Dave Thompson的评论:

我现在按顺序获取this SO answer生成的密码.
因为我们目前使用的是Delphi XE2 / Indy 10.5.8.0/OpenSSL 1.0.2f,所以我省略了ECDHE密码,这些是too cumbersome to implement with these software versions.
此外,我们仍然允许TLS 1.0.
在更新到Delphi Seattle 10之后,我们将禁止使用TLS 1.0并将ECDHE密码重新放入.

这留下:

TLS_DHE_RSA_WITH_CHACHA20_poly1305_SHA256 (0xcc15)TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (0x9f)TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (0x9e)TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 (0x6b)TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 (0x67)TLS_DHE_RSA_WITH_CAMELliA_256_CBC_SHA256 (0xc4)TLS_DHE_RSA_WITH_AES_256_CBC_SHA (0x39)TLS_DHE_RSA_WITH_AES_128_CBC_SHA (0x33)TLS_DHE_RSA_WITH_CAMELliA_256_CBC_SHA (0x88)TLS_DHE_RSA_WITH_CAMELliA_128_CBC_SHA (0x45)

转换为OpenSSL名称(根据Mapping OpenSSL cipher suite names to RFC names)这些是:

DHE-RSA-CHACHA20-poly1305 DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES128-GCM-SHA256 DHE-RSA-AES256-SHA256 DHE-RSA-AES128-SHA256 - cannot find the equivalent for 0xc4 - anyone? -DHE-RSA-AES256-SHADHE-RSA-AES128-SHA DHE-RSA-CAMELliA256-SHA DHE-RSA-CAMELliA128-SHA256

服务器提供密码的顺序很重要,但我是否可以控制此顺序? CipherList是一个字符串属性,包含与”连接的这些名称:

TIDServerIOHandleRSSLOpenSSL.SSLOptions.CipherList := 'DHE-RSA-CHACHA20-poly1305:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SH:DHE-RSA-AES128-SHA:DHE-RSA-CAMELliA256-SHA:DHE-RSA-CAMELliA128-SHA256';

如果是这样,建议的订单是什么?

请注意,由于我的webservice是服务器,因此我设置了SSLOptions.Mode:= sslmServer.

*这些是nmap脚本ssl-enum-ciphers与’A’成绩的那些

解决方法

Is the order of cipher names in TIDServerIOHandleRSSLOpenSSL.SSLOptions.CipherList important?

大多数是的.

TLS没有指定谁决定密码.通常,服务器尊重客户的偏好.也就是说,服务器将使用客户端的第一个首选项(如果可用并启用),或客户端的第二个首选项(如果可用并启用),依此类推.

大多数库允许服务器覆盖行为.例如,使用OpenSSL,SSL_OP_CIPHER_SERVER_PREFERENCE选项.在这种情况下,服务器将匹配服务器的第一个首选项(如果客户端通告它),服务器的第二个首选项(如果客户端通告它,等等).

对于我控制的服务器,我调整密码套件列表并通常设置SSL_OP_CIPHER_SERVER_PREFERENCE,因为许多客户端不注意细节.他们只是在ClIEntHello中抛出密码套餐,希望有些东西可以粘贴.

The order in which a server offers ciphers is important,but do I have control over this order?

是.

在服务器上,确定密码套件的顺序,然后使用SSL_CTX_set_cipher_List或SSL_set_cipher_List设置它们.通过设置列表,您可以确保RC4-MD5甚至不是客户端的首选(假设您省略它).为了获得最大的影响,还要设置SSL_OP_CIPHER_SERVER_PREFERENCE上下文选项.

另请参阅How do I disable a particular cipher suite in openssl?上下文是OpenSSL,但它应该让您了解Delphi的去向.

(Comments): What’s not clear to me from your answer: Does the CipherList property already signify an order? If I look at the underlying Delphi/Indy code I see that it is just a wrapper for external function SSL_CTX_set_cipher_List : function(_para1: PSSL_CTX; const str: PAnsiChar): TIDC_INT cdecl = nil; in IDSSLOpenSSLheaders.pas

如果我正确理解Delphi,那么我相信答案是肯定的,确实如此.但它可能使用(1)OpenSSL的默认列表,或(2)Delphi默认列表.两者都可能是“ALL:!EXP :! LOW”或类似的东西.在任何一种情况下,您都需要调整它以适应您的口味.

如果您对列表中的列表感兴趣,请使用Wireshark检查ClIEntHello.使用s_clIEnt很容易生成一个,它会显示OpenSSL的默认密码套件列表:

$openssl s_clIEnt -connect www.IEtf.org:443 -tls1 -servername www.IEtf.org

相应的Wireshark跟踪包含55个默认密码套件:

您还可以使用-cipher选项和“HIGH:!aNulL:!MD5:!RC4”来改善您的安全状况并减少密码套件的数量.密码套数将减少到约35.

$openssl s_clIEnt -connect www.IEtf.org:443 -tls1 -servername www.IEtf.org \     -cipher 'HIGH:!aNulL:!MD5:!RC4'

如果您不喜欢TripleDES和Cameilla,那么您可以将其减少到大约20个密码套件:

$openssl s_clIEnt -connect www.IEtf.org:443 -tls1 -servername www.IEtf.org \    -cipher 'HIGH:!aNulL:!MD5:!RC4:!3DES:!CAMELliA'

现在,假设客户端仅配置了RC4-MD5,并且服务器仅配置了aes-gcm.即,客户端和服务器之间没有密码套件的交集.在这种情况下,您将在OpenSSL中收到错误.错误将是0x1408A0C1,“没有共享密码套件”.它在服务器上看起来像这样:

140339533272744:error:1408A0C1:SSL routines:SSL3_GET_CLIENT_HELLO:no shared cipher:s3_srvr.c:1353

对于基于OpenSSL的客户端和服务器,您可以使用“DEFAulT”字符串确定默认密码套件列表.这就是它所谓的(检查ciphers(1) man page).

其中有103个,其中包括弱和受伤的算法.在实际 *** 作中,您希望将其配对至16个左右的密码套件(即您的安全姿势):

$openssl ciphers -v 'DEFAulT' | cut -f 1 -d " " | wc -l     103

和:

$openssl ciphers -v 'DEFAulT' | cut -f 1 -d " "ECDHE-RSA-AES256-GCM-SHA384ECDHE-ECDSA-AES256-GCM-SHA384ECDHE-RSA-AES256-SHA384ECDHE-ECDSA-AES256-SHA384ECDHE-RSA-AES256-SHAECDHE-ECDSA-AES256-SHASRP-DSS-AES-256-CBC-SHASRP-RSA-AES-256-CBC-SHASRP-AES-256-CBC-SHADH-DSS-AES256-GCM-SHA384DHE-DSS-AES256-GCM-SHA384DH-RSA-AES256-GCM-SHA384DHE-RSA-AES256-GCM-SHA384DHE-RSA-AES256-SHA256DHE-DSS-AES256-SHA256DH-RSA-AES256-SHA256DH-DSS-AES256-SHA256DHE-RSA-AES256-SHADHE-DSS-AES256-SHADH-RSA-AES256-SHADH-DSS-AES256-SHADHE-RSA-CAMELliA256-SHADHE-DSS-CAMELliA256-SHADH-RSA-CAMELliA256-SHADH-DSS-CAMELliA256-SHAECDH-RSA-AES256-GCM-SHA384ECDH-ECDSA-AES256-GCM-SHA384ECDH-RSA-AES256-SHA384ECDH-ECDSA-AES256-SHA384ECDH-RSA-AES256-SHAECDH-ECDSA-AES256-SHAAES256-GCM-SHA384AES256-SHA256AES256-SHACAMELliA256-SHAPSK-AES256-CBC-SHAECDHE-RSA-AES128-GCM-SHA256ECDHE-ECDSA-AES128-GCM-SHA256ECDHE-RSA-AES128-SHA256ECDHE-ECDSA-AES128-SHA256ECDHE-RSA-AES128-SHAECDHE-ECDSA-AES128-SHASRP-DSS-AES-128-CBC-SHASRP-RSA-AES-128-CBC-SHASRP-AES-128-CBC-SHADH-DSS-AES128-GCM-SHA256DHE-DSS-AES128-GCM-SHA256DH-RSA-AES128-GCM-SHA256DHE-RSA-AES128-GCM-SHA256DHE-RSA-AES128-SHA256DHE-DSS-AES128-SHA256DH-RSA-AES128-SHA256DH-DSS-AES128-SHA256DHE-RSA-AES128-SHADHE-DSS-AES128-SHADH-RSA-AES128-SHADH-DSS-AES128-SHADHE-RSA-SEED-SHADHE-DSS-SEED-SHADH-RSA-SEED-SHADH-DSS-SEED-SHADHE-RSA-CAMELliA128-SHADHE-DSS-CAMELliA128-SHADH-RSA-CAMELliA128-SHADH-DSS-CAMELliA128-SHAECDH-RSA-AES128-GCM-SHA256ECDH-ECDSA-AES128-GCM-SHA256ECDH-RSA-AES128-SHA256ECDH-ECDSA-AES128-SHA256ECDH-RSA-AES128-SHAECDH-ECDSA-AES128-SHAAES128-GCM-SHA256AES128-SHA256AES128-SHASEED-SHACAMELliA128-SHAIDEA-CBC-SHAPSK-AES128-CBC-SHAECDHE-RSA-RC4-SHAECDHE-ECDSA-RC4-SHAECDH-RSA-RC4-SHAECDH-ECDSA-RC4-SHARC4-SHARC4-MD5PSK-RC4-SHAECDHE-RSA-DES-CBC3-SHAECDHE-ECDSA-DES-CBC3-SHASRP-DSS-3DES-EDE-CBC-SHASRP-RSA-3DES-EDE-CBC-SHASRP-3DES-EDE-CBC-SHAEDH-RSA-DES-CBC3-SHAEDH-DSS-DES-CBC3-SHADH-RSA-DES-CBC3-SHADH-DSS-DES-CBC3-SHAECDH-RSA-DES-CBC3-SHAECDH-ECDSA-DES-CBC3-SHADES-CBC3-SHAPSK-3DES-EDE-CBC-SHAEDH-RSA-DES-CBC-SHAEDH-DSS-DES-CBC-SHADH-RSA-DES-CBC-SHADH-DSS-DES-CBC-SHADES-CBC-SHA
总结

以上是内存溢出为你收集整理的delphi – TIdServerIOHandlerSSLOpenSSL.SSLOptions.CipherList中的密码名称顺序是否重要?全部内容,希望文章能够帮你解决delphi – TIdServerIOHandlerSSLOpenSSL.SSLOptions.CipherList中的密码名称顺序是否重要?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1251208.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存