במדריך זה תלמד כיצד להפעיל את TLSv1.3 ב-NGINX. מה זה אומר TLSv 1.3, מה זה עוזר ולמה אתה צריך בשרת האינטרנט as TLS ניתן להפעיל. לשרתים עם מערכת ניהול VestaCP (CentOS או אובונטו) זה קצת יותר קשה להפעיל TLS 1.3 מאשר בשרת cPanel, אבל זה לא בלתי אפשרי.
קופרינים
למה זה יותר טוב TLS 1.3 מאשר TLS 1.2?
TLS (Transport Layer Security) הוא פרוטוקול קריפטוגרפי מה שמבטיח אבטחת חיבור בין המחשב לרשת שהוא חלק ממנה. TLS הוא משמש ביישומים כגון: אמייל, מסרים, שיחות קול ווידאו (VoIP), אבל במיוחד ב HTTPS. הבטחת תקשורת מאובטחת בין המחשב או הסמארטפון של המשתמש לבין שרת האינטרנט של הדף שנכנס אליו.
TLS 1.3 מציע א מהירות גבוהה יותר של חיבור לקוח - שרת וא ביטחון יתר על כן על ידי ביטול כמה אלגוריתמים. ההבדלים בין TLSv1.2 ו TLSv1.3.
על HTTPS, SSL (Secure Sockets Layer) אמרתי גם במאמרים אחרים:
- כיצד להתקין אישור SSL (HTTPS חיבור) לאתר שמתארח בשרת 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
בואו נוסיף את השורה הבאה עבור כ 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
אני מקווה שתמצא את המדריך הזה מועיל ואם נתקעת עם משהו, השאר את פרטי הבעיה בתגובות.