Centos系统支持TLS 1.3

红米2年前技术文章1497

一、背景

1、生产的 CentOS 7 服务器需要启用 TLS 1.3

2、Openssl介绍

OpenSSL 是用于传输层安全性 (TLS) 和安全套接字层 (SSL) 协议的强大、商业级且功能齐全的工具包。OpenSSL 是一个软件库,用于保护计算机网络上的通信免受窃听或需要识别另一端方身份的应用程序。它是根据 Apache 样式许可获得许可的,这意味着您可以根据一些简单的许可条件免费获取和使用它用于商业和非商业目的。

TLS 1.3是最新和最安全的 TLS 协议版本。它改进了旧版本和几个新功能的延迟。它目前在 Chrome(从 66 版开始)和 Firefox(从 60 版开始)中得到支持,并且正在为 Safari 和 Edge 浏览器开发。

如果您从 Centos 7 存储库下载 Nginx,您将获得使用OpenSSL 1.0.2k-fips. 但是如果你想启用 TLS 1.3,那么你必须满足一些要求。要启用TLS 1.3任何发行版,请查看以下必需的详细信息:

  • Apache 版本2.4.37greater.

  • Nginx 版本1.13.0greater.

  • OpenSSL 版本1.1.1greater.

  • 具有正确配置的 DNS 记录的有效域名。

  • 有效的 TLS 证书。

由于需要在 CentOS7 服务器上部署 TLS v1.3,因此我们已经拥有有效的域名、有效的 TLS 证书和 Nginx 版本 1.16.1,该版本高于 TLS 1.3 所需的最低版本。但是当前的 Nginx 版本是用构建的OpenSSL 1.0.2k-fips,所以首先我们需要通过编译过程安装 OpenSSL 版本 1.1.1,然后再次使用新的 OpenSSL 版本重新编译我们的 Nginx。

二、 安装 OpenSSL

cd /usr/src
wget https://www.openssl.org/source/old/1.1.1/openssl-1.1.1f.tar.gz

tar -zxvf openssl-1.1.1f.tar.gz
mv openssl-1.1.1f openssl
cd /usr/src/openssl
./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl --libdir=/lib64 shared zlib-dynamic

#编译安装
make -j4
make test
make install

--prefix--openssldir控制已安装组件的配置

--prefix和的行为和交互在OpenSSL 1.1.0 及以上版本--openssldir之间和以下版本之间略有不同。

OpenSSL 1.0.2 同时将 --prefix 和 --openssldir 设置到同一位置。shared 将强制创建共享库,而 Zlib 意味着将使用 zlib 库执行压缩。值得运行一下,make test看看是否有任何意外错误。如果有的话,你需要在安装库之前修复它们。

现在重命名现有的 OpenSSL 二进制文件并添加一个新的符号链接

mv /usr/bin/openssl /usr/bin/openssl-backup
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl


新版本的 OpenSSL 应该支持TLS v1.3,通过如下命令可以查看

openssl ciphers -v | awk '{print $2}' | sort | uniq

现在我们必须再次重新编译 Nginx 以适应新安装的 OpenSSL


三、安装Nginx

从网上下载安装好的Nginx版本源码。在我的例子中,Nginx 版本 1.16.1 安装在我的生产服务器上,所以我将下载相同的版本并开始编译。

cd /usr/src
wget [http://nginx.org/download/nginx-1.16.1.tar.gz](http://nginx.org/download/nginx-1.16.1.tar.gz)

tar xvf nginx-1.16.1.tar.gz

cd nginx-1.16.1

./configure --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx \
--modules-path=/usr/lib64/nginx/modules \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--http-client-body-temp-path=/var/lib/nginx/tmp/client_body\ --http-proxy-temp-path=/var/lib/nginx/tmp/proxy \
--http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi \
--http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi \
--http-scgi-temp-path=/var/lib/nginx/tmp/scgi \
--pid-path=/run/nginx.pid \
--lock-path=/run/lock/subsys/nginx --user=nginx \
--group=nginx \
--with-file-aio \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-stream_ssl_preread_module \
--with-http_addition_module \
--with-http_xslt_module=dynamic \
--with-http_image_filter_module=dynamic \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_degradation_module \
--with-http_slice_module \
--with-http_stub_status_module \
--with-http_perl_module=dynamic \
--with-http_auth_request_module \
--with-mail=dynamic \
--with-mail_ssl_module \
--with-pcre \
--with-pcre-jit \
--with-stream=dynamic \
--with-stream_ssl_module \
--with-openssl=/usr/src/openssl

#结束之后进行编译
make -j4
make install

现在我们可以看到,Nginx 是使用新安装的 OpenSSL 构建的。

#nginx -V

nginx version: nginx/1.16.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)
built with OpenSSL 1.1.1f 31 Mar 2020
TLS SNI support enabled

更新您的 Nginx 配置以启用TLS 1.3. 在 Nginx 虚拟主机配置的服务器块中添加以下行。

ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';

检查配置并重启 Nginx。

nginx -t

systemctl restart  nginx

可以从浏览器或命令行验证您的 Web 应用程序以检查它是否使用 TLS 1.3。

在终端设备上安装了 OpenSSL 1.1.1 版,那么您与服务器的连接将优先通过 TLS 1.3。

openssl s_client -connect link.bdn.com.np:443 -tls1_3

将看到以下输出

New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Server public key is 2048 bit
Post-Handshake New Session Ticket arrived:
SSL-Session:
Protocol : TLSv1.3
Cipher : TLS_AES_256_GCM_SHA384


相关文章

Ansible部署和使用(sshpass)

Ansible部署和使用(sshpass)

简介Ansible默认通过 SSH 协议管理机器。安装Ansible之后,不需要启动或运行一个后台进程,或是添加一个数据库。只要在一台电脑(可以是一台笔记本)上安装好,就可以通过这台电脑管理一组远程的...

MySQL优化器特性(三)表关联之BKA(Batched Key Access)优化

MySQL优化器特性(三)表关联之BKA(Batched Key Access)优化

单表range查询时,可以使用MRR优化,先对rowid进行排序,然后再回表查询数据。在表关联的时候,也可以使用类似的优化方法,先根据关联条件取出被关联表的rowid,将rowid缓存在join bu...

开源大数据集群部署(一)集群实施规划

1、集群规划1.1 本次集群规划信息本次实际生产业务体量存在巨大差异,但集群规划内容相同,因此建议实际生产环境按照按照一定比例扩展即可。主机操作系统要求软硬件信息参数配置8C16G操作系统版本Cent...

Dockerfile编写指南

Dockerfile编写指南

一、背景  在k8s提出抛弃docker,拥抱其他的cri插件的情况下,为什么还有这篇指南呢?首先Dockerfile作为容器打包的标准,已经存在了很多年了。其中的编写技巧到现在也是一直延续的,所以并...

ORC、Parquet 等列式存储的优点

ORC 和Parquet 都是高性能的存储方式,这两种存储格式总会带来存储和性能上的提升Parquet:1. Parquet 支持嵌套的数据模型,类似于Protocol Buffers,每一个数据模型...

Ranger部署

安装前准备1.1. 创建用户和用户组groupadd rangeruseradd -g ranger ranger1.2. 数据库配置mysql -uroot -p -hxxx.xxx.xxx.13 ...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。