Làm thế nào để kích hoạt TLSv1.3 trên NGINX? VestaCP / CentOS hoặc Ubuntu

Trong hướng dẫn này, bạn sẽ học cách cho phép TLSv1.3 trên NGINX. Nó có nghĩa là gì TLSv 1.3, nó giúp được gì và tại sao bạn cần trên máy chủ web với tư cách là TLS có thể được kích hoạt. Đối với máy chủ có hệ thống quản lý VestaCP (CentOS hoặc Ubuntu) khó hơn một chút để kích hoạt TLS 1.3 hơn trên máy chủ cPanel, nhưng không phải là không thể.

Tại sao nó tốt hơn TLS 1.3 so với TLS 1.2?

TLS (Transport Layer Security) là một giao thức mật mã đảm bảo bảo mật kết nối giữa máy tính và mạng mà nó là một phần. TLS nó được sử dụng trong các ứng dụng như: e-mail, gửi tin nhắn, cuộc gọi thoại và video (VoIP), nhưng đặc biệt là tại HTTPS. Đảm bảo liên lạc an toàn giữa máy tính hoặc điện thoại thông minh của người dùng và máy chủ web của trang được truy cập.

TLS 1.3 Cung cấp một tốc độ cao hơn của việc kết nối máy khách – máy chủ và một an ninh hơn nữa bằng cách loại bỏ một số thuật toán. Sự khác biệt giữa TLSv1.2 và TLSv1.3.

về HTTPS, SSL (Secure Sockets Layer) Tôi cũng đã nói trong các bài viết khác:

Làm thế nào để kích hoạt TLS 1.3 trên NGINX? Máy chủ với quản lý VestaCP / CentOS

Trước khi bạn thấy cách bạn kích hoạt TLSv1.3 trên NGINX, bạn cần xem xét một số yêu cầu tối thiểu cho TLS 1.3.

  1. NGINX 1.13.x trở lên
  2. Một chứng chỉ TLS hợp lệ
  3. Tên miền đang hoạt động với DNS được cấu hình phù hợp – có thể truy cập trên Internet
  4. Một chứng chỉ TLS / SSL có hiệu lực. Nó cũng có thể được Let’s Encrypt.

Pe VestaCP đã cài đặt từ lâu, chúng tôi chỉ có sẵn giao thức TLS 1.2. Tôi đã thấy trong nhiều hướng dẫn rằng nó là đủ như trong nginx.conf hãy thêm dòng sau cho ca TLS 1.3 được kích hoạt:

server {

  listen 443 ssl http2;
  listen [::]:443 ssl http2;

  server_name example.com;
  root /var/www/example.com/public;

  ssl_certificate /path/to/your/certificate.crt;
  ssl_certificate_key /path/to/your/private.key;

  ssl_protocols TLSv1.2 TLSv1.3;

Giả mạo. Nếu như máy chủ CentOS với quản lý VestaCP, NGINX chưa được biên dịch với phiên bản tối thiểu OpenSSL 1.1.1.1, ssl_protocols TLSv1.2 TLSv1.3; trong nginx.conf .. chẳng giúp được gì cả.

[root@north ~]# nginx -V
nginx version: nginx/1.22.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled

Vì vậy, trong ví dụ trên Nginx 1.22.0 là phiên bản tương thích TLS 1.3, nhưng thư viện không giúp chúng tôi OpenSSL 1.0.2k-fips.

để kích hoạt TLSv1.3 trên Nginx, trước tiên bạn cần cài đặt các thư viện con và gói phát triển. Development Tools. Nó chạy vào CentOS 7 dòng lệnh:

yum install gcc gcc-c++ pcre-devel zlib-devel make unzip gd-devel perl-ExtUtils-Embed libxslt-devel openssl-devel perl-Test-Simple
yum groupinstall 'Development Tools'

1. Cài đặt phiên bản mới nhất OpenSSL

Tại thời điểm này phiên bản mới nhất là OpenSSL 1.1.1p, nhưng theo như tôi nhận thấy thì đã có và OpenSSL 3. Bạn có thể tìm các nguồn trên OpenSSL. Org.

cd /usr/src
wget https://www.openssl.org/source/openssl-1.1.1p.tar.gz
tar xvf openssl-1.1.1p.tar.gz 
mv openssl-1.1.1p openssl
cd openssl
./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl --libdir=/lib64 shared zlib-dynamic
make -j4
make test 
make install 

Rất quan trọng để chạy make test trước khi cài đặt thư viện. Nếu kiểm tra có lỗi, không chạy make install cho đến khi các lỗi được sửa chữa.

Trong bước tiếp theo, chúng tôi tạo bản sao lưu của tệp nhị phân hiện tại openssl và chúng tôi thêm symlink sang cái mới.

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

trong /usr/local/openssl/bin hành hình ldd để kiểm tra các phụ thuộc openssl. Chúng tôi cũng có thể kiểm tra phiên bản của openssl. Yêu cầu openssl version.

[root@north bin]# ldd openssl
	linux-vdso.so.1 =>  (0x00007ffd20bd7000)
	libssl.so.1.1 => /lib64/libssl.so.1.1 (0x00007fab09b62000)
	libcrypto.so.1.1 => /lib64/libcrypto.so.1.1 (0x00007fab09675000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007fab09471000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fab09255000)
	libc.so.6 => /lib64/libc.so.6 (0x00007fab08e87000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fab09df5000)
[root@north bin]# openssl version
OpenSSL 1.1.1p  21 Jun 2022

Hiện tại chúng tôi đã cài đặt phiên bản mới nhất OpenSSL mà chịu đựng TLSv1.3. Chúng ta có thể kiểm tra các phiên bản TLS / SSL được nhà sách hỗ trợ OpenSSL theo đơn đặt hàng:

[root@north bin]# openssl ciphers -v | awk '{print $2}' | sort | uniq
SSLv3
TLSv1
TLSv1.2
TLSv1.3
[root@north bin]# 

Điều này không có nghĩa là các trang web được lưu trữ với sự trợ giúp của người quản lý VestaCP họ sẽ có ngay lập tức TLS 1.3.

Mặc dù chúng tôi đã cài đặt OpenSSL 1.1.1p, Nginx được biên dịch với phiên bản cũ OpenSSL 1.0.2k-fips.

[root@north bin]# nginx -V
nginx version: nginx/1.22.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/etc/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 --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'
[root@north bin]# openssl version
OpenSSL 1.1.1p  21 Jun 2022
[root@north bin]# 

2. Biên dịch lại Nginx cho hệ thống VestaCP

Ở bước này chúng ta cần biên dịch lại cho OpenSSL phiên bản Nginx đã được cài đặt trên hệ thống CentOS / VestaCP. Như tôi đã nói ở trên, trong trường hợp của tôi, đó là về nginx/1.22.0. Vì chúng ta đang nói về một máy chủ web có VestaCP hệ thống quản trị, trước khi chúng tôi bắt đầu biên dịch lại, tốt nhất là tạo bản sao lưu các tệp cấu hình nginx.

Backup Nginx hiện tại trên hệ thống VestaCP

Lưu trữ và giữ ở đâu đó trên máy chủ các thư mục "/etc/nginx"và"/usr/local/vesta/nginx".

CHẠY nginx -V và lưu các mô-đun hiện có vào một tệp.

configure arguments: --prefix=/etc/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 --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'
Làm thế nào để bạn kích hoạt? TLSv1.3 trên NGINX
Cách kích hoạt TLSv1.3 trên NGINX

Cách biên dịch lại Nginx để nâng cấp OpenSSL / CentOS 7

Tôi lặp lại. Nếu bạn có VestaCP, tải xuống phiên bản Nginx bạn đã cài đặt. Bạn có thể tìm thấy tất cả các kho lưu trữ với các phiên bản Nginx trên nginx.org.

cd /usr/src
wget https://nginx.org/download/nginx-1.22.0.tar.gz 
tar xvf nginx-1.22.0.tar.gz
cd nginx-1.22.0

Chúng tôi biên dịch lại các mô-đun nginx:

./configure --prefix=/etc/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  \
--pid-path=/var/run/nginx.pid  \
--lock-path=/var/run/nginx.lock  \
--http-client-body-temp-path=/var/cache/nginx/client_temp  \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp  \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp  \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp  \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp  \
--user=nginx  \
--group=nginx  \
--with-compat  \
--with-file-aio  \
--with-threads  \
--with-http_addition_module  \
--with-http_auth_request_module  \
--with-http_dav_module  \
--with-http_flv_module  \
--with-http_gunzip_module  \
--with-http_gzip_static_module  \
--with-http_mp4_module  \
--with-http_random_index_module  \
--with-http_realip_module  \
--with-http_secure_link_module  \
--with-http_slice_module  \
--with-http_ssl_module  \
--with-http_stub_status_module  \
--with-http_sub_module  \
--with-http_v2_module  \
--with-mail  \
--with-mail_ssl_module  \
--with-stream  \
--with-stream_realip_module  \
--with-stream_ssl_module  \
--with-stream_ssl_preread_module  \
--with-openssl=/usr/src/openssl  \
--with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong  \
--param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC'  \
--with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'
make -j4
make install

Bây giờ chúng tôi đã cài đặt và biên dịch Nginx với phiên bản mới nhất của OpenSSL có thể chịu được TLSv1.3.

[root@north bin]# nginx -V
nginx version: nginx/1.22.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
built with OpenSSL 1.1.1p  21 Jun 2022
TLS SNI support enabled

*nếu nginx đã được cài đặt trên máy chủ, bạn sẽ cần gỡ cài đặt nó. Biên dịch không hoạt động khi nâng cấp nginx.

Làm thế nào để kích hoạt TLSv1.3 cho các tên miền trên VestaCP?

Trong file /etc/nginx/nginx.conf chúng tôi thêm các dòng sau:

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';

Ở cấp tên miền, tôi đã thay đổi một số thứ trong các mẫu VestaCP và để kích hoạt HTTP/2. Vì vậy, khi thêm một miền mới (example.com) có bật Let's Encrypt, tôi có tệp cấu hình sau cho SSL:

cat /home/vestacpuser/conf/web/example.com.nginx.ssl.conf 

server {
    listen      IP.IP.IP.IP:443 ssl http2;
    server_name example.com www.example.com;
    root        /home/vestacpuser/web/example.com/public_html;
    index       index.php index.html index.htm;
    access_log  /var/log/nginx/domains/example.com.log combined;
    access_log  /var/log/nginx/domains/example.com.bytes bytes;
    error_log   /var/log/nginx/domains/example.com.error.log error;

    ssl_certificate      /home/vestacpuser/conf/web/ssl.example.com.pem;
    ssl_certificate_key  /home/vestacpuser/conf/web/ssl.example.com.key;

....

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';

Trước khi khởi động lại nginx, bạn nên kiểm tra cấu hình của nó trước.

[root@north web]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@north web]# systemctl restart nginx

Tôi hy vọng bạn thấy hướng dẫn này hữu ích và nếu bạn gặp khó khăn với điều gì đó, hãy để lại chi tiết vấn đề trong phần bình luận.

Là người yêu công nghệ, tôi rất vui được viết tại StealthSettings.com từ năm 2006. Tôi có kinh nghiệm đa dạng với các hệ điều hành: macOS, Windows và Linux, cũng như trong các ngôn ngữ lập trình và nền tảng blogging (WordPress) và cửa hàng trực tuyến (WooCommerce, Magento, PrestaShop).

Làm thế nào để » Linux » Làm thế nào để kích hoạt TLSv1.3 trên NGINX? VestaCP / CentOS hoặc Ubuntu
Để lại một bình luận