RHEL/CentOS 7/6'da Güvenli Apache'ye Let's Encrypt SSL Sertifikası Nasıl Kurulur


SSL/TLS ücretsiz sertifikalarıyla ilgili son Let's Encrypt eğitimini genişleterek, bu makalede Apache< için Let's Encrypt Sertifika Yetkilisi tarafından verilen ücretsiz SSL/TLS sertifikalarının nasıl alınacağını ve kurulacağını göstereceğiz. CentOS/RHEL 7/6 ve Fedora dağıtımlarında da web sunucusu.

Let's Encrypt for Apache'yi Debian ve Ubuntu'ya kurmak istiyorsanız aşağıdaki kılavuzu izleyin:

Debian ve Ubuntu'da Apache'yi Güvenli Hale Getirmek için Let's Encrypt Kurulumu

Örnek Ortamın Test Edilmesi

Gereksinimler

  1. Sunucunuzun genel IP Adresini işaret edecek geçerli A kayıtlarına sahip kayıtlı bir alan adı.
  2. Birden fazla alan adı veya alt alan adı barındırmanız durumunda, SSL modülü etkinleştirilmiş ve Sanal Barındırma etkinleştirilmiş olarak kurulan Apache sunucusu.

Adım 1: Apache Web Sunucusunu Kurun

1. Henüz kurulmamışsa, httpd arka plan programı aşağıdaki komut çalıştırılarak kurulabilir:

yum install httpd

2. Let’s encrypt yazılımının Apache ile çalışabilmesi için aşağıdaki komutu vererek SSL/TLS modülünün kurulu olduğundan emin olun:

yum -y install mod_ssl

3. Son olarak Apache sunucusunu aşağıdaki komutla başlatın:

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

Adım 2: Let’s Encrypt SSL Sertifikasını Yükleyin

4. Let's Encrypt istemcisini kurmanın en basit yöntemi, dosya sisteminizdeki github deposunu klonlamaktır. Git'i sisteminize kurmak için aşağıdaki komutla Epel depolarını etkinleştirmelisiniz.

yum install epel-release

5. Epel depoları sisteminize eklendikten sonra devam edin ve aşağıdaki komutu çalıştırarak git istemcisini yükleyin:

yum install git

6. Şimdi Let's Encrypt ile başa çıkmak için gerekli tüm bağımlılıkları yükledikten sonra /usr/local/ dizinine gidin ve Let's Encrypt istemci formunu çekmeye başlayın aşağıdaki komutla resmi github deposu:

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

3. Adım: Apache için Ücretsiz Let’s Encrypt SSL Sertifikası Alın

7. Apache için ücretsiz bir Let's Encrypt Sertifikası edinme süreci, Apache eklentisi sayesinde CentOS/RHEL için otomatikleştirilmiştir.

SSL Sertifikası alabilmek için Let’s Encrypt script komutunu çalıştıralım. /usr/local/letsencrypt adresinden Let's Encrypt kurulum dizinine gidin ve --apache seçeneğini ve letsencrypt-auto komutunu sağlayarak letsencrypt-auto komutunu çalıştırın. Bir sertifikaya ihtiyacınız olan her alt alan adı için-d bayrağını kullanın.

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

8. Kayıp anahtarınızı kurtarmak veya acil bildirimler için Let's Encrypt tarafından kullanılacak e-posta adresini girin ve devam etmek için Enter'a basın.

9. Enter tuşuna basarak lisans koşullarını kabul edin.

10. CentOS/RHEL'de varsayılan olarak Apache sunucusu, etkin ana bilgisayarlar için dizinleri kullanılabilir (etkin olmayan) ana bilgisayarlardan ayırma kavramını Debian olarak kullanmaz. güçlü>tabanlı dağıtım yapın.

Ayrıca sanal barındırma varsayılan olarak devre dışıdır. Sunucunun adını (SunucuAdı) belirten Apache ifadesi, SSL yapılandırma dosyasında mevcut değil.

Bu yönergeyi etkinleştirmek için Let's Encrypt sizden bir sanal ana bilgisayar seçmenizi isteyecektir. Kullanılabilir bir Vhost bulamadığı için Let's Encrypt istemcisi tarafından otomatik olarak değiştirilecek ssl.conf dosyasını seçin ve devam etmek için Enter tuşuna basın.

11. Ardından, HTTP istekleri için Kolay yöntemini seçin ve ilerlemek için Enter'a basın.

12. Son olarak, her şey yolunda giderse ekranda bir tebrik mesajı görüntülenmelidir. İstemi serbest bırakmak için Enter'a basın.

Bu kadar! Alanınız için başarıyla bir SSL/TLS sertifikası yayınladınız. Artık HTTPS protokolünü kullanarak web sitenize göz atmaya başlayabilirsiniz.

4. Adım: Alan Adında Let's Encryption'ı Ücretsiz Test Edin

13. Alan adınızın SSL/TLS anlaşmasının doğruluğunu test etmek için aşağıdaki bağlantıyı ziyaret edin ve sertifikanızı alanınızda test edin.

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

14. Yapılan testlerde alan adınızın güvenlik açığına ilişkin bir dizi rapor alırsanız bu güvenlik açıklarını acilen gidermeniz gerekir.

Genel olarak C sınıfı derecelendirmesi alan adınızı son derece güvensiz hale getirir. Bu güvenlik sorunlarını düzeltmek için Apache SSL yapılandırma dosyasını açın ve aşağıdaki değişiklikleri yapın:

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

SSLProtocol deyimini içeren satırı arayın ve satırın sonuna -SSLv3 ekleyin.

Dosyanın derinliklerine inin, SSLCipherSuite ile satırı arayın ve önüne bir # koyarak yorum yapın ve bu satırın altına aşağıdaki içeriği ekleyin:

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. Yukarıdaki değişikliklerin tümünü yaptıktan sonra dosyayı kaydedip kapatın, ardından değişiklikleri uygulamak için Apache arka plan programını yeniden başlatın.

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

16. Şimdi yukarıdaki aynı bağlantıyı ziyaret ederek alan adı şifrelemenizin durumunu tekrar test edin. Yeniden testler gerçekleştirmek için web sitesindeki Önbelleği temizle bağlantısına tıklayın.

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

Artık A sınıfı bir genel derecelendirme almalısınız; bu, alan adınızın yüksek düzeyde güvenli olduğu anlamına gelir.

Adım 4: Apache'de Let's Encrypt Sertifikalarını Otomatik Yenileyin

17. Let's Encrypt yazılımının bu beta sürümü, son kullanma tarihi 90 gün sonra olan sertifikaları yayınlar. Bu nedenle, SSL sertifikasını yenilemek için, letsencrypt-auto komutunu son kullanma tarihinden önce, ilk sertifikayı almak için kullanılan seçeneklerin ve işaretlerin aynısıyla yeniden çalıştırmanız gerekir.

Sertifikanın manuel olarak nasıl yenileneceğine ilişkin bir örnek aşağıda sunulmuştur.

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

18. Bu işlemi otomatikleştirmek için, github erikaheidi tarafından sağlanan aşağıdaki bash betiğini /usr/local/bin/ dizininde aşağıdaki içerikle oluşturun. (komut dosyası, letsencrypt kurulum dizinimizi yansıtacak şekilde biraz değiştirildi).

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

Aşağıdaki içeriği le-renew-centos dosyasına ekleyin:

!/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. Komut dosyasına yürütme izinleri verin, bc paketini yükleyin ve test etmek için komut dosyasını çalıştırın. Komut dosyası için alan adınızı konumsal bir parametre olarak kullanın. Bu adımı gerçekleştirmek için aşağıdaki komutları verin:

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

20. Son olarak, Linux zamanlamasını kullanarak, betiği iki ayda bir çalıştırmak için yeni bir cron işi ekleyin, böylece sertifikanızın son kullanma tarihinden önce güncelleneceğinden emin olun.

crontab -e

Dosyanın en altına aşağıdaki satırı ekleyin.


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

Bu kadar! CentOS/RHEL sistemi üzerinde çalışan Apache sunucunuz artık ücretsiz bir Let's Encrypt SSL sertifikası kullanarak SSL içeriğini sunuyor.