چگونه میتوان وب سرور 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

Install-needed-tools-using-yum


قدم دوم: نصب acme.sh Let’s Encrypt client

کلون کردن repo


cd /tmp/

git clone https://github.com/Neilpang/acme.sh.git

clone-acme.sh-git-min

نصب و اجرای acme.sh client بروی سیستم :


cd acme.sh/

sudo -i ## be root user ##

./acme.sh –install

Install-acme.sh-client-on-CentOS-8

پس از نصب، لازم است خروجی(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

CentOS-8-Obtain-Lets-Encrypt-certificate-for-domain

CentOS8 Obtain Lets Encrypt certificate for domain

 

قدم ششم: پیکربندی nginx

تا به اینجا شما درخواست موفقیت آمیز خود برای دریافت گواهینامه ssl از Let’s Encryptبرای سرور لینوکس centOS 8  را ارسال کردید.

اینک زمان پیکربندی آن است.

برای بروزرسانی پیکربندی ssl از کد زیر استفاده نمایید:



<pre>$ sudo vi /etc/nginx/conf.d/c8nginx.cyberciti.biz.conf

کد زیر را نیز ضمیمه کنید:

</pre>

## http port 80: START http://c8nginx.cyberciti.biz/ config ##

server {

listen 80;

listen [::]:80;

access_log  /var/log/nginx/http_c8nginx.cyberciti.biz_access.log;

error_log   /var/log/nginx/http_c8nginx.cyberciti.biz_error.log;

server_name c8nginx.cyberciti.biz;

root        /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  /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;  # 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 ##
<pre>}

فایل را در ویرایشگر متن 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'

Install-Lets-Encrypt-certifcate-in-CentOS-8


برای اطمینان از باز بودن پورت 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

CentOS-8-Nginx-SSL-Labs-A-Test-result-with-Lets-Encrypt-Certificate-

قدم نهم: دستورات 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