نجوه ایمن سازی آپاچی با گواهی SSL رایگان Let’s Encrypt در CentOS 8:
مراحل دریافت گواهی SSL رایگان به شرح زیر است: 1) ماژول SSL/TLS را برای آپاچی اچتیپیپی سرور در CentOS 8 نصب کنید:sudo yum install mod_sslgit clone https://github.com/Neilpang/acme.sh.gitmkdir -p /var/www/html/.well-known/acme-challenge/acme.sh --issue -w /DocumentRootPath/ -d your-domainvi /etc/httpd/conf.d/ssl.confsudo firewall-cmd --add-service=httpsبا توجه به شکل زیر میتوانید "تنظیمات نمونه" مورد استفاده در تهیه این مطلب را ببینید. همانطور که مشاهده میکنید، در این مورد قرار است که گواهی SSL رایگان Let’s Encrypt، امنیت وبسرور آپاچی را روی CentOS 8 تضمین کند.
حالا برویم سراغ نصب acme.sh client و استفاده از آن در CentOS 8 برای تهیه یک گواهی SSL رایگان! اما قبل از هر چیزی اول تمامی پچها را با اجرای دستور زیر اپلای کنید:
sudo yum updateگام اول - نصب mod_ssl برای آپاچی:
دستور yum زیر را اجرا کنید:$ sudo yum install mod_ssl
گام دوم - نصب acme.sh Let’s Encrypt client
به منظور اجرای acme.sh شما باید wget, curl, bc, socat و git را روی CentOS 8 نصب داشته باشید. در غیر اینصورت لازمه که حتما آنها را با اجرای دستور زیر نصب نمایید:$ sudo yum install wget curl bc git socatLast metadata expiration check: 0:06:51 ago on Wednesday 02 October 2019 05:49:51 PM UTC.Package wget-1.19.5-7.el8_0.1.x86_64 is already installed.Package curl-7.61.1-8.el8.x86_64 is already installed.Dependencies resolved.========================================================================================= Package Arch Version Repository Size=========================================================================================Installing: git x86_64 2.18.1-3.el8 AppStream 186 k socat x86_64 1.7.3.2-6.el8 AppStream 298 k bc x86_64 1.07.1-5.el8 BaseOS 129 kInstalling dependencies: git-core x86_64 2.18.1-3.el8 AppStream 4.1 M git-core-doc noarch 2.18.1-3.el8 AppStream 2.3 M perl-Error noarch 1:0.17025-2.el8 AppStream 46 k perl-Git noarch 2.18.1-3.el8 AppStream 77 k perl-TermReadKey x86_64 2.37-7.el8 AppStream 40 k emacs-filesystem noarch 1:26.1-5.el8 BaseOS 69 k Transaction Summary=========================================================================================Install 9 Packages Total download size: 7.1 MInstalled size: 38 MIs this ok [y/N]: yکلون کردن ریپازیتوری:
برای کلون کردن ریپازیتوری acme.sh از گیتهاب، دستورات زیر را اجرا کنید:$ cd /tmp/$ git clone https://github.com/Neilpang/acme.sh.git$ cd acme.sh/$ sudo -i# cd acme.sh/# ./acme.sh --install
اکنون ما به این نرمافزار روی سرور CentOS 8 نیاز داریم. شما باید ترمینال فعلی و یا سِشن ssh را ببندید و دوباره باز نمایید تا تغییرات اعمال شوند. راه دیگر این است که فرمان زیر را اجرا کنید:
$ sudo source ~/.bashrc# acme.sh --versionhttps://github.com/Neilpang/acme.shv2.8.3گام سوم - ایجاد دایرکتوری acme-challeng
فرمان mkdir زیر را اجرا کنید. اما پیش از اجرای فرمان، مطمئن شوید که D$ را روی مسیر واقعی DocumentRoot در سرور خود تنظیم کردهاید:# D=/var/www/html/# mkdir -vp ${D}/.well-known/acme-challenge/###---[ NOTE: Adjust permission as per your setup ]---#### chown -R apache:apache ${D}/.well-known/acme-challenge/# chmod -R 0555 ${D}/.well-known/acme-challenge/# mkdir -p /etc/httpd/ssl/cyberciti.biz/گام چهارم - فایل dhparams.pem را ایجاد نمایید
فرمان openssl را اجرا کنید:# cd /etc/httpd/ssl/cyberciti.biz/# openssl dhparam -out dhparams.pem -dsaparam 4096
در صورت فعال نبودن سرویس آپاچی؛ آن را روشن نمایید
در صورتی که سرویس آپاچی فعال نباشد، میتوانید با استفاده از دستور systemctl آن را روشن نمایید:$ sudo systemctl status httpd.service$ sudo systemctl enable httpd.service$ sudo systemctl start httpd.service$ sudo systemctl status httpd.service
از باز بودن پورت TCP 80 اطمینان حاصل کنید
برای باز کردن این پورت در CentOS 8 از فرمان firewall-cmd به روش زیر استفاده کنید:$ sudo firewall-cmd --permanent --add-service=http --zone=public$ sudo firewall-cmd --reload$ sudo firewall-cmd --list-services --zone=publicگام پنجم - یک گواهی SSL / TLS برای دامنه خود صادر کنید
برای صدور گواهی به روش زیر عمل کنید:# acme.sh --issue -w /path/to/www/htmlRoot/ -d your-domain-example-com -k 2048# acme.sh --issue -w /path/to/www/htmlRoot/ -d www.cyberciti.biz -k 4096# acme.sh --issue -w /var/www/html/ -d centos8.cyberciti.biz -k 4096
گام ششم - کانفیگ آپاچی برای استفاده از SSL/TLS
فایل etc/httpd/conf.d/ssl.conf را بوسیله یک ویرایشگر متن از قبیل فرمان vi ویرایش کنید:$ sudo vi /etc/httpd/conf.d/ssl.conf### Start config for port 443 #Listen 443 httpsSSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialogSSLSessionCache shmcb:/run/httpd/sslcache(512000)SSLSessionCacheTimeout 300SSLCryptoDevice builtin ### Turn on HTTP2 support #Protocols h2 http/1.1 ### Redirect all http urls to https #RewriteEngine OnRewriteCond %{HTTPS} offRewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=302,L,QSA]################################################## SSL/TLS config for domain centos8.cyberciti.biz ##################################################<VirtualHost centos8.cyberciti.biz:443> ### Log files # ErrorLog logs/ssl_error_log TransferLog logs/ssl_access_log LogLevel warn SSLEngine on ### No more SSL3/2 # SSLProtocol all -SSLv3 SSLHonorCipherOrder on SSLCompression off SSLSessionTickets off SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS ### Path to certs # SSLCertificateFile /etc/httpd/ssl/cyberciti.biz/centos8.cyberciti.biz.cer SSLCertificateKeyFile /etc/httpd/ssl/cyberciti.biz/centos8.cyberciti.biz.key #Forward Secrecy & Diffie Hellman ephemeral parameters SSLOpenSSLConfCmd DHParameters "/etc/httpd/ssl/cyberciti.biz/dhparams.pem" # HSTS (mod_headers is required) (15768000 seconds = 6 months) Header always set Strict-Transport-Security "max-age=15768000" <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory "/var/www/cgi-bin"> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-5]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 CustomLog logs/ssl_request_log \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"</VirtualHost> ### OCSP stapling configSSLUseStapling onSSLStaplingResponderTimeout 5SSLStaplingReturnResponderErrors offSSLStaplingCache shmcb:/var/run/ocsp(128000)نکتهای برای امنتر شدن تنظیمات SSL
شما میتونید برای اینکه SSL امنتری داشته باشید، در کانفیگ آپاچی SSL و TLS ورژن 1/1.1 را غیر فعال کنید. کانفیگ زیر تقریبا برای همه سیستمهایی که وبسرور آپاچی را با اهداف و کاربران گوناگونی اجرا میکنند، توصیه میشود:SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1SSLHonorCipherOrder offSSLCipherSuite 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 رایگان
فرمان زیر را اجرا کنید:# acme.sh --installcert -d centos8.cyberciti.biz \--keypath /etc/httpd/ssl/cyberciti.biz/centos8.cyberciti.biz.key \--fullchainpath /etc/httpd/ssl/cyberciti.biz/centos8.cyberciti.biz.cer \--reloadcmd 'systemctl reload httpd'
گام هشتم - کانفیگ فایروال CentOS 8 برای باز کردن پورت تیسیپی 443 (HTTPS)
حالا که وبسرور آپاچی ما با mod_ssl بالا آمده و در حال اجرا است، وقت این رسیده که TCP port 443 را روی سرور CentOS 8 باز کنیم. بدین ترتیب کلاینتها امکان اتصال به این پورت را خواهند یافت. rule های تعریف شده در فایروال را بصورت زیر بروز رسانی کنید:$ sudo firewall-cmd --permanent --add-service=https --zone=public$ sudo firewall-cmd --reload$ sudo firewall-cmd --list-services --zone=public$ sudo ss -tulpn$ sudo ss -tulpn | egrep ':(80|443)'tcp LISTEN 0 128 *:443 *:* users:(("httpd",pid=12079,fd=9),("httpd",pid=12078,fd=9),("httpd",pid=12077,fd=9),("httpd",pid=10782,fd=9))tcp LISTEN 0 128 *:80 *:* users:(("httpd",pid=12079,fd=4),("httpd",pid=12078,fd=4),("httpd",pid=12077,fd=4),("httpd",pid=10782,fd=4))گام نهم - تست
یک صفحه تست با نام index.html بسازید:sudo vi /var/www/html/index.html<html> <head> <title>CentOS8 Apache test server - nixCraft</title> </head> <body> <h2>Hello, world!</h2> <p> I run on CentOS Linux 8. I act as a testbed for nixCraft test lab. I exist to help sysadmins and developers to help learn CentOS 8. </p> <hr> <small>Apache 2 server running on CentOS 8 with Let's Encrypt</small> </body> </html>
داخل SSLlabs هم یک تست بگیرید:

گام دهم - دستورات acme.sh
برای لیست کردن تمام گواهینامههای SSL/TLS دستور زیر را اجرا کنید:# acme.sh --list# acme.sh --renew -d server2.ariaservice.net# crontab -l38 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null# acme.sh --upgrade# acme.sh --help | more



