اطلاعیه

بستن
هنوز اطلاعیه ای در دست نیست.

آموزش نصب Let's Encrypt SSL Certificate در Nginx روی RHEL/CentOS 7/6

بستن
X
 
  • فیلتر کردن
  • زمان
  • نمایش
Clear All
پست های جدید

    آموزش نصب Let's Encrypt SSL Certificate در Nginx روی RHEL/CentOS 7/6

    در دنباله ی سری پست های let's encrypt مربوط به Apache یا Nginx با استفاده ازماژول SSL/TLS، در این پست به نحوه ایجاد و نصب یک گواهینامه SSL/TLS رایگان از مرکز Let’s Encrypt Certificate Authority خواهیم پرداخت که به منظور امن کردن تعاملات http در وب سرور nginx و روی توزیع های CentOS/RHEL 7/6 و Fedora مورد استفاده قرار می گیرد.


    همچنین توصیه میشود مطالعه کنید.

    نصب و راه اندازی Let's Encrypt SSL روی وب سرور آپاچی در CentOS 8

    نصب و راه اندازی Let's Encrypt SSL Certificate روی Apache در RHEL − CentOS 7/6 و Fedora 7/6 (به زودی)

    آموزش نصب LEMP به همراه MariaDB و PHP-FPM در اوبونتو 16

    آموزش نصب LEMP به همراه MariaDB و PHP-FPM در دبیان 9

    آموزش نصب LEMP به همراه MariaDB و PHP-FPM در RedHat/CentOS 7.0 و Fedora 24



    تجهیزات مورد نیاز :

    • دامنه (domain name) ثبت شده بهمراه A DNS record های valid برای ارتباط با ip public سرور
    • وب سرور نصب شده ی Nginx که ssl و Virtual Hosts آن فعال باشد. (تنها برای هاست چند دامینی- multiple domains یا subdomains hosting)

    محیط تستی ما به این صورت است :

    برای بزرگتر شدن عکس روی آن کلیک کنید  نام:	Setup-HTTPS-with-Lets-Encrypt-on-Nginx-linux-zone-forums.png نمایش ها:	1 اندازه:	14.6 KB شناسه:	21771


    مرحله 1 : نصب وب سرور Nginx

    1 - در وهله اول اگرسرویس nginx را روی سرور نصب ندارید از دستورات زیر با دسترسی root اقدام به نصب وب سرور nginx از طریق ریپازیتوری Epel نمایید.
    کد PHP:
    # yum install epel-release
    # yum install nginx 

    مرحله 2 - دانلود یا کلون Let’s Encrypt Certificate :

    2 - سریعترین روش برای نصب کلاینت Let’s Encrypt روی سیستم های لینوکسی از طریق کپی کردن پکیج ها از ریپازیتوری github می باشد.

    ابتدا کلاینت git را با استفاده از دستور زیر روی سیستم نصب میکنیم :
    کد PHP:
    # yum install git 
    3- بعد از نصب کلاینت git، وارد دایرکتوری /opt شده و گواهینامه نرم افزار Let’s Encrypt را با استفاده از دستور زیر clone میکنیم .
    کد PHP:
    # cd /opt
    # git clone https://github.com/letsencrypt/letsencrypt 

    مرحله 3 - ایجاد یک Let’s Encrypt SSL Certificate رایگان برای nginx

    4 - فرایند بدست آوردن یک SSL/TLS Certificate رایگان برای nginx گواهینامه رایگان Let’s Encrypt را به واسطه استفاده از پلاگین Let’s Encrypt Standalone انجام میشود .

    در این روش نیاز است که در طول مدت زمانی که کلاینت Let’s Encrypt در حال اعتبار سنجی هویت سرور است و certificate ها را ایجاد میکند ، پورت 80 آزاد باشد .

    بنابراین اگر nginx از قبل در حال اجرا بود، سرویس آن را با استفاده از دستور زیر stop کنید و دستور ss را برای اطمینان از اینکه پورت 80 در شبکه در حال استفاده نباشد اجرا میکنیم :
    کد PHP:
    # service nginx stop
    # systemctl stop nginx
    # ss -tln 
    برای بزرگتر شدن عکس روی آن کلیک کنید  نام:	Check-Listening-Network-Ports-linux-zone-forums.png نمایش ها:	1 اندازه:	5.8 KB شناسه:	21772


    5 - اکنون زمان گرفتن یک SSL Certificate رایگان از Let’s Encrypt است. به دایرکتوری نصب Let’s Encrypt وارد شوید و دستور letsencrypt-auto را با آپشن --standalone و گزینه ی -d برای هر domain یا subdomain که میخواهید برای آن یک Certificate ایجاد کنید ، همانند دستور زیر استفاده کنید :
    کد PHP:
    # cd /opt
    # ./letsencrypt-auto certonly --standalone -d your_domain.tld -d www.yourdomain.tld 
    برای بزرگتر شدن عکس روی آن کلیک کنید  نام:	Obtain-Free-Lets-Encrypt-SSL-Certificate-for-Website-linux-zone-forums.png نمایش ها:	1 اندازه:	4.7 KB شناسه:	21773

    6 - بعد از نصب پکیج ها و پیش نیاز ها (dependency ها) روی ماشین، Let’s Encrypt از شما میخواهد تا آدرس ایمیل مان را وارد کنیم. این ایمیل زمانی استفاده میشود که ما کلید رمزنگاری را گم کردیم و نیاز به ریکاوری کلید داریم .

    برای بزرگتر شدن عکس روی آن کلیک کنید  نام:	Add-Email-Address-for-Lets-Encrypt-linux-zone-forums.png نمایش ها:	1 اندازه:	1.4 KB شناسه:	21774

    7 - سپس به مرحله تأیید license terms می رسیم و enter را میزنیم:

    برای بزرگتر شدن عکس روی آن کلیک کنید  نام:	Agree-Lets-Encrypt-License-linux-zone-forums.png نمایش ها:	1 اندازه:	2.8 KB شناسه:	21761

    8 - در نهایت اگر همه چیز به درستی پیش رفته باشد پیغامی برای ما نمایش داده میشود با این مظمون که با موفقیت certificate ما نصب شده هست. همچنین این پیغام اطلاعات دیگری مانند زمان منقضی شدن certificate را نیز نمایش می دهد.

    برای بزرگتر شدن عکس روی آن کلیک کنید  نام:	Letsencrypt-Installation-Finishes-linux-zone-forums.png نمایش ها:	1 اندازه:	5.3 KB شناسه:	21762


    مرحله 4 - نصب Let’s Encrypt SSL Certificate در nginx

    9 - اکنون که شما صاحب یک SSL/TLS Certificate رایگان شدید زمان آن است که این Certificate را در وب سرور nginx خود نصب کنید تا domain تان از آن استفاده کند.
    همه ی SSL Certificate های جدید در مسیر /etc/letsencrypt/live/ و در دایرکتوری ای هم نام domain تان قرار می گیرند.برای نمایش لیست فایلهای certificate مربوط به domain تان و تشخیص آنها از دستور ls استفاده می کنیم :
    کد PHP:
    # sudo ls /etc/letsencrypt/live/
    # sudo ls -al /etc/letsencrypt/live/your_domain.tld 
    برای بزرگتر شدن عکس روی آن کلیک کنید  نام:	Letsencrypt-SSL-Certificates-linux-zone-forums.png نمایش ها:	1 اندازه:	6.4 KB شناسه:	21763


    10 - برای نصب فایلهای certificate در nginx و فعال کردن SSL ابتدا فایل /etc/nginx/nginx.conf را برای ویرایش باز کنید وعبارات زیر را بعد از آخرین خط listen از server block اضافه کنید. به مثال زیر توجه کنید:
    کد PHP:
    # vi /etc/nginx/nginx.conf 
    Nginx SSL block excerpt :

    کد PHP:
    # SSL configuration
    listen 443 ssl default_server;
    ssl_certificate /etc/letsencrypt/live/your_domain.tld/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your_domain.tld/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'
    برای بزرگتر شدن عکس روی آن کلیک کنید  نام:	Enable-HTTPS-on-Nginx-Configuration-linux-zone-forums.png نمایش ها:	1 اندازه:	17.1 KB شناسه:	21764


    string مربوط به domain name را برای اینکه SSL certificates با domain خودتان مچ شود، جایگزین کنید.

    11- در نهایت وب سرور nginx را restart کنید. بعد از ریستارت می توانید با استفاده پورت 443 یا پروتکل https سایت خود را مشاهده کنید : https://yourdomain .که اگر تمامی موارد را بدرستی انجام داده باشید، بدون خطای certificate می توانید صفحه مد نظر خود را مشاهده کنید.
    کد PHP:
    # systemctl restart nginx
    # service nginx restart 
    12- برای تست SSL/TLS certificate خود میتوانید به لینک زیر وارد شوید. و پروتکل ssl/tls خود را مورد تست و آزمایش قرار دهید.
    کد PHP:
    https://www.ssllabs.com/ssltest/analyze.html 
    برای بزرگتر شدن عکس روی آن کلیک کنید  نام:	Verify-Lets-Encrypt-Certificiate-on-Domain-linux-zone-forums.png نمایش ها:	1 اندازه:	33.9 KB شناسه:	21765


    برای بزرگتر شدن عکس روی آن کلیک کنید  نام:	Verify-HTTPS-SSL-Certificate-on-Domain-linux-zone-forums.png نمایش ها:	1 اندازه:	40.4 KB شناسه:	21766


    13- در مواردی که شما متوجه شدید که سرور تان از رمز نگاری ضعیف Diffie-Hellman و rating کلی درجه B پشتیبانی میکند باید یک رمز جدید Diffie-Hellman در دایرکتوری /etc/nginx/ssl/ ایجاد کنید که بمنظور محافظت از سرورتان در مقابل حملات Logjam استفاده میشود و برای آن دستورات زیر را اجرا میکینیم :
    کد PHP:
    # mkdir /etc/nginx/ssl
    # cd /etc/nginx/ssl
    # openssl dhparam -out dhparams.pem 4096 
    در این مثال ما از یک رمز 4096 بیتی استفاده کردیم که در حقیقت مدت زمان زیادی طول می کشد تا ایجاد شود و یک overhead اضافی روی روی سرورتان و روی SSL handshake می اندازد.

    دراینجا نیازی به استفاده از یک کلید انقدر طولانی نیست و شما با یک کلید 2048 بیتی امنیت خواهید داشت.


    14 - بعد از اینکه کلید DH ساخته شد فایل کانفیگ nginx را باز کنید و عبارات زیر را بعد از خط ssl_ciphers اضافه کنید تا علاوه بر اضافه کردن کلید DH، سطوح امنیتی دامین تان به رتبه ی A+ افزایش یابد.
    کد PHP:
    # vi /etc/nginx/nginx.conf 
    خطوط زیر را به nginx.conf اضافه کنید :
    کد PHP:
    ssl_dhparam /etc/nginx/ssl/dhparams.pem;
    ssl_session_timeout 30m;
    ssl_session_cache shared:SSL:10m;
    ssl_buffer_size 8k;
    add_header Strict-Transport-Security max-age=31536000
    برای بزرگتر شدن عکس روی آن کلیک کنید  نام:	Add-Diffie-Hellman-Ciphers-to-nginx-Configuration-linux-zone-forums.png نمایش ها:	1 اندازه:	12.0 KB شناسه:	21767


    15 - وب سرور nginx را ریستارت میکنیم تا تنظیمات اعمال شود و SSL certificate تان را با پاک کردن کش نتیجه قبلی از لینک ذکر شده در بالا را دوباره تست میکنیم :
    کد PHP:
    # systemctl restart nginx
    # service nginx restart 
    برای بزرگتر شدن عکس روی آن کلیک کنید  نام:	Verify-Letsencrypt-SSL-Certificates-linux-zone-forums.png نمایش ها:	1 اندازه:	34.8 KB شناسه:	21768


    مرحله 5 - جدید کردن اتوماتیک Lets Encrypt SSL Certificates رایگان در nginx

    16 - Let’s Encrypt CA در حقیقت SSL/TLS certificates های رایگان و معتبر به مدت 90 روز را منتشر میکند. certificate ها را میتوان به صورت دستی دوباره جدید کرد و قبل از انقضاء با استفاده از پلاگین web root و بدون توقف در وب سرورتان با استفاده از دستور زیر آنرا اعمال کنید.
    کد PHP:
    # ./letsencrypt-auto certonly -a webroot --agree-tos --renew-by-default --webroot-path=/usr/share/nginx/html/ -d yourdomain.tld -d www.yourdomain.tld
    # systemctl reload nginx 
    برای بزرگتر شدن عکس روی آن کلیک کنید  نام:	Renew-Lets-Encrypt-SSL-Certificate-on-Nginx-linux-zone-forums.png نمایش ها:	1 اندازه:	10.7 KB شناسه:	21769

    زمانیکه دستور بالا را اجرا میکنید مطمئن شوید که webroot-path را برای match شدن document root سرور web تان جایگزین کنید که توسط عبارت nginx root مشخص میشود.

    17 - به منظور جدید کردن اتوماتیک certificate قبل از اینکه expire شود این bash script را از github erikaheidi بسازید و در دایرکتوری /usr/local/bin قرار دهید و محتوای زیر را در آن کپی کنید. (اسکریپت در حد بالایی به منظور تاثیر روی nginx تغییر یافته است)
    کد PHP:
    # vi /usr/local/bin/cert-renew 
    در فایل cert-renew محتوای زیر را اضافه کنید :
    کد PHP:

    #!/bin/bash

    webpath='/usr/share/nginx/html/'
    domain=$1
    le_path
    ='/opt/letsencrypt'
    le_conf='/etc/letsencrypt'

    exp_limit=30;

    get_domain_list(){
            
    certdomain=$1

            config_file
    ="$le_conf/renewal/$certdomain.conf"

            
    if [ ! -f $config_file ] ; then
                    
    echo "[ERROR] The config file for the certificate $certdomain was not found."
                    
    exit 1;
            
    fi

            domains
    =$(grep --only-matching --perl-regex "(?<=domains \= ).*" "${config_file}")
            
    last_char=$(echo "${domains}awk '{print substr($0,length,1)}')

            if [ 
    "${last_char}"," ]; then
                    domains
    =$(echo "${domains}|awk '{print substr($0, 1, length-1)}')
            
    fi

            
    echo $domains;
    }

    if [ -
    "$domain] ; then
            
    echo "[ERROR] you must provide the domain name for the certificate renewal."
            
    exit 1;
    fi

    cert_file
    ="/etc/letsencrypt/live/$domain/fullchain.pem"

    if [ ! -f $cert_file ]; then
            
    echo "[ERROR] certificate file not found for domain $domain."
            
    exit 1;
    fi

    exp
    =$(date -"`openssl x509 -in $cert_file -text -noout|grep "Not After"|cut -c 25-`" +%s)
    datenow=$(date -"now" +%s)
    days_exp=$(echo \( $exp $datenow \) / 86400 |bc)

    echo 
    "Checking expiration date for $domain..."

    if [ "$days_exp-gt "$exp_limit] ; then
            
    echo "The certificate is up to date, no need for renewal ($days_exp days left)."
            
    exit 0;
    else
            echo 
    "The certificate for $domain is about to expire soon. Starting renewal request..."
            
    domain_list=$( get_domain_list $domain )
    "$le_path"/letsencrypt-auto certonly -a webroot --agree-tos --renew-by-default --webroot-path=”$webpath” --domains "${domain_list}"
            
    echo "Reloading Nginx..."
    sudo systemctl reload nginx
            
    echo "Renewal process finished for domain $domain"
            
    exit 0;
    fi 
    18 - متغییر $webpath از ابتدای اسکریپت را به منظور match شدن با document root در nginx تان جایگزین کنید. مطمئن شوید که اسکریپت قابل اجراست و bc calculator روی سیستم تان نصب است که میتوانید از دستورات زیر استفاده کنید.
    کد PHP:
    # chmod +x /usr/local/bin/cert-renew
    # yum install bc 
    شما میتوانید این اسکریپت را در برابر دامین خود و با استفاده از دستور زیر تست کنید.
    کد PHP:
    # /usr/local/bin/cert-renew yourdomain.tld 
    برای بزرگتر شدن عکس روی آن کلیک کنید  نام:	Check-SSL-Expiry-Date-on-Domain-linux-zone-forums.png نمایش ها:	1 اندازه:	4.3 KB شناسه:	21770


    19 - در نهایت برای اجرا کردن پروسه رفرش certificate به صورت اتوماتیک میتوانید یک cronjob جدید اضافه کنید که هر هفته به منظور update کردن certificate در طول 30 روز قبل از تاریخ انقضای آن اجرا شود.
    کد PHP:
    # crontab -e 
    خطوط زیر را پایان فایل اضافه کنید.
    کد PHP:
    @weekly /usr/local/bin/cert-renew your_domain.tld >> /var/log/your_domain.tld-renew.log 2>&
    اکنون سرور nginx میتواند محتوای وب را به صورت کاملا امن و با یک SSL/TLS Let’s Encrypt certificate رایگان روی وب سایت تان نمایش دهد.

    موفق باشید.
    معصومه وحید
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 11-01-2021, 12:55 AM.
    Instagram : https://www.instagram.com/iranlinuxforum

    Voip Trainer - Asterisk - Elastix - Agi Programming- NewRock

    Voip Expert :ASTERISK-ELASTIX-NewRock Certified-With Experience of Working With
    Sangoma-Digium-Openvox-Synway-Atcom-Quintum Tenor-Polycom-Yealink-Rtx-Snom
    Cisco Collaboration - CME-CUCM-CUPs-CUC-WEBEX
    LPI ( Fundamental - LPI1 and LPI2 ) - Monitoring: ZABBIX-VOIPMONITOR-NAGIOS - CCNA

    Linkedin Profile : https://www.linkedin.com/in/masuma-vahid-26b17b66/

درباره انجمن منطقه لینوکسی ها

انجمن منطقه لینوکسی ها با هدف ارتقاء سطح علمی کاربران در سطح جهانی و همچنین کمک به بالا بردن سطح علمی عمومی در زمینه های تخصصی فوق پایه گذاری شده است. انجمن منطقه لینوکسی ها از طریق کارشناسان و متخصصان پاسخگوی سوالات گوناگون کاربران مبتدی یا پیشرفته میباشد تا حد امکان تلاش شده که محیطی متنوع و کاربر پسند و به دور از هرگونه حاشیه جهت فعالیت کاربران در این انجمن ایجاد شود. لذا ما به صورت مستمر برای پیشرفت کمی و کیفی محتوی و اطلاعات انجمنمان میکوشیم که این برای ما ارزشمند و حائز اهمیت است. کلیه حقوق،اطلاعات و مقالات در این انجمن متعلق به سایت منطقه لینوکسی ها میباشد، و هرگونه نسخه برداری بدون ذکر منبع مورد پیگرد قانونی خواهد شد.

شبکه های اجتماعی
در حال انجام ...
X