Takip et

acme-dns-certbot Kullanarak DNS Doğrulaması ile Let’s Encrypt Sertifikası Edinme Rehberi (Ubuntu 18.04)

acme-dns-certbot Kullanarak DNS Doğrulaması ile Let’s Encrypt Sertifikası Edinme Rehberi (Ubuntu 18.04) Giriş Günümüz internet dünyasında,

acme-dns-certbot Kullanarak DNS Doğrulaması ile Let’s Encrypt Sertifikası Edinme Rehberi (Ubuntu 18.04)

Giriş

Günümüz internet dünyasında, web siteleri ve uygulamaları için güvenli iletişimin önemi tartışılmazdır. HTTPS kullanımı, kullanıcı verilerinin şifrelenmesini sağlayarak gizliliği ve bütünlüğü korur, aynı zamanda web sitenizin güvenilirliğini artırır. Arama motorları da HTTPS kullanan siteleri önceliklendirmekte, bu da SEO açısından kritik bir faktör haline gelmektedir. Let’s Encrypt, bu güvenliğin herkes için erişilebilir olmasını sağlayan, ücretsiz, otomatik ve açık bir Sertifika Yetkilisi (CA) olarak öne çıkmaktadır.

Let’s Encrypt sertifikaları, domain sahipliğini doğrulamak için çeşitli yöntemler kullanır. Bunlar arasında en yaygın olanları HTTP-01 ve DNS-01 doğrulama yöntemleridir. HTTP-01, web sunucunuzun 80 veya 443 numaralı portlarından belirli bir dosyayı sunarak domainin kontrolünü kanıtlar. Ancak, bazı durumlarda bu yöntem uygun olmayabilir:
* Sunucunun 80 veya 443 numaralı portlarına dışarıdan erişim kısıtlıysa (örneğin, bir güvenlik duvarının arkasındaysa veya başka bir servis tarafından kullanılıyorsa).
* Sertifika alınacak servis bir web sunucusu değilse (örneğin, bir posta sunucusu, VPN sunucusu veya IoT cihazı).
Wildcard sertifika (.example.com) almak isteniyorsa. Wildcard sertifikalar yalnızca DNS-01 doğrulaması ile edinilebilir.

İşte bu noktada DNS-01 doğrulaması devreye girer. DNS-01 doğrulaması, Let’s Encrypt’in ACME sunucusunun, domaininize özel olarak oluşturulan bir TXT kaydını DNS sunucunuzda bulmasını gerektirir. Bu TXT kaydı, domainin kontrolünü kanıtlar. Geleneksel olarak, bu TXT kaydını manuel olarak eklemek veya certbot‘un belirli DNS sağlayıcıları (Cloudflare, AWS Route 53 vb.) için geliştirdiği eklentileri kullanmak mümkündür. Ancak, DNS sağlayıcınız bu eklentiler tarafından desteklenmiyorsa veya DNS kayıtlarını programatik olarak değiştirmek için bir API’ye sahip değilse, bu süreç karmaşık hale gelebilir.

Bu makalede, bu zorlukları aşmak için acme-dns ve acme-dns-certbot araçlarını kullanarak DNS-01 doğrulaması ile Let’s Encrypt wildcard veya standart sertifikaları nasıl edineceğinizi adım adım açıklayacağız. acme-dns, kendi özel ACME DNS sunucunuzu çalıştırmanıza olanak tanır ve bu sunucu, _acme-challenge alt alan adı için DNS isteklerini yanıtlar. acme-dns-certbot ise certbot ile acme-dns arasında bir köprü görevi görerek doğrulama sürecini otomatikleştirir. Bu kurulum, herhangi bir DNS sağlayıcısı ile çalışabilir, çünkü tek yapmanız gereken _acme-challenge alt alan adını acme-dns sunucunuza delege etmektir.

Bu rehber, Ubuntu 18.04 LTS işletim sistemi üzerinde gerçekleştirilecektir. Ancak, adımlar ve konseptler daha yeni Ubuntu sürümleri veya diğer Debian tabanlı sistemler için de büyük ölçüde benzerlik gösterecektir.

Ön Gereksinimler

Bu rehbere başlamadan önce aşağıdaki maddelerin hazır olduğundan emin olun:
* Ubuntu 18.04 LTS Sunucusu: Bir bulut sunucusu (VPS) veya fiziksel bir sunucu.
* Sudo Yetkileri: Komutları çalıştırmak için sudo yetkisine sahip bir kullanıcı.
* Bir Domain Adı: Sertifika almak istediğiniz bir domain adı (örneğin, example.com).
* DNS Sağlayıcısına Erişim: Domaininizin DNS kayıtlarını değiştirebilme yeteneği.
* Temel Linux Komut Satırı Bilgisi: Dosya oluşturma, düzenleme, servis yönetimi gibi temel komutlara aşinalık.
* Açık Portlar: Sunucunuzun güvenlik duvarında (firewall) 53/UDP portunun dışarıdan erişime açık olması gerekmektedir. acme-dns bu port üzerinden DNS sorgularını yanıtlayacaktır.

Adım 1: Certbot Kurulumu

Certbot, Let’s Encrypt sertifikalarını edinmek ve yönetmek için kullanılan resmi istemcidir. Ubuntu 18.04’te Certbot’u kurmanın en önerilen yolu Snap paket yöneticisini kullanmaktır.

Öncelikle, Snapd’nin yüklü olduğundan emin olun:

sudo apt update
sudo apt install snapd

Ardından, Certbot’u Snap üzerinden kurun:

sudo snap install core
sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

Bu komutlar, Certbot’u kurar ve certbot komutunun sistem genelinde erişilebilir olmasını sağlayan bir sembolik bağ oluşturur.

Adım 2: acme-dns Kurulumu

acme-dns, Let’s Encrypt’in DNS-01 doğrulaması için özel olarak tasarlanmış, basit ve hafif bir DNS sunucusudur. Bu sunucu, _acme-challenge alt alan adına gelen DNS sorgularını işleyerek Let’s Encrypt sunucularına gerekli TXT kayıtlarını sağlar.

2.1. acme-dns İndirme ve Kurulumu

acme-dns genellikle önceden derlenmiş ikili dosyalar olarak dağıtılır. En son sürümü GitHub sayfasından indirebilirsiniz.

# Geçici bir dizine geçelim
cd /tmp

En son sürümün URL'sini kontrol edin (örneğin, v0.8.0)

https://github.com/joohoi/acme-dns/releases

ACME_DNS_VERSION="0.8.0" # Güncel sürümü kontrol edin ve burayı güncelleyin wget https://github.com/joohoi/acme-dns/releases/download/v${ACME_DNS_VERSION}/acme-dns_${ACME_DNS_VERSION}_linux_amd64.tar.gz

Arşivi çıkarın

tar -xvf acme-dns_${ACME_DNS_VERSION}_linux_amd64.tar.gz

İkili dosyayı uygun bir konuma taşıyın

sudo mv acme-dns /usr/local/bin/

Çalıştırılabilir izinlerini verin

sudo chmod +x /usr/local/bin/acme-dns

2.2. acme-dns Kullanıcısı ve Dizini Oluşturma

Güvenlik nedeniyle, acme-dns‘i ayrıcalıksız bir kullanıcı altında çalıştırmak en iyisidir.

sudo useradd -r -s /bin/false acme-dns
sudo mkdir /etc/acme-dns
sudo chown acme-dns:acme-dns /etc/acme-dns

2.3. acme-dns Yapılandırması

acme-dns‘in bir yapılandırma dosyasına ihtiyacı vardır. /etc/acme-dns/config.yaml dosyasını oluşturalım:

sudo nano /etc/acme-dns/config.yaml

Aşağıdaki içeriği dosyaya yapıştırın. example.com yerine kendi domain adınızı, ns.example.com yerine ise acme-dns sunucunuz için kullanacağınız bir alt alan adını yazın. Eğer alt alan adı kullanmak istemiyorsanız, ns.example.com yerine doğrudan example.com yazabilirsiniz. ip_adresiniz yazan yere sunucunuzun genel IP adresini yazmayı unutmayın.

# /etc/acme-dns/config.yaml
listen: "0.0.0.0:53"
domain: "acme-dns.example.com" # Bu, acme-dns sunucusunun kendi domaini olacak.
                               # Genellikle _acme-challenge alt alan adının delege edileceği domain.
nsname: "ns1.acme-dns.example.com" # acme-dns sunucunuzun DNS adı.
                                   # DNS kayıtlarınızda kullanacağınız NS kaydının hedefi.
                                   # Bu bir A kaydı ile acme-dns sunucunuzun IP adresine işaret etmelidir.
                                   # Örneğin, ns1.acme-dns.example.com A 192.0.2.1

Opsiyonel: Prometheus metrikleri için

metrics_listen: "0.0.0.0:9000"

records: - subdomain: "" record: "ns1.acme-dns.example.com." # acme-dns domaininin kendi NS kaydı type: "NS" - subdomain: "ns1.acme-dns" record: "IP_ADRESINIZ" # acme-dns sunucunuzun genel IP adresi type: "A" acme: - port: "80" interface: "0.0.0.0" tls: "none" # acme-dns API için HTTPS kullanmak isterseniz "letsencrypt" veya "cert" olarak değiştirilebilir. # Bu rehberde "none" olarak bırakacağız, çünkü API'ye sadece yerel olarak erişeceğiz. url: "" username: "" password: "" log_level: "info"

Yapılandırma Dosyası Hakkında Önemli Notlar:
* domain: acme-dns sunucunuzun hizmet vereceği temel domaindir. _acme-challenge alt alan adını bu domainin bir alt alanına delege edeceksiniz. Örneğin, acme-dns.example.com olarak ayarlarsanız, _acme-challenge.yourdomain.com alt alan adını ns1.acme-dns.example.com‘a delege edeceksiniz.
* nsname: DNS kayıtlarınızda kullanacağınız NS kaydının hedefidir. Bu, acme-dns sunucunuzun kendi DNS adıdır. Bu ad için DNS sağlayıcınızda bir A kaydı oluşturmanız gerekecektir (örneğin, ns1.acme-dns.example.com A IP_ADRESINIZ).
* records: acme-dns‘in kendi DNS kayıtlarını tanımlar. ns1.acme-dns.example.com için bir A kaydı ve acme-dns.example.com için bir NS kaydı içerir. IP_ADRESINIZ kısmını sunucunuzun genel IP adresiyle değiştirin.
* acme: acme-dns‘in API ayarlarıdır. Bu API, acme-dns-certbot hook’unun acme-dns sunucusuna kayıtları eklemesini sağlar. port ve interface varsayılan olarak kalabilir. tls ayarını none olarak bırakıyoruz, çünkü API’ye sadece yerel olarak erişeceğiz.

Yapılandırma dosyasının sahibi ve izinlerini ayarlayın:

sudo chown acme-dns:acme-dns /etc/acme-dns/config.yaml
sudo chmod 600 /etc/acme-dns/config.yaml

2.4. systemd Servisi Oluşturma

acme-dns‘i bir systemd servisi olarak çalıştırmak, otomatik başlatma ve yönetim kolaylığı sağlar.

sudo nano /etc/systemd/system/acme-dns.service

Aşağıdaki içeriği dosyaya yapıştırın:

[Unit]
Description=ACME DNS server
After=network.target

[Service]
Type=simple
User=acme-dns
Group=acme-dns
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
ExecStart=/usr/local/bin/acme-dns -c /etc/acme-dns/config.yaml
Restart=on-failure

[Install]
WantedBy=multi-user.target

Servis dosyasını kaydedip kapatın. Ardından systemd yapılandırmasını yeniden yükleyin, servisi başlatın ve otomatik başlaması için etkinleştirin:

sudo systemctl daemon-reload
sudo systemctl start acme-dns
sudo systemctl enable acme-dns

Servisin durumunu kontrol ederek doğru çalıştığından emin olun:

sudo systemctl status acme-dns

Çıktıda “active (running)” ifadesini görmelisiniz.

2.5. Güvenlik Duvarı Yapılandırması (UFW)

Eğer sunucunuzda UFW (Uncomplicated Firewall) kullanıyorsanız, acme-dns‘in DNS sorgularını yanıtlayabilmesi için 53/UDP portunu açmanız gerekmektedir:

sudo ufw allow 53/udp
sudo ufw reload

Eğer farklı bir güvenlik duvarı kullanıyorsanız, 53/UDP portunun dışarıdan erişime açık olduğundan emin olun.

Adım 3: DNS Delegasyonu

Bu adım, acme-dns kurulumunun en kritik kısmıdır. Ana domaininizin DNS sağlayıcısında, _acme-challenge alt alan adını acme-dns sunucunuza delege etmeniz gerekmektedir.

Öncelikle, acme-dns sunucunuzun genel IP adresini not alın. Bu, config.yaml dosyasında records bölümünde belirttiğiniz IP adresi olmalıdır.

Domaininizin DNS yönetimi paneline gidin ve aşağıdaki DNS kayıtlarını oluşturun (örnek domain example.com ve acme-dns domaini acme-dns.example.com varsayılmıştır):

1. A Kaydı: acme-dns sunucunuz için bir A kaydı oluşturun. Bu, acme-dns‘in nsname ayarında belirttiğiniz adı, sunucunuzun genel IP adresine bağlar.
* Tip: A
* Ad/Host: ns1.acme-dns.example.com (veya config.yaml‘daki nsname değeriniz)
* Değer/IP Adresi: ACME_DNS_SUNUCUNUZUN_GENEL_IP_ADRESI
* TTL: Düşük bir değer (örneğin, 300 saniye)

2. NS Kaydı: _acme-challenge alt alan adını acme-dns sunucunuza delege edin.
* Tip: NS
* Ad/Host: _acme-challenge.example.com (Sertifika almak istediğiniz domainin _acme-challenge alt alan adı)
* Değer/Hedef: ns1.acme-dns.example.com (Yukarıda oluşturduğunuz A kaydının adı)
* TTL: Düşük bir değer (örneğin, 300 saniye)

Örnek DNS Kayıtları (DNS sağlayıcınızın arayüzünde):

| Tip | Host/Ad | Değer/Hedef | TTL |
| :– | :—————————— | :——————————- | :– |
| A | ns1.acme-dns.example.com | ACME_DNS_SUNUCUNUZUN_GENEL_IP | 300 |
| NS| _acme-challenge.example.com | ns1.acme-dns.example.com | 300 |
| NS| _acme-challenge.sub.example.com | ns1.acme-dns.example.com | 300 |
| NS| _acme-challenge.example.net | ns1.acme-dns.example.com | 300 |

Birden fazla domain veya alt domain için sertifika alacaksanız, her biri için ayrı ayrı _acme-challenge.yourdomain.com NS kaydını acme-dns sunucunuza delege etmeniz gerekecektir. Wildcard sertifika (*.example.com) almak istiyorsanız, sadece _acme-challenge.example.com kaydını delege etmeniz yeterlidir.

DNS Yayılımı: DNS değişikliklerinin internet genelinde yayılması biraz zaman alabilir (birkaç dakika ila birkaç saat). dig komutunu kullanarak NS kaydınızın doğru şekilde ayarlanıp ayarlanmadığını kontrol edebilirsiniz:

dig NS _acme-challenge.example.com @ACME_DNS_SUNUCUNUZUN_GENEL_IP

Bu komut, _acme-challenge.example.com için NS kaydının, acme-dns sunucunuz tarafından doğru şekilde yanıtlandığını göstermelidir. Ayrıca, genel DNS sunucularından da kontrol edebilirsiniz:

dig NS _acme-challenge.example.com

Bu komut da aynı ns1.acme-dns.example.com sonucunu döndürmelidir.

Adım 4: acme-dns-certbot Hook Kurulumu

acme-dns-certbot, certbot ile acme-dns arasında iletişimi sağlayan bir Python hook betiğidir.

4.1. Hook Betiğini İndirme

Hook betiğini GitHub deposundan klonlayın:

cd /opt
sudo git clone https://github.com/joohoi/acme-dns-certbot.git
sudo chown -R root:root /opt/acme-dns-certbot

4.2. Python Bağımlılıklarını Kurma

Hook betiği Python ile yazıldığı için bazı bağımlılıklara ihtiyaç duyar.

sudo apt install python3-pip
sudo pip3 install virtualenv # Eğer yüklü değilse
cd /opt/acme-dns-certbot
sudo virtualenv venv
sudo venv/bin/pip install -r requirements.txt

4.3. acme-dns-certbot Yapılandırması

acme-dns-certbot‘un, acme-dns sunucunuzla nasıl iletişim kuracağını bilmesi gerekir. Bunun için bir config.json dosyası oluşturacağız.

sudo nano /opt/acme-dns-certbot/config.json

Aşağıdaki içeriği dosyaya yapıştırın. acme-dns.example.com yerine acme-dns sunucunuzun domainini ve IP_ADRESINIZ yerine de acme-dns sunucunuzun IP adresini yazın.

{
  "ACME_DNS_URL": "http://IP_ADRESINIZ:80",
  "ACME_DNS_REGISTER_URL": "http://IP_ADRESINIZ:80/register",
  "ACME_DNS_USERNAME": "",
  "ACME_DNS_PASSWORD": ""
}

Önemli: ACME_DNS_USERNAME ve ACME_DNS_PASSWORD alanları başlangıçta boş bırakılmalıdır. Certbot ilk çalıştığında, acme-dns sunucusunda yeni bir kullanıcı kaydı oluşturacak ve bu bilgileri otomatik olarak bu dosyaya yazacaktır. ACME_DNS_URL ve ACME_DNS_REGISTER_URL içindeki IP adresinin, acme-dns sunucunuzun kendi IP adresi olduğundan emin olun.

Dosyayı kaydedip kapatın. Güvenlik için bu dosyanın izinlerini ayarlayın:

sudo chmod 600 /opt/acme-dns-certbot/config.json

Adım 5: Let’s Encrypt Sertifikası Edinme

Artık her şey hazır olduğuna göre, Certbot’u kullanarak sertifikayı edinebiliriz.

Bu adımda, certbot‘u acme-dns-certbot hook’u ile birlikte çalıştıracağız.
Aşağıdaki komutta example.com ve www.example.com yerine kendi domain adlarınızı yazın. Wildcard sertifika almak istiyorsanız, *.example.com ve example.com gibi hem wildcard hem de ana domaini belirtmeniz gerekmektedir.

sudo certbot certonly \
  --authenticator dns-01 \
  --dns-01-hook /opt/acme-dns-certbot/venv/bin/python \
  --dns-01-hook-args "/opt/acme-dns-certbot/certbot_acmedns.py" \
  --server https://acme-v02.api.letsencrypt.org/directory \
  --preferred-challenges dns \
  -d example.com \
  -d *.example.com \
  --email admin@example.com \
  --agree-tos \
  --non-interactive \
  --keep-until-expiring

Komut Açıklaması:
* certonly: Yalnızca sertifika edinir, otomatik olarak bir web sunucusu yapılandırmaz.
* --authenticator dns-01: DNS-01 doğrulama yöntemini kullanacağımızı belirtir.
* --dns-01-hook /opt/acme-dns-certbot/venv/bin/python: Certbot’un DNS-01 doğrulaması için çalıştıracağı Python yorumlayıcısının yolunu belirtir.
* --dns-01-hook-args "/opt/acme-dns-certbot/certbot_acmedns.py": Hook betiğinin yolunu Python yorumlayıcısına argüman olarak iletir.
* --server https://acme-v02.api.letsencrypt.org/directory: Let’s Encrypt’in ACME v2 API sunucusunu kullanacağımızı belirtir (wildcard sertifikalar için gereklidir).
* --preferred-challenges dns: DNS doğrulamasını tercih ettiğimizi belirtir.
-d example.com -d .example.com: Sertifika almak istediğiniz domainleri belirtir. Wildcard sertifika için hem ana domaini hem de *. ile wildcard domaini belirtmelisiniz.
* --email admin@example.com: Let’s Encrypt’in size bildirim göndereceği e-posta adresiniz.
* --agree-tos: Let’s Encrypt Hizmet Şartlarını kabul ettiğinizi belirtir.
* --non-interactive: Etkileşimsiz modda çalışır, yani herhangi bir soru sormaz.
* --keep-until-expiring: Mevcut bir sertifika hala geçerliyse, süresi dolana kadar yenileme yapmaz.

Komutu çalıştırdıktan sonra, acme-dns-certbot/config.json dosyanızı kontrol edin. ACME_DNS_USERNAME ve ACME_DNS_PASSWORD alanlarının otomatik olarak doldurulduğunu görmelisiniz. Bu kimlik bilgileri, acme-dns sunucusunda oluşturulan yeni bir kayıt içindir.

Eğer her şey yolunda giderse, Certbot sertifikayı başarıyla edindiğini belirten bir mesaj gösterecektir. Sertifikalarınız genellikle /etc/letsencrypt/live/example.com/ dizininde saklanır (burada example.com, sertifika aldığınız ilk domaindir).

Test Etme (Dry Run):
Sertifika edinme işlemine başlamadan önce her şeyin doğru çalıştığından emin olmak için bir “dry run” yapabilirsiniz:

sudo certbot certonly \
  --authenticator dns-01 \
  --dns-01-hook /opt/acme-dns-certbot/venv/bin/python \
  --dns-01-hook-args "/opt/acme-dns-certbot/certbot_acmedns.py" \
  --server https://acme-v02.api.letsencrypt.org/directory \
  --preferred-challenges dns \
  -d example.com \
  -d *.example.com \
  --email admin@example.com \
  --agree-tos \
  --non-interactive \
  --keep-until-expiring \
  --dry-run

--dry-run argümanı, Let’s Encrypt’in test sunucularını kullanarak doğrulama işlemini yapar, ancak gerçek bir sertifika yayınlamaz. Bu, rate limitlerine takılmadan yapılandırmanızı test etmenizi sağlar.

Adım 6: Sertifika Yenileme

Let’s Encrypt sertifikaları 90 gün geçerlidir. Bu nedenle, sertifikalarınızı düzenli olarak yenilemeniz önemlidir. certbot‘un yerleşik yenileme mekanizması, acme-dns-certbot hook’unu kullanarak bu süreci otomatikleştirir.

Sertifikalarınızı manuel olarak yenilemek için:

sudo certbot renew --dns-01-hook /opt/acme-dns-certbot/venv/bin/python --dns-01-hook-args "/opt/acme-dns-certbot/certbot_acmedns.py"

Bu komut, süresi dolmak üzere olan tüm sertifikaları yeniler.

Otomatik Yenileme:
Certbot’u Snap ile kurduğunuzda, genellikle otomatik yenilemeyi sağlayan bir systemd zamanlayıcısı veya cron işi otomatik olarak kurulur. Bu iş, günde iki kez çalışarak süresi dolmak üzere olan sertifikaları kontrol eder ve yeniler.

Otomatik yenileme işinin durumunu kontrol etmek için:

sudo systemctl status snap.certbot.renew.service
sudo systemctl status snap.certbot.renew.timer

Eğer bu servisler aktifse, yenileme işlemi otomatik olarak gerçekleşecektir. Eğer değilse, manuel olarak bir cron işi oluşturabilirsiniz:

sudo crontab -e

Aşağıdaki satırı ekleyin (örneğin, her hafta Pazartesi sabah 3:00’te çalışır):

0 3   1 /usr/bin/certbot renew --dns-01-hook /opt/acme-dns-certbot/venv/bin/python --dns-01-hook-args "/opt/acme-dns-certbot/certbot_acmedns.py" --quiet

--quiet argümanı, yalnızca hatalar veya yenileme gerektiren durumlar olduğunda çıktı üretir.

Adım 7: Sertifikaları Kullanma (Nginx/Apache Örneği)

Sertifikalarınız /etc/letsencrypt/live/example.com/ dizininde bulunur. Bu dizin içinde genellikle aşağıdaki dosyalar bulunur:
* fullchain.pem: Tam sertifika zinciri (sertifikanız + ara sertifikalar). Web sunucunuzda ssl_certificate olarak kullanılır.
* privkey.pem: Özel anahtarınız. Web sunucunuzda ssl_certificate_key olarak kullanılır.
* chain.pem: Sadece ara sertifikalar.
* cert.pem: Sadece domain sertifikanız.

Nginx Örneği:
Nginx sanal host yapılandırmanıza aşağıdaki satırları ekleyerek sertifikaları kullanabilirsiniz:

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name example.com www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    # Diğer SSL ayarları (güvenlik için önemlidir)
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers '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';
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s; # Google DNS veya kendi güvenilir DNS'niz
    resolver_timeout 5s;
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;

    root /var/www/html; # Web sitenizin kök dizini
    index index.html;

    # Diğer Nginx yapılandırmalarınız...
}

Yapılandırmayı kaydedip Nginx’i yeniden başlatın:

sudo nginx -t
sudo systemctl restart nginx

Apache Örneği:
Apache sanal host yapılandırmanıza aşağıdaki satırları ekleyerek sertifikaları kullanabilirsiniz:


    ServerName example.com
    ServerAlias www.example.com
    Redirect permanent / https://example.com/



    ServerName example.com
    ServerAlias www.example.com

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem

    # Diğer SSL ayarları
    SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
    SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
    SSLHonorCipherOrder on
    Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"

    DocumentRoot /var/www/html # Web sitenizin kök dizini

    # Diğer Apache yapılandırmalarınız...

Yapılandırmayı kaydedip Apache’yi yeniden başlatın:

sudo apache2ctl configtest
sudo systemctl restart apache2

Sorun Giderme

Kurulum sırasında karşılaşabileceğiniz bazı yaygın sorunlar ve çözümleri:

* DNS Yayılım Sorunları:
* Belirti: certbot “Timeout” veya “DNS problem” hatası veriyor.
* Çözüm: DNS kayıtlarınızın (özellikle NS kaydı) internet genelinde tamamen yayılıp yayılmadığını kontrol edin. dig NS _acme-challenge.example.com ve dig TXT _acme-challenge.example.com @ACME_DNS_SUNUCUNUZUN_GENEL_IP komutlarını kullanarak kontrol edin. Bazen 1-2 saat beklemek gerekebilir.
* acme-dns Servisi Çalışmıyor:
* Belirti: systemctl status acme-dns komutu “failed” veya “inactive” gösteriyor.
* Çözüm: sudo journalctl -u acme-dns komutuyla günlükleri kontrol edin. Yapılandırma dosyasındaki (/etc/acme-dns/config.yaml) hatalar veya port çakışmaları (örneğin, 53/UDP başka bir servis tarafından kullanılıyorsa) yaygın nedenlerdir.
* Güvenlik Duvarı Sorunları:
* Belirti: acme-dns servisi çalışıyor ancak dig komutu acme-dns sunucusundan yanıt alamıyor.
* Çözüm: Sunucunuzun güvenlik duvarında (UFW, iptables vb.) 53/UDP portunun dışarıdan erişime açık olduğundan emin olun.
* acme-dns-certbot Yapılandırma Hatası:
* Belirti: Certbot çalışırken Python betiğinden hata alıyor.
* Çözüm: /opt/acme-dns-certbot/config.json dosyasındaki ACME_DNS_URL ve ACME_DNS_REGISTER_URL değerlerinin doğru IP adresini ve portu içerdiğinden emin olun. İlk çalıştırmada ACME_DNS_USERNAME ve ACME_DNS_PASSWORD alanlarının boş bırakıldığından emin olun.
* Certbot Rate Limitleri:
* Belirti: Çok fazla deneme sonrası Let’s Encrypt’ten “rate limit exceeded” hatası.
* Çözüm: Let’s Encrypt’in belirli bir domain için belirli bir süre içinde alabileceğiniz sertifika sayısına sınırlamaları vardır. Sorunları çözmek için --dry-run kullanarak test etmeye devam edin ve gerçek sertifika edinme işlemini ancak her şeyin çalıştığından emin olduğunuzda yapın.
* Wildcard Sertifika Sorunları:
* Belirti: Wildcard sertifika alınamıyor veya sadece ana domain için sertifika alınıyor.
Çözüm: certbot komutunda hem ana domain (-d example.com) hem de wildcard domain (-d .example.com) belirtildiğinden emin olun. Ayrıca, _acme-challenge.example.com NS kaydının doğru şekilde delege edildiğinden emin olun.

Sonuç

Bu rehberde, acme-dns ve acme-dns-certbot araçlarını kullanarak Ubuntu 18.04 üzerinde Let’s Encrypt sertifikalarını DNS-01 doğrulaması ile nasıl edineceğinizi ayrıntılı olarak ele aldık. Bu yöntem, özellikle wildcard sertifikalar almak, 80/443 portlarına erişimi olmayan sunucularda sertifika kullanmak veya DNS sağlayıcınızın certbot eklentileri tarafından desteklenmediği durumlarda son derece esnek ve güçlü bir çözüm sunar.

Kurulum biraz karmaşık görünse de, bir kez doğru şekilde yapılandırıldığında, sertifika edinme ve yenileme süreçleri tamamen otomatik hale gelir. Bu sayede, web sitelerinizin ve servislerinizin sürekli olarak güvenli ve HTTPS üzerinden erişilebilir olmasını sağlayabilirsiniz. Güvenliğinizi artırmak ve arama motoru sıralamalarınızı iyileştirmek için Let’s Encrypt ve DNS doğrulaması, modern web altyapısının vazgeçilmez bir parçasıdır. Unutmayın, güvenlik bir süreçtir ve sertifikalarınızı düzenli olarak yenilemek bu sürecin önemli bir parçasıdır.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Exit mobile version