反之亦然,如何找出哪些密码套件可用于特定版本的SSL/TLS协议?这两个问题都意味着存在限制,即任何密码套件都不适用于任何协议版本。特别是,我想在TLS 1.2适用密码的详尽列表中指出,如果有的话。
这个问题可以重新表述为密码套件和协议版本之间的兼容性。
这是一个与编程无关的话题。但是为什么要担心1.2或1.3之外的其他版本呢?
TLS 1.3有一个非常小的密码列表,与之前的所有密码不同:
本规范定义了以下与TLS 1.3一起使用的密码套件。
+------------------------------+-------------+
| Description | Value |
+------------------------------+-------------+
| TLS_AES_128_GCM_SHA256 | {0x13,0x01} |
| | |
| TLS_AES_256_GCM_SHA384 | {0x13,0x02} |
| | |
| TLS_CHACHA20_POLY1305_SHA256 | {0x13,0x03} |
| | |
| TLS_AES_128_CCM_SHA256 | {0x13,0x04} |
| | |
| TLS_AES_128_CCM_8_SHA256 | {0x13,0x05} |
+------------------------------+-------------+
对于其他版本,可以使用https://github.com/mozilla/cipherscan可以帮助它显示密码及其应用的版本。
或者只需使用openssl ciphers
命令openssl,添加-s
参数,然后添加-tls1
、-tls1_1
或-tls1_2
。
如果你看它的手册,你也有列表,看看https://www.openssl.org/docs/manmaster/man1/ciphers.html
TLSv1中有很多可能使用的密码。但并非所有的都是好主意。有些人试图维护好的参数列表,例如https://wiki.mozilla.org/Security/Server_Side_TLS#Recommended_configurations或https://weakdh.org/sysadmin.html
我还建议您查看定义“长期支持”TLSv1.2的努力,它是当前TLS版本1.2之上的规范,适用于不会超过1.3的人,它试图通过从TLS v1.2中删除所有内容来提高安全性被发现不是一个好主意,同时仍然100%符合TLS v1.2。
https://datatracker.ietf.org/doc/draft-gutmann-tls-lts/?include_text=1
本文档指定了TLS 1.2的更新,以在具有多年甚至十年更新周期的系统上提供长期支持,该更新尽可能结合TLS 1.2已部署的内容,但修复了安全漏洞和漏洞。
关于密码,它说:
TLS-LTS通过其300多个密码套件、40多个ECC参数集和一系列补充算法、参数和参数格式将TLS 1.2或多或少限制为两个,一台传统机型配有DHE AES-CBC HMAC-SHA-256
RSA-SHA-256/PSK,一台ECC机型配有ECDHE-P256 AES-GCM HMAC-
SHA-256 ECDSA-P256-SHA-256/PSK,带有未压缩点:
o TLS-LTS实施必须支持TLS_DHE_RSA_与_AES_128_CBC_SHA256、TLS_DHE_PSK_与_AES_128_CBC_SHA256、TLS_ECDHE_ECDSA_与_AES_128_GCM_SHA256和TLS_ECDHE_PSK_与_AES_128_GCM_SHA256。对于这些套件,协议中需要哈希函数的所有位置都使用SHA-256,特别是在PRF和每包MAC计算中(如套件中的_SHA256所示),以及CertificateVerify和ServerKeyExchange消息中的客户端和服务器签名中。
[Note: TLS_ECDHE_PSK_WITH_AES_128_GCM_SHA256 is based on
draft-ietf-tls-ecdhe-psk-aead, currently still
progressing as an IETF draft, the reference will be
updated to the full RFC once it's published].
问题内容: 问:当使用AndroidHttpClient通过HTTPS发出REST请求时,如何指定要使用的SSL协议和密码? 这个很重要。众所周知,在服务器上可以做很多事情,但是有很多限制。同一台服务器必须为包括旧浏览器在内的浏览器以及其他客户端提供服务。这意味着服务器必须支持各种协议和密码。即使在Android中,如果您必须支持许多不同的版本,则也将必须支持许多不同的协议和密码。 更重要的是,默
问题内容: 我正在使用的保护客户端和服务器程序之间的通信。该服务器程序还提供来自Web浏览器的HTTPS请求。 据“ 开始加密与Java ”,371页,你应该总是叫,以确保密码套件最终被谈判是为您的目的足够强。 话虽这么说,对我的方法的调用产生了大约180个选项。这些选项的范围从(我认为是相当安全的)到(不确定MD5的当前状态是否安全)到(不确定要做什么)。 限制套接字使用的密码套件的明智列表是什
WorkerMan在接口上支持各种协议,只要符合ConnectionInterface接口即可(参见定制通讯协议章节)。 为了方便开发者,WorkerMan提供了HTTP协议、WebSocket协议以及非常简单的Text文本协议、可用于二进制传输的frame协议。开发者可以直接使用这些协议,不必再二次开发。如果这些协议都不满足需要,开发者可以参照定制协议章节实现自己的协议。 开发者也可以直接基于t
我试图使用PowerShell从https网站抓取html内容。 不幸的是,该站点只例外一组有限的SSL/TLS密码套件,不支持Powershell可用的套件。 如果尝试使用Invoke-WebRequest cmdlet,我会收到以下错误消息: 调用-网络请求:请求被中止:无法创建SSL/TLS安全通道。 问题: 是否有办法指定PowerShell使用的客户端SSL/TLS密码套件? 还有其他c
根据下面的代码,如何将协议设置为TLSv1.2、TLSv1、SSLv3? 使用SoapUi,我可以使用以下配置请求服务:-dSOAPUI.https.protocols=TLSv1.2,TLSv1,SSLv3 使用CXF,我得到一个“javax.net.ssl.SSLHandShakeException:没有适当的协议(协议被禁用或密码套件不适当)” 很抱歉我对Soap和SSL的知识很差...
我有客户端应用程序,它使用apache-Commons-http客户端2.0,我需要连接到不同的服务器。作为加密协议,我使用: 一般来说,它工作正常,但在某些服务器上会发生以下情况: 如果我从协议列表中删除TLSv1,它将与此服务器一起正常工作,我将获得预期的200状态。因此,我有一个问题——如何预先定义服务器支持哪种协议(SSL或TLS)和协议版本? 或者也许有其他方法来解决这个问题?