كيفية تفعيل TLSv1.3 على NGINX. VestaCP / CentOS أو Ubuntu

في هذا البرنامج التعليمي سوف تتعلم كيف تفعيل TLSالإصدار 1.3 على NGINX. ماذا يعني ذلك TLSv 1.3, ماذا يساعد و لماذا انت تحتاج على خادم الويب كـ TLS يمكن تفعيلها. للخوادم بنظام الإدارة VestaCP (CentOS أو Ubuntu) أصعب قليلاً للتفعيل TLS 1.3 من خادم cPanel ، لكن هذا ليس مستحيلًا.

لماذا هو أفضل TLS 1.3 من TLS 1.2؟

TLS (Transport Layer Security) هو بروتوكول التشفير الذي يضمن أمن الاتصال بين الكمبيوتر والشبكة التي هو جزء منها. TLS يتم استخدامه في تطبيقات مثل: البريد الإلكتروني, الرسائل, مكالمات الصوت والفيديو (VoIP) ، ولكن بشكل خاص في HTTPS. ضمان الاتصال الآمن بين كمبيوتر المستخدم أو الهاتف الذكي وخادم الويب للصفحة التي يتم الوصول إليها.

TLS 1.3 تقدم سرعة أعلى من ربط العميل - الخادم وأ وعلاوة على ذلك الأمن من خلال القضاء على بعض الخوارزميات. الفرق بين TLSالإصدار 1.2 و TLSv1.3.

حول HTTPS, SSL (Secure Sockets Layer) قلت أيضًا في مقالات أخرى:

كيفية تفعيل TLS 1.3 على NGINX. خادم مع إدارة VestaCP / CentOS

قبل أن ترى كيف تقوم بالتنشيط TLSv1.3 على NGINX ، فأنت بحاجة إلى مراعاة بعض المتطلبات الدنيا لـ TLS 1.3.

  1. NGINX 1.13.x أو أحدث
  2. شهادة TLS صالح
  3. اسم المجال النشط مع DNS المكون بشكل صحيح - يمكن الوصول إليه على الإنترنت
  4. شهادة TLS / SSL صالح. يمكن أن يكون كذلك Let’s Encrypt.

Pe VestaCP مثبت منذ وقت طويل ، لدينا فقط البروتوكول المتاح TLS 1.2. لقد رأيت في العديد من البرامج التعليمية أن هذا يكفي كما في nginx.conf دعنا نضيف السطر التالي لـ ca TLS 1.3 للتفعيل:

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;

مزيف. لو الخادم CentOS مع الإدارة VestaCP, لم يتم تجميع NGINX مع الحد الأدنى من الإصدار OpenSSL 1.1.1.1, ssl_protocols TLSv1.2 TLSv1.3; في ال nginx.conf .. هذا لا يساعد على الإطلاق.

[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

لذلك في المثال أعلاه ، يعتبر Nginx 1.22.0 إصدارًا متوافقًا TLS 1.3 ، لكن المكتبة لا تساعدنا OpenSSL 1.0.2k-fips.

للتفعيل TLSv1.3 على Nginx ، تحتاج إلى تثبيت المكتبات الفرعية وحزم التطوير أولاً. Development Tools. يعمل في CentOS 7 أسطر أوامر:

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. قم بتثبيت أحدث إصدار OpenSSL

في هذا الوقت أحدث إصدار هو OpenSSL 1.1.1p، ولكن بقدر ما لاحظت أنه يوجد بالفعل و OpenSSL 3. يمكنك العثور على المصادر على OpenSSL. المؤسسة.

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 

مهم جدا للتشغيل make test قبل تثبيت المكتبة. إذا كان الاختبار به أخطاء ، فلا تقم بتشغيله make install حتى يتم تصحيح الأخطاء.

في الخطوة التالية نقوم بعمل نسخة احتياطية من الملف الثنائي الحالي openssl ونضيف symlink إلى الجديد.

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

في /usr/local/openssl/bin ينفذ ldd للتحقق من التبعيات openssl. يمكننا أيضًا التحقق من إصدار openssl. يأمر 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

لدينا حاليا أحدث نسخة مثبتة OpenSSL الذي يدوم TLSv1.3. يمكننا التحقق من الإصدارات TLS / SSL بدعم من المكتبات OpenSSL بأمر:

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

هذا لا يعني أن المواقع الإلكترونية مستضافة بمساعدة المدير VestaCP سيكون لديهم على الفور TLS 1.3.

على الرغم من أننا قمنا بتثبيت ملفات OpenSSL 1.1.1p، يتم تجميع Nginx مع الإصدار القديم 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. أعد تجميع Nginx للنظام VestaCP

في هذه الخطوة نحتاج إلى إعادة التحويل البرمجي لـ OpenSSL إصدار Nginx مثبت بالفعل على النظام CentOS / VestaCP. كما قلت أعلاه ، في حالتي يتعلق الأمر nginx/1.22.0. نظرًا لأننا نتحدث عن خادم ويب يحتوي على VestaCP نظام الإدارة ، قبل أن نبدأ في إعادة الترجمة ، من الجيد عمل نسخة احتياطية من ملفات تهيئة nginx.

Nginx النسخ الاحتياطي الحالي على النظام VestaCP

أرشفة الأدلة واحتفظ بها في مكان ما على الخادم "/etc/nginx"و"/usr/local/vesta/nginx".

يجري nginx -V وحفظ الوحدات الموجودة في ملف.

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'
كيف تقوم بالتفعيل؟ TLSالإصدار 1.3 على NGINX
كيفية التفعيل TLSالإصدار 1.3 على NGINX

كيفية إعادة ترجمة Nginx للترقية OpenSSL / CentOS 7

أكرر. اذا كنت تمتلك VestaCP، قم بتنزيل إصدار Nginx الذي قمت بتثبيته بالفعل. يمكنك العثور على جميع الأرشيفات التي تحتوي على إصدارات Nginx 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

نعيد تجميع وحدات 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

لدينا الآن Nginx مثبتًا ومترجمًا مع أحدث إصدار من OpenSSL قادرة على الصمود 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

* إذا كان nginx مثبتًا بالفعل على الخادم ، فستحتاج إلى إلغاء تثبيته. ترجمة لا تعمل على ترقية nginx.

كيفية تفعيل TLSv1.3 لنطاقات على VestaCP.

في الملف /etc/nginx/nginx.conf نضيف الأسطر التالية:

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

على مستوى المجال ، قمت بتغيير شيء ما في القوالب VestaCP ولتمكين HTTP / 2. لذلك عند إضافة مجال جديد (example.com) مع تمكين Let's Encrypt ، لدي ملف التكوين التالي لـ 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';

قبل إعادة تشغيل nginx ، من الجيد اختبار تكوينه أولاً.

[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

آمل أن تجد هذا البرنامج التعليمي مفيدًا ، وإذا كنت عالقًا في شيء ما ، فاترك تفاصيل المشكلة في التعليقات.

شغوفة بالتكنولوجيا ، أكتب بسرور StealthSettings.com منذ عام 2006. لدي خبرة واسعة في أنظمة التشغيل: macOS, Windows سي Linuxبل أيضًا في لغات البرمجة ومنصات التدوين (WordPress) وللمتاجر عبر الإنترنت (WooCommerce، ماجنتو، بريستاشوب).

كيف » Linux » كيفية تفعيل TLSv1.3 على NGINX. VestaCP / CentOS أو Ubuntu
اترك تعليق