چگونه میتوان وب سرور nginx را با گواهینامه رایگان ssl بروی سرور CentOS 8 امن کرد؟
Let’s Encrypt یک گواهینامه رایگان،اتوماتیک و باز برای وب سایت و ایمیل سرور شماست.
در این مقاله قصد داریم نحوه نصب این گواهینامه برای وب سرور nginx، آموزش پیکربندی nginx و دریافت رتبه A+ بروی CentOS 8 را نمایش دهیم.
چگونگی ایمن سازی و آموزش پیکربندی nginx با Let’s Encryptدر CentOS 8
روند دریافت گواهینامه ssl به شرح زیر است:
۱) دریافت نرم افزار acme.sh
git clone https://github.com/Neilpang/acme.sh.git
۲) دریافت پیکربندی nginx برای دامنه
vi /etc/nginx/conf.d/your-domain-name.conf
۳) دریافت گواهینامه ssl برای دامنه
acme.sh --issue -d your-domain-name --nginx
۴) پیکربندی TLS/SSL برای Nginx
vi /etc/nginx/conf.d/your-domain-name.conf
۵) راه اندازی cron job برای بروزسانی خودکار
۶) بازکردن پورت ۴۴۳(HTTPS) و استفاده از فایروال برای CentOS 8
sudo firewall-cmd --add-service=https
در ادامه نحوه نصب acme.sh client و استفاده آن بروی CentOS 8 برای دریافت گواهینامه ssl از Let’s Encrypt.را خواهیم دید.
قدم اول: نصب نرم افزارهای مورد نیاز
نصب bc packages, curl, wget ,git با دستور yum command:
sudo yum install git bc wget curl socat
قدم دوم: نصب acme.sh Let’s Encrypt client
کلون کردن repo
cd /tmp/ git clone https://github.com/Neilpang/acme.sh.git
نصب و اجرای acme.sh client بروی سیستم :
cd acme.sh/ sudo -i ## be root user ## ./acme.sh –install
پس از نصب، لازم است خروجی(Terminal) فعلی را بسته و مجددا آن را باز کنید و یا دستور زیر را در command تایپ کنید:
sudo source ~/.bashrc
با نوشتن شماره نسخه، نصب خود را تایید نمایید:
acme.sh --version https://github.com/Neilpang/acme.sh v2.8.4
قدم سوم: در این قسمت قصد داریم یک پیکربندی جدید برای دامنه به صورت زیر ایجاد کنیم(کافیست نام دامنه خود را جایگزین نمایید)
# vi /etc/nginx/conf.d/c8nginx.cyberciti.biz.conf
کد زیر را اضافه نمایید:
# http port 80 server { listen 80; server_name c8nginx.cyberciti.biz; access_log /var/log/nginx/http_c8nginx.cyberciti.biz_access.log; error_log /var/log/nginx/http_c8nginx.cyberciti.biz_error.log; root /usr/share/nginx/html; }
سپس فایل را ذخیره کنید و ببندید.
تنظیمات nginx را تست کنید و سرور nginx را به صورت زیر مجددا بارگیری(reload) نمایید.
# nginx -t # systemctl restart nginx.service
قدم چهارم: فایل dhparams.pem را بسازید.
دستور openssl را اجرا نمایید اما یک دایرکتوری جدید ایجاد کنید و از دستور mkdir استفاده کنید.
# mkdir -pv /etc/nginx/ssl/cyberciti.biz/ # cd /etc/nginx/ssl/cyberciti.biz/ # openssl dhparam -out dhparams.pem -dsaparam 4096
اطلاعات بیشتر درخصوص چگونگی افزایش سرعت ssl بروی Linux
قدم پنجم: دریافت گواهینامه برای دامنه
صدور گواهینامه برای دامنه:
sudo acme.sh --issue -d c8nginx.cyberciti.biz -k 2048 --nginx ## for two domains ## sudo acme.sh --issue -d c8nginx.cyberciti.biz -d www.cyberciti.biz -k 2048 --nginx ## get certs for three domains ## sudo acme.sh --issue -d cyberciti.biz -d c8nginx.cyberciti.biz -d www.cyberciti.biz -k 2048 --nginx ## let us get cert for c8nginx.cyberciti.biz domain only ## sudo acme.sh --issue -d c8nginx.cyberciti.biz -k 4096 --nginx
قدم ششم: پیکربندی nginx
تا به اینجا شما درخواست موفقیت آمیز خود برای دریافت گواهینامه ssl از Let’s Encryptبرای سرور لینوکس centOS 8 را ارسال کردید.
اینک زمان پیکربندی آن است.
برای بروزرسانی پیکربندی ssl از کد زیر استفاده نمایید:
<pre>$ sudo vi /etc/nginx/conf.d/c8nginx.cyberciti.biz.conf
کد زیر را نیز ضمیمه کنید:
&amp;lt;/pre&amp;gt; ## http port 80: START http://c8nginx.cyberciti.biz/ config ## server { listen 80; listen [::]:80; access_log&amp;nbsp; /var/log/nginx/http_c8nginx.cyberciti.biz_access.log; error_log&amp;nbsp;&amp;nbsp; /var/log/nginx/http_c8nginx.cyberciti.biz_error.log; server_name c8nginx.cyberciti.biz; root&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /usr/share/nginx/html; # # redirect all HTTP requests to HTTPS with a 301 Moved Permanently response. # return 301 https://$host$request_uri; } ## https port 443: START https://c8nginx.cyberciti.biz/ config ## server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name c8nginx.cyberciti.biz; root /usr/share/nginx/html; # certs sent to the client in SERVER HELLO are concatenated in ssl_certificate ssl_certificate&amp;nbsp; /etc/nginx/ssl/cyberciti.biz/c8nginx.cyberciti.biz.cer; ssl_certificate_key /etc/nginx/ssl/cyberciti.biz/c8nginx.cyberciti.biz.key; ssl_session_timeout 1d; ssl_session_cache shared:MozSSL:10m;&amp;nbsp; # about 40000 sessions ssl_session_tickets off; ssl_dhparam /etc/nginx/ssl/cyberciti.biz/dhparams.pem; # # Supports Firefox 27, Android 4.4.2, Chrome 31, Edge, IE 11 on Windows 7, Java 8u31, OpenSSL 1.0.1, Opera 20, and Safari 9 and above # ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off; # HSTS (ngx_http_headers_module is required) (63072000 seconds) add_header Strict-Transport-Security "max-age=63072000" always; # OCSP stapling ssl_stapling on; ssl_stapling_verify on; # replace with the IP address of your resolver resolver 8.8.8.8; ## add other config below such as fastcgi or php and so on ## &amp;lt;pre&amp;gt;}
فایل را در ویرایشگر متن vi/vim ذخیره کرده و ببندید.
قدم هفتم: نصب گواهینامه
گواهینامه صادر شده برای nginx را نصب کنید:
# acme.sh --installcert -d c8nginx.cyberciti.biz \ --key-file /etc/nginx/ssl/cyberciti.biz/c8nginx.cyberciti.biz.key \ --fullchain-file /etc/nginx/ssl/cyberciti.biz/c8nginx.cyberciti.biz.cer \ --reloadcmd 'systemctl reload nginx.service'
برای اطمینان از باز بودن پورت OS از دستور ss ویا netstat استفاده کنید.
# ss -tulpn
قدم هفتم: پیکربندی firewall
در این مرحله شما نیاز دارید پورت ۴۴۳ (https) باز کنید تا client ها بتوانند متصل شوند.
دستورات را با استفاده از دستور زیر به روز نمایید:
$ sudo firewall-cmd --add-service=https $ sudo firewall-cmd --runtime-to-permanent
قدم هشتم: تست و بررسی
مرورگر خود را باز کنید و نام دامنه خود را تایپ کنید:
https://c8nginx.cyberciti.biz
گواهینامه خود را با سایت های بررسی ssl امتحان کنید.
https://www.ssllabs.com/ssltest/analyze.html?d=c8nginx.cyberciti.biz
قدم نهم: دستورات acme.sh
تمامی گواهینامه های خود را به دستور زیر لیست کنید:
<pre># acme.sh --list
برخی خروجی ها:
Main_Domain KeyLength SAN_Domains Created Renew c8nginx.cyberciti.biz "4096" no Mon Dec 30 16:57:10 UTC 2019 Fri Feb 28 16:57:10 UTC 2020
دستور تمدید مجوز دامنه با نام c8nginx.cyberciti.biz:
# acme.sh --renew -d c8nginx.cyberciti.biz
توجه داشته باشید که Cron job وظیفه به روز رسانی گواهینامه شما را به عهده دارد که به صورت زیر نصب میگردد و نیاز به هیچ کاری از سمت شما نیست.
برای دیدن job کد زیر را اجرا نمایید:
# crontab -l
نمونه های خروجی:
8 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
به روز رسانی acme.sh client:
# acme.sh --upgrade <pre>
برای دریافت راهنمایی بیشتر از کد زیر استفاده نمایید:
# acme.sh --help | more
منبع: وب سایت cyberciti