Centos系统支持TLS 1.3

红米2年前技术文章1086

一、背景

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


相关文章

python脚本--检查域名证书到期时间

需要的依赖:pip install python-dateutil pip install pytzpython脚本内容:#!/usr/bin/env python3      import s...

通过SDK上传oss文件报错“413 Request Entity Too Large”

通过SDK上传oss文件报错“413 Request Entity Too Large”

问题描述通过SDK上传oss文件返回错误如下,客户反馈上传的文件不大,只有200M。浏览器端访问返回504 timeout报错,同客户核实是每次到1min 30s时候上传大文件会报错com.aliyu...

Nginx实现数据库端口转发

一、需求客户想要将IDC服务器的数据库端口暴漏在公网上,然后其他业务来调数据库接口。为了保证安全,只开放指定的公网ip访问。二、逻辑设计由于客户的IDC服务器与云ECS服务器通过专线打通,所以只需要在...

nginx配置反向代理某个url

nginx配置反向代理某个url

本文讲的这个漏洞 主要是为了解决漏洞扫描的问题我先介绍下这个漏洞主要是因为访问https://172.16.120.17:18090/ws/v1/cluster/info这个 yarn rest的一个...

企业级大数据安全架构(十一)

企业级大数据安全架构(十一)

一、Kerberos接入dophinscheduler建议将dophinscheduler集成到Ambari安装部署,在Ambari上面开启kerberos1.安装准备编译从GitHub获取dolph...

Shell中单引号和双引号区别

1)在/home/atguigu/bin创建一个test.sh文件[atguigu@hadoop102 bin]$ vim test.sh在文件中添加如下内容#!/bin/bashdo_date=$1...

发表评论    

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