في هذا البرنامج التعليمي سوف تتعلم كيف تفعيل 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) قلت أيضًا في مقالات أخرى:
- كيفية تثبيت الشهادة SSL (HTTPS Connection) لموقع ويب مستضاف على خادم NGINX بدون cPanel أو VestaCP
- إعادة تجميع OpenSSL 1.1 & NGINX 1.25 من أجل TLS 1.3 (CentOS 7)
- كيفية نقل مدونة أو موقع على شبكة الإنترنت WordPress من HTTP على HTTPS (Nginx)
- احذف المجالات القديمة Certbot certificates (دعونا نشفر الشهادة)
كيفية تفعيل TLS 1.3 على NGINX. خادم مع إدارة VestaCP / CentOS
قبل أن ترى كيف تقوم بالتنشيط TLSv1.3 على NGINX ، فأنت بحاجة إلى مراعاة بعض المتطلبات الدنيا لـ TLS 1.3.
- NGINX 1.13.x أو أحدث
- شهادة TLS صالح
- اسم المجال النشط مع DNS المكون بشكل صحيح - يمكن الوصول إليه على الإنترنت
- شهادة 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'
كيفية إعادة ترجمة 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
آمل أن تجد هذا البرنامج التعليمي مفيدًا ، وإذا كنت عالقًا في شيء ما ، فاترك تفاصيل المشكلة في التعليقات.