Πώς να εγκαταστήσετε το Lets Encrypt SSL Certificate για να ασφαλίσετε τον Apache στο RHEL/CentOS 7/6


Επεκτείνοντας το τελευταίο εκπαιδευτικό πρόγραμμα Let's Encrypt σχετικά με τα δωρεάν πιστοποιητικά SSL/TLS, σε αυτό το άρθρο θα δείξουμε πώς μπορείτε να αποκτήσετε και να εγκαταστήσετε δωρεάν πιστοποιητικά SSL/TLS που εκδίδονται από την Let's Encrypt Certificate Authority για Apache< διακομιστής ιστού σε διανομές CentOS/RHEL 7/6 και Fedora επίσης.

Αν θέλετε να εγκαταστήσετε το Let’s Encrypt for Apache σε Debian και Ubuntu, ακολουθήστε αυτόν τον παρακάτω οδηγό:

Δοκιμαστικό Περιβάλλον Δείγματος

Απαιτήσεις

  1. Ένα καταχωρισμένο όνομα τομέα με έγκυρες εγγραφές A για να οδηγεί πίσω στη δημόσια διεύθυνση IP του διακομιστή σας.
  2. Διακομιστής Apache εγκατεστημένος με ενεργοποιημένη τη μονάδα SSL και ενεργοποιημένη την εικονική φιλοξενία σε περίπτωση που φιλοξενείτε πολλούς τομείς ή υποτομείς.

Βήμα 1: Εγκαταστήστε τον διακομιστή Web Apache

1. Εάν δεν είναι ήδη εγκατεστημένο, το httpd daemon μπορεί να εγκατασταθεί εκδίδοντας την παρακάτω εντολή:

# yum install httpd

2. Προκειμένου το Let’s encrypt software να λειτουργεί με τον Apache, βεβαιωθείτε ότι η λειτουργική μονάδα SSL/TLS είναι εγκατεστημένη εκδίδοντας την παρακάτω εντολή:

# yum -y install mod_ssl

3. Τέλος, ξεκινήστε τον διακομιστή Apache με την ακόλουθη εντολή:

# systemctl start httpd.service          [On RHEL/CentOS 7]
# service httpd start                    [On RHEL/CentOS 6]

Βήμα 2: Εγκαταστήστε το Let’s Encrypt SSL Certificate

4. Η απλούστερη μέθοδος εγκατάστασης του προγράμματος-πελάτη Let’s Encrypt είναι η κλωνοποίηση του αποθετηρίου github στο σύστημα αρχείων σας. Για να εγκαταστήσετε το git στο σύστημά σας πρέπει να ενεργοποιήσετε τα αποθετήρια Epel με την ακόλουθη εντολή.

# yum install epel-release

5. Μόλις προστεθούν τα repos Epel στο σύστημά σας, προχωρήστε και εγκαταστήστε το πρόγραμμα-πελάτη git εκτελώντας την παρακάτω εντολή:

# yum install git

6. Τώρα, αφού εγκαταστήσετε όλες τις απαιτούμενες εξαρτήσεις για να αντιμετωπίσετε το Let's Encrypt, μεταβείτε στον κατάλογο /usr/local/ και ξεκινήστε να τραβάτε τη φόρμα πελάτη Let's Encrypt το επίσημο αποθετήριο github με την ακόλουθη εντολή:

# cd /usr/local/
# git clone https://github.com/letsencrypt/letsencrypt

Βήμα 3: Αποκτήστε ένα δωρεάν πιστοποιητικό Let’s Encrypt SSL για Apache

7. Η διαδικασία απόκτησης ενός δωρεάν πιστοποιητικού Let’s Encrypt για Apache είναι αυτοματοποιημένη για το CentOS/RHEL χάρη στην προσθήκη apache.

Ας εκτελέσουμε την εντολή σεναρίου Let’s Encrypt για να αποκτήσουμε ένα πιστοποιητικό SSL. Μεταβείτε στον κατάλογο εγκατάστασης Let's Encrypt από το /usr/local/letsencrypt και εκτελέστε την εντολή letsencrypt-auto παρέχοντας την επιλογή --apache και την επιλογή -d σημαία για κάθε υποτομέα που χρειάζεστε πιστοποιητικό.

# cd /usr/local/letsencrypt
# ./letsencrypt-auto --apache -d your_domain.tld 

8. Δώστε τη διεύθυνση email που θα χρησιμοποιηθεί από το Let’s Encrypt για την ανάκτηση του χαμένου κλειδιού σας ή για επείγουσες ειδοποιήσεις και πατήστε Enter για να συνεχίσετε.

9. Συμφωνήστε τους όρους της άδειας πατώντας το πλήκτρο Enter.

10. Στο CentOS/RHEL, από προεπιλογή, ο διακομιστής Apache δεν χρησιμοποιεί την έννοια του διαχωρισμού των καταλόγων για ενεργοποιημένους κεντρικούς υπολογιστές από τους διαθέσιμους (ανενεργούς) κεντρικούς υπολογιστές ως Debian βασισμένη διανομή κάνει.

Επίσης, η εικονική φιλοξενία είναι απενεργοποιημένη από προεπιλογή. Η δήλωση Apache που καθορίζει το όνομα του διακομιστή (Όνομα διακομιστή) δεν υπάρχει στο αρχείο διαμόρφωσης SSL.

Για να ενεργοποιήσετε αυτήν την οδηγία, το Let’s Encrypt θα σας ζητήσει να επιλέξετε έναν εικονικό κεντρικό υπολογιστή. Επειδή δεν βρίσκει διαθέσιμο Vhost, επιλέξτε το αρχείο ssl.conf που θα τροποποιηθεί αυτόματα από τον πελάτη Let’s Encrypt και πατήστε Enter για να συνεχίσετε.

11. Στη συνέχεια, επιλέξτε τη μέθοδο Εύκολη για αιτήματα HTTP και πατήστε Enter για να προχωρήσετε.

12. Τέλος, εάν όλα πήγαν ομαλά, θα πρέπει να εμφανιστεί ένα συγχαρητήριο μήνυμα στην οθόνη. Πατήστε Enter για να απελευθερώσετε το μήνυμα προτροπής.

Αυτό είναι! Έχετε εκδώσει επιτυχώς ένα πιστοποιητικό SSL/TLS για τον τομέα σας. Τώρα μπορείτε να ξεκινήσετε την περιήγηση στον ιστότοπό σας χρησιμοποιώντας το πρωτόκολλο HTTPS.

Βήμα 4: Δοκιμή Free Let’s Encrypt Encryption σε Domain

13. Για να ελέγξετε την ευθύτητα της χειραψίας SSL/TLS του τομέα σας, επισκεφτείτε τον παρακάτω σύνδεσμο και δοκιμάστε το πιστοποιητικό σας στον τομέα σας.

https://www.ssllabs.com/ssltest/analyze.html

14. Εάν λάβετε μια σειρά από αναφορές σχετικά με την ευπάθεια του τομέα σας στις δοκιμές που πραγματοποιήθηκαν, τότε θα πρέπει να διορθώσετε επειγόντως αυτές τις οπές ασφαλείας.

Μια συνολική βαθμολογία κατηγορίας C καθιστά τον τομέα σας πολύ ανασφαλή. Για να διορθώσετε αυτά τα προβλήματα ασφαλείας, ανοίξτε το αρχείο διαμόρφωσης Apache SSL και κάντε τις ακόλουθες αλλαγές:

# vi /etc/httpd/conf.d/ssl.conf

Αναζητήστε γραμμή με δήλωση SSLProtocol και προσθέστε -SSLv3 στο τέλος της γραμμής.

Πηγαίνετε βαθύτερα στο αρχείο, αναζητήστε και σχολιάστε τη γραμμή με το SSLCipherSuite τοποθετώντας ένα # μπροστά του και προσθέστε το ακόλουθο περιεχόμενο κάτω από αυτήν τη γραμμή:

SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLHonorCipherOrder     on
SSLOptions +StrictRequire

15. Αφού κάνετε όλες τις παραπάνω αλλαγές, αποθηκεύστε και κλείστε το αρχείο και, στη συνέχεια, επανεκκινήστε το Apache daemon για να εφαρμόσετε τις αλλαγές.

# systemctl restart httpd.service          [On RHEL/CentOS 7]
# service httpd restart                    [On RHEL/CentOS 6]

16. Τώρα, ελέγχει ξανά την κατάσταση της κρυπτογράφησης του τομέα σας, μεταβαίνοντας στον ίδιο σύνδεσμο όπως παραπάνω. Για να εκτελέσετε επαναληπτικές δοκιμές, πατήστε το σύνδεσμο Εκκαθάριση προσωρινής μνήμης από τον ιστότοπο.

https://www.ssllabs.com/ssltest/analyze.html 

Τώρα θα πρέπει να λάβετε μια συνολική βαθμολογία κατηγορίας A, που σημαίνει ότι ο τομέας σας είναι εξαιρετικά ασφαλής.

Βήμα 4: Αυτόματη ανανέωση Let’s Encrypt Certificates στον Apache

17. Αυτή η έκδοση beta του λογισμικού Let’s Encrypt εκδίδει πιστοποιητικά με ημερομηνία λήξης μετά από 90 ημέρες. Έτσι, για να ανανεώσετε το πιστοποιητικό SSL, πρέπει να εκτελέσετε ξανά την εντολή letsencrypt-auto πριν από την ημερομηνία λήξης, με τις ίδιες επιλογές και σημαίες που χρησιμοποιήθηκαν για την απόκτηση του αρχικού πιστοποιητικού.

Ένα παράδειγμα σχετικά με τον τρόπο μη αυτόματης ανανέωσης του πιστοποιητικού παρουσιάζεται παρακάτω.

# cd /usr/local/letsencrypt
# ./letsencrypt-auto certonly --apache --renew-by-default  -d your_domain.tld

18. Για να αυτοματοποιήσετε αυτήν τη διαδικασία, δημιουργήστε το ακόλουθο σενάριο bash που παρέχεται από το github erikaheidi, στον κατάλογο /usr/local/bin/ με το ακόλουθο περιεχόμενο. (το σενάριο έχει τροποποιηθεί ελαφρώς για να αντικατοπτρίζει τον κατάλογο εγκατάστασης letsencrypt).

# vi /usr/local/bin/le-renew-centos

Προσθέστε το ακόλουθο περιεχόμενο στο αρχείο le-renew-centos:

!/bin/bash

domain=$1
le_path='/usr/local/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 [ -z "$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 -d "`openssl x509 -in $cert_file -text -noout|grep "Not After"|cut -c 25-`" +%s)
datenow=$(date -d "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 --apache --renew-by-default --domains "${domain_list}"
        echo "Restarting Apache..."
        /usr/bin/systemctl restart httpd
        echo "Renewal process finished for domain $domain"
        exit 0;
fi

19. Παραχωρήστε δικαιώματα εκτέλεσης για το σενάριο, εγκαταστήστε το πακέτο bc και εκτελέστε το σενάριο για να το δοκιμάσετε. Χρησιμοποιήστε το όνομα τομέα σας ως παράμετρο θέσης για το σενάριο. Εκδώστε τις παρακάτω εντολές για να ολοκληρώσετε αυτό το βήμα:

# yum install bc
# chmod +x /usr/local/bin/le-renew-centos
# /usr/local/bin/le-renew-centos your_domain.tld

20. Τέλος, χρησιμοποιώντας τον προγραμματισμό Linux, προσθέστε μια νέα εργασία cron για να εκτελείται το σενάριο κάθε δύο μήνες, διασφαλίζοντας ότι το πιστοποιητικό σας θα ενημερώνεται πριν από την ημερομηνία λήξης.

# crontab -e

Προσθέστε την ακόλουθη γραμμή στο κάτω μέρος του αρχείου.

0 1 1 */2 * /usr/local/bin/le-renew-centos your_domain.tld >> /var/log/your_domain.tld-renew.log 2>&1

Αυτό είναι! Ο διακομιστής σας Apache που λειτουργεί πάνω από το σύστημα CentOS/RHEL εξυπηρετεί πλέον περιεχόμενο SSL χρησιμοποιώντας ένα δωρεάν πιστοποιητικό Let’s Encrypt SSL.