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ể.
Nội dung
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:
- Cách cài đặt chứng chỉ SSL (HTTPS Kết nối) cho một trang web được lưu trữ trên máy chủ NGINX không có cPanel hoặc VestaCP
- biên dịch lại OpenSSL 1.1 & NGINX 1.25 cho TLS 1.3 (CentOS 7)
- Cách di chuyển blog hoặc trang web WordPress từ HTTP trên HTTPS (Nginx)
- Xóa các miền cũ Certbot certificates (Hãy mã hóa chứng chỉ)
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.
- NGINX 1.13.x trở lên
- Một chứng chỉ TLS hợp lệ
- 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
- 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 sự phụ thuộc của openssl. Chúng tôi cũng có thể kiểm tra phiên bản 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'

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.