چگونه میتوان وب سرور nginx را با گواهینامه رایگان ssl بروی سرور CentOS 8 امن کرد؟

Let’s Encrypt یک گواهینامه رایگان،اتوماتیک ‌و باز برای وب سایت و ایمیل سرور شماست.

در این مقاله قصد داریم نحوه نصب این گواهینامه برای وب سرور nginx، آموزش پیکربندی nginx و دریافت رتبه A+ بروی CentOS 8 را نمایش دهیم.

چگونگی ایمن سازی و آموزش پیکربندی nginx با Let’s Encryptدر CentOS 8

روند دریافت گواهینامه ssl به شرح زیر است:

۱) دریافت نرم افزار acme.sh

[php]

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

[/php]

۲) دریافت پیکربندی nginx برای دامنه

[php]
vi /etc/nginx/conf.d/your-domain-name.conf
[/php]

۳) دریافت گواهینامه ssl برای دامنه

[php]
acme.sh –issue -d your-domain-name –nginx
[/php]

۴) پیکربندی TLS/SSL برای Nginx

[php]
vi /etc/nginx/conf.d/your-domain-name.conf
[/php]

۵) راه اندازی cron job برای بروزسانی خودکار

۶) بازکردن پورت ۴۴۳(HTTPS) و​​ استفاده از فایروال برای CentOS 8

[php]
sudo firewall-cmd –add-service=https
[/php]

در ادامه نحوه نصب  acme.sh client و استفاده آن بروی CentOS 8 برای دریافت گواهینامه ssl از Let’s Encrypt.را خواهیم دید.

قدم اول: نصب نرم افزارهای مورد نیاز

نصب bc packages, curl, wget ,git با دستور yum command:

[php]
sudo yum install git bc wget curl socat
[/php]

Install-needed-tools-using-yum


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

کلون کردن repo

[php]

cd /tmp/

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

[/php]

clone-acme.sh-git-min

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

[php]

cd acme.sh/

sudo -i ## be root user ##

./acme.sh –install

[/php]

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

پس از نصب، لازم است خروجی(Terminal) فعلی را بسته و مجددا آن را باز کنید و یا دستور زیر را در command  تایپ کنید:

[php]

sudo source ~/.bashrc
[/php]

 

با نوشتن شماره نسخه، نصب خود را تایید نمایید:

[php]

acme.sh –version

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

v2.8.4

[/php]

قدم سوم: در این قسمت قصد داریم یک پیکربندی جدید برای دامنه به صورت زیر ایجاد کنیم(کافیست نام دامنه خود را جایگزین نمایید)

[php]
# vi /etc/nginx/conf.d/c8nginx.cyberciti.biz.conf
[/php]

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

[php]
# 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;
}
[/php]

سپس فایل را ذخیره کنید و ببندید.

تنظیمات nginx را تست کنید و سرور nginx را به صورت زیر مجددا بارگیری(reload) نمایید.

[php]

# nginx -t

# systemctl restart nginx.service

[/php]

 

قدم چهارم: فایل dhparams.pem را بسازید.

دستور openssl را اجرا نمایید اما یک دایرکتوری جدید ایجاد کنید و از دستور mkdir استفاده کنید.

[php]

# mkdir -pv /etc/nginx/ssl/cyberciti.biz/

# cd /etc/nginx/ssl/cyberciti.biz/

# openssl dhparam -out dhparams.pem -dsaparam 4096

[/php]

اطلاعات بیشتر  درخصوص چگونگی افزایش سرعت ssl بروی Linux

قدم پنجم: دریافت گواهینامه برای دامنه

صدور گواهینامه برای دامنه:

[php]

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

[/php]

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

CentOS8 Obtain Lets Encrypt certificate for domain

 

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

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

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

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

[php]

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

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

[php]</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>}

[/php]

فایل را در ویرایشگر متن vi/vim ذخیره کرده و ببندید.

قدم هفتم: نصب گواهینامه

گواهینامه صادر شده برای nginx را نصب کنید:

[php]

# 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’

[/php]

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


برای اطمینان از باز بودن پورت OS از دستور ss ویا netstat استفاده کنید.

[php]

# ss -tulpn

[/php]

قدم هفتم: پیکربندی firewall

در این مرحله شما نیاز دارید پورت ۴۴۳ (https) باز کنید تا client ها بتوانند متصل شوند.

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

[php]

$ sudo firewall-cmd –add-service=https

$ sudo firewall-cmd –runtime-to-permanent

[/php]

قدم هشتم: تست و بررسی

مرورگر خود را باز کنید و نام دامنه خود را تایپ کنید:

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

تمامی گواهینامه های خود را به دستور زیر لیست کنید:

[php]

<pre># acme.sh –list
[/php]

برخی خروجی ها:

[php]

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
[/php]

 

دستور تمدید مجوز دامنه با نام c8nginx.cyberciti.biz:

[php]

# acme.sh –renew -d c8nginx.cyberciti.biz

[/php]

 

توجه داشته باشید که  Cron job  وظیفه به روز رسانی گواهینامه شما را به عهده دارد که به صورت زیر نصب میگردد و نیاز به هیچ کاری از سمت شما نیست.

برای دیدن job کد زیر را اجرا نمایید:

[php]

# crontab -l
[/php]

نمونه های خروجی:

[php]

8 0 * * * "/root/.acme.sh"/acme.sh –cron –home "/root/.acme.sh" > /dev/null
[/php]

به روز رسانی acme.sh client:

[php]

# acme.sh –upgrade

<pre>[/php]

برای دریافت راهنمایی بیشتر از کد زیر استفاده نمایید:

[php]

# acme.sh –help | more
[/php]

 

منبع: وب سایت cyberciti