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
- Sunucunuzun genel IP Adresini işaret edecek geçerli
A
kayıtlarına sahip kayıtlı bir alan adı. - 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.