关于tls:TLSv13-Support主流-Web-客户端和服务端对-TLSv13-的支持情况

16次阅读

共计 8349 个字符,预计需要花费 21 分钟才能阅读完成。

请拜访原文链接:https://sysin.org/blog/tlsv1-…,查看最新版。原创作品,转载请保留出处。

作者:gc(at)sysin.org,主页:www.sysin.org

2021 年 8 月公布的 Windows Server 2022 正式反对 QUIC 和 TLS 1.3 相干个性。至此,主流产品曾经全副反对 TLSv1.3 协定。

TLS 1.3 由 IETF 于 2018 年 8 月正式公布。

1. 为什么要应用 TLSv1.3

SSL:Secure Sockets Layer 安全套接字层。

TLS:Transport Layer Security,传输层平安。

TLS 是 IETF 在 SSL3.0 根底上设计的协定,实际上相当于 SSL 的后续版本。

TLS(Transport Layer Security)是一种加密协议,旨在通过 IP 网络提供平安通信。它是当今十分常见的协定,用于爱护 Web 浏览器和 Web 服务器之间的 HTTP 通信。当应用 TLS 爱护 HTTP 时,它通常被称为 HTTPS(HTTP Secure)。TLS/SSL 是平安传输层协定,是介于 TCP 和 HTTP 之间的一层平安协定,不影响原有的 TCP 协定和 HTTP 协定。

TLS 1.3 是时隔九年对 TLS 1.2 等之前版本的新降级,也是迄今为止改变最大的一次。针对目前已知的平安威逼,IETF(Internet Engineering Task Force,互联网工程工作组)制订 TLS 1.3 的新规范,使其无望成为有史以来最平安,但也最简单的 TLS 协定。

TLS 1.3 与之前的协定有较大差别,次要在于:

  • 相比过来的的版本,引入了新的密钥协商机制 — PSK
  • 反对 0-RTT 数据传输,在建设连贯时节俭了往返工夫
  • 废除了 3DES、RC4、AES-CBC 等加密组件,废除了 SHA1、MD5 等哈希算法
  • ServerHello 之后的所有握手音讯采取了加密操作,可见明文大大减少
  • 不再容许对加密报文进行压缩、不再容许单方发动重协商
  • DSA 证书不再容许在 TLS 1.3 中应用

比照旧协定中的有余,TLS 1.3 的确能够称得上是向前迈了一大步。既防止之前版本呈现的缺点,也缩小了 TLS 握手的工夫。

总结一下,TLS 1.3 与以前的版本相比具备如下两个大的劣势:更快的访问速度和更强的安全性!

TLS 1.0 和 TLS 1.1 是别离于 1996 年和 2006 年公布的老版协定,应用的是弱加密算法和零碎 。比方 SHA-1 和 MD5,这些算法和零碎非常软弱,存在重大安全漏洞,容易受到降级攻打的重大影响,而在 2008 年和 2017 年别离公布了协定的新版本,即 TLS 1.2 和 TLS 1.3,无疑更优于旧版本,应用起来也更平安。

2018 年,在秋季 TLS 1.3 版本公布之后,苹果、谷歌、Mozilla 和微软四大浏览器制造商于 2018 年 10 月联结发表打算在 2020 年初勾销对 TLS 1.0 和 TLS 1.1 的反对。

支流浏览器客户端都提供了禁用 TLS 1.0 和 TLS 1.1 协定的大抵期限:

Browser Name Date
Microsoft IE and Edge First half of 2020
Mozilla Firefox March 2020
Safari/Webkit March 2020
Google Chrome January 2020

备注:因为受 COVID-19 影响,浏览器厂商推延了 TLS 1.0 和 1.1 版本协定的淘汰工夫。

参考:

  • Modernizing TLS connections in Microsoft Edge and Internet Explorer 11 : https://blogs.windows.com/mse…
  • Removing Old Versions of TLS : https://blog.mozilla.org/secu…
  • Deprecation of Legacy TLS 1.0 and 1.1 Versions: https://webkit.org/blog/8462/…
  • Modernizing Transport Security: https://security.googleblog.c…
  • Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS): https://tools.ietf.org/html/r…

2. 客户端反对

2.1 浏览器(Chrome、Firefox、Safari)

古代支流操作系统(Unix、Linux、Windows,包含挪动操作系统 Andriod 和 iOS)中的浏览器及相干组件都能够反对 TLS 1.3。

最低版本要求如下:

Modern: Modern clients that support TLS 1.3, with no need for backwards compatibility

Configuration Firefox Android Chrome Edge Internet Explorer Java OpenSSL Opera Safari
Modern 63 10.0 70 75 11 1.1.1 57 12.1

参看:https://wiki.mozilla.org/Secu…

Microsoft Internet Explorer 不反对 TLS 1.3,其代替产品 Microsoft Edge 因循 Google Chrome 相干个性。

2.2 curl

curl 是申请拜访 Web 服务器的命令行工具,7.52.0 & + 版本反对 TLSv1.3。

7.52.0 – December 21 2016,curl: introduce the –tlsv1.3 option to force TLS 1.3

应用参数 --tlsv1.3,能够通过 curl --help 查看是否反对该参数

3. 服务端反对

3.1 F5 BIG-IP

BIG-IP® 零碎是一组利用交付产品,它们协同工作以确保高可用性、改良的性能、利用平安和访问控制。BIG-IP 零碎的次要性能之一是将不同类型的协定和应用程序流量定向到适当的指标服务器。零碎通过其 Local Traffic Manager™ 模块实现这一点,该模块能够将流量间接转发到负载平衡服务器池,或将流量发送到下一跳路由器、路由器池或间接发送到网络上的选定节点。BIG-IP 零碎上可用的其余模块提供要害性能,例如将安全策略利用于网络流量、减速 HTTP 连贯以及优化广域网中的连贯。

F5 BIG-IP 以后 LTS 版本 14.1.0、15.1.0、16.1.0 及以上版本都能够残缺反对 TLSv1_3。

BIG-IP v14 开始反对 TLSv1_3(In BIG-IP 14.0.0, the BIG-IP system adds limited support for Transport Layer Security (TLS) 1.3. Starting in BIG-IP 14.1.0.1 and later, this support was updated to provide production level support for TLS 1.3.)

By default, TLS 1.3 is disabled. To enable TLS 1.3, you must remove the No TLSv1.3 option from the Enabled Options list in the Configuration utility for the Client SSL and Server SSL profiles

You can view a list of TLS 1.3 supported ciphers and groups using the following TMOS Shell (tmsh) commands:

  • To view the supported client-side ciphers, use the following command:

    tmsh run util clientssl-ciphers TLSv1_3

  • To view the supported server-side ciphers, use the following command:

    tmsh run util serverssl-ciphers TLSv1_3

配置启用 TLSv1_3 的步骤如下:

编辑 ClientSSL Profle:

Ciphers:抉择 Cipher Group,下拉抉择 f5-secure

Options:Options List…

Enabled Options,

Disable No TLSv1.3

增加,No TLSv1 和 TLSv1.1,保留默认的“Don’t insert empty fragments”

留神:TLSv1_3 是 F5 产品中的写法,与其余开源产品中的 TLSv1.3 不同。

3.2 Windows & IIS

Windows® Server 的 Internet 信息服务 (IIS) 是一种灵便、平安且可治理的 Web 服务器,用于托管 Web 上的任何内容。从媒体流到 Web 应用程序,IIS 的可扩大和凋谢架构已筹备好解决最刻薄的工作。

2021 年 8 月公布的 Windows Server 2022 正式反对 HTTP/3、QUIC 和 TLS 1.3 相干个性。

在 Windows Server 2022 中的 IIS 新建一个站点将默认启用 TLS 1.3 以及 QUIC,除非手动勾选禁用。

备注:IIS 10 & Windows Server 2019 以及之前版本无奈反对,参看。

3.3 Nginx

nginx [engine x] 是一个 HTTP 和反向代理服务器,邮件代理服务器,和一个通用的 TCP/UDP 代理服务器,最后由 Igor Sysoev 编写。在许多负载很重的俄罗斯网站上运行了很久,包含 Yandex、Mail.Ru、VK 和 Rambler。依据 Netcraft 的说法,nginx 服务或代理 22.36% 最忙碌的网站 (2021 年 11 月)。
以下是一些胜利案例:Dropbox、Netflix、Wordpress.com、FastMail.FM。

Nginx 1.13.0 开始反对 TLSv1.3(2017-04-25 nginx-1.13.0 mainline version has been released.)。

  • The TLSv1.1 and TLSv1.2 parameters (1.1.13, 1.0.12) work only when OpenSSL 1.0.1 or higher is used.
  • The TLSv1.3 parameter (1.13.0) works only when OpenSSL 1.1.1 built with TLSv1.3 support is used.

More info on the NGINX documentation

参考配置:启用 HTTP/2、TLSv1.3、举荐的 Ciphers、HSTS

server {
    listen       443 ssl http2; # HTTP/2 Enable
    server_name  www.sysin.org;
    ssl_certificate     www.sysin.org.crt;
    ssl_certificate_key www.sysin.org.key;
    ssl_protocols       TLSv1.2 TLSv1.3; # Requires nginx >= 1.13.0 else use TLSv1.2
    ssl_ciphers  ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
    add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";
    ...
}

NGINX 1.21.4 引入了 Kernel TLS 个性(introduces support for kTLS)大幅提高了 TLS 传输性能,要求 OpenSSL 3.0 + FreeBSD 13/Linux Kernel 4.17+,详见:Improving NGINX Performance with Kernel TLS and SSL_sendfile()。

3.4 Apache httpd

Apache HTTP Server 我的项目致力于开发和保护一个用于古代操作系统的开源 HTTP 服务器,包含 UNIX 和 Windows。该项目标指标是提供一个平安、高效和提供与以后 HTTP 同步的 HTTP 服务的可扩大服务器规范。

Apache HTTP 服务器(“httpd”)于 1995 年推出,自 1995 年以来始终是 Internet 上最受欢迎的 Web 服务器。1996 年 4 月。它在 2020 年 2 月庆贺了它作为一个我的项目的 25 岁生日。

版本要求:

  • Apache version 2.4.36 or greater. (搜寻网上文章传言 2.4.38 有误!)
  • OpenSSL version 1.1.1 or greater.

CentOS 8 和 Ubuntu 20.04 自带软件包满足要求,低版本须要编译装置。

[root@c8 ~]# openssl version
OpenSSL 1.1.1c FIPS  28 May 2019

[root@c8 ~]# dnf list httpd
Installed Packages
httpd.x86_64        2.4.37-21.module_el8.2.0+382+15b0afa8        @AppStream
root@u20:~# openssl version
OpenSSL 1.1.1f  31 Mar 2020

root@u20:~# apt list apache2
Listing... Done
apache2/focal 2.4.41-4ubuntu3 amd64

启用 TLS 1.3 和 1.2:

The Apache version 2.4.36 or higher versions support TLS v1.3. You must upgrade Apache packages before enabled TLS 1.3 in SSL settings.

 SSLProtocol -all +TLSv1.2 +TLSv1.3

配置项如下所示:

<VirtualHost *:443>
    ServerName www.sysin.org
    DocumentRoot /var/www/html

    SSLEngine on
    SSLProtocol -all +TLSv1.2 +TLSv1.3
    SSLCertificateFile "/path/to/www.sysin.org.cert"
    SSLCertificateKeyFile "/path/to/www.sysin.org.key"
</VirtualHost>

记得重启 Apache 服务能力失效。

3.5 Apache Tomcat

Apache Tomcat® 软件是 Jakarta Servlet、Jakarta Server Pages、Jakarta Expression Language、Jakarta WebSocket、Jakarta Annotations 和 Jakarta Authentication 标准的开源实现。这些标准是 Jakarta EE 平台的一部分。Jakarta EE 平台是 Java EE 平台的演变。Tomcat 10 及更高版本实现了作为 Jakarta EE 一部分开发的标准。Tomcat 9 及更早版本实现了作为 Java EE 一部分开发的标准。

以后最新的 Tomcat 7.0+ Release 都能够反对 TLSv1.3,具体版本如下:

2018-11-15 Tomcat 7.0.92 Released

  • Support for TLSv1.3 when used with a JRE or OpenSSL version that supports it

2018-11-07 Tomcat 8.5.35 Released

  • support for TLSv1.3 when used with a JRE or OpenSSl version that supports it

2018-11-07 Tomcat 9.0.13 Released

  • support for TLSv1.3 when used with a JRE or OpenSSL version that supports it

Tomcat 10.0 当然反对(最早公布的版本:2020-02-20 Tomcat 10.0.0-M1 (markt))。

请留神,只有在应用实现 TLSv1.3 的 JVM 时,JSSE 才反对 TLSv1.3。

配置示例:

编辑 server.xml 配置文件,SSLHostConfig protocols= 字段如下:

<!-- Define an SSL/TLS HTTP/1.1 Connector on port 443 with HTTP/2
-->
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="150" SSLEnabled="true">
    <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
    <SSLHostConfig protocols="TLSv1.2+TLSv1.3"
                   ciphers="HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!kRSA" >
        <Certificate certificateKeystoreFile="conf/k8s.sysin.cn.pfx"
                     certificateKeystoreType="PKCS12"
                     certificateKeystorePassword="your-pfx-password" />
    </SSLHostConfig>
</Connector>

<!-- 默认参数如下:hostName= default:`_default_`
        ciphers= default:`HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!kRSA`
        protocols= default:`all`
-->

重启 Tomcat 失效。

protocols 写法:

The names of the protocols to support when communicating with clients. This should be a list of any combination of the following:

    SSLv2Hello
    SSLv3
    TLSv1
    TLSv1.1
    TLSv1.2
    TLSv1.3
    all

列表中的每个标记都能够以加号(“+”)或减号(“-”)为前缀。加号增加协定,减号将其从以后列表中删除。该列表是从一个空列表开始构建的。字符 all 是 SSLv2Hello,TLSv1,TLSv1.1,TLSv1.2,TLSv1.3 的别名。请留神,只有在应用实现 TLSv1.3 的 JVM 时,JSSE 才反对 TLSv1.3。请留神,对于基于 OpenSSL 的平安连接器,将疏忽 SSLv2Hello。如果为基于 OpenSSL 的平安连接器指定了多个协定,它将始终反对 SSLv2Hello。如果指定了单个协定,它将不反对 SSLv2Hello。请留神,SSLv2 和 SSLv3 实质上是不平安的。如果未指定,则将应用 all 的默认值。

3.6 HAProxy

HAProxy 是一种收费、疾速且牢靠的反向代理,可为基于 TCP 和 HTTP 的应用程序提供高可用性、负载平衡和代理。它特地实用于流量十分高的网站,并为世界上大部分访问量最大的网站提供反对。多年来,它已成为事实上的规范开源负载均衡器,当初随大多数支流 Linux 发行版一起提供,并且通常默认部署在云平台中。因为它不做广告,咱们只晓得它在管理员报告时被应用:-)

要求:HAProxy 1.8.1 及以上,OpenSSL 1.1.1 及以上。

参数:ssl-default-bind-ciphersuites,参看 https://sysin.org/blog/get-a-… SSL cipher 局部的形容。

3.7 Varnish with Hitch

Varnish Cache 是一种 web 应用程序加速器,同时以被用于缓存的 HTTP 反向代理而闻名。Varnish HTTP/2 前端通过 Hitch 代理实现。Hitch 是 Varnish Software 开发的基于 libev 的高性能 SSL/TLS 开源代理软件。

笔者写了一篇文章形容了整个配置过程,拜访这里查看:Varnish with Hitch HTTP/2 implement on CentOS 8.0

hitch 参考配置:Ciphers,HTTP/2 和 TLSv1.3

版本要求:

  • Cache 5.0 开始实验性的反对 HTTP/2
  • Varnish 6.0 残缺反对 HTTP/2
  • hitch 1.5 版本开始反对 TLS 1.3
正文完
 0