Android

Debian 10 Linux'ta Şifrelenelim ile Güvenli Nginx

Что нового в Debian Buster. Самая стабильная операционная система Linux.

Что нового в Debian Buster. Самая стабильная операционная система Linux.

İçindekiler:

Anonim

Let's Encrypt, ücretsiz SSL sertifikaları sağlayan Internet Security Research Group (ISRG) tarafından geliştirilen ücretsiz, otomatik ve açık bir sertifika yetkilisidir.

Let's Encrypt tarafından verilen sertifikalara tüm büyük tarayıcılar tarafından güvenilir ve yayın tarihinden itibaren 90 gün geçerlidir.

Bu eğitici, Nginx'i web sunucusu olarak çalıştıran Debian 10, Buster'a ücretsiz Let's Encrypt SSL sertifikasının nasıl kurulacağını gösterir. Nginx'in SSL sertifikasını kullanmak ve HTTP / 2'yi etkinleştirmek için nasıl yapılandırılacağını da göstereceğiz.

Ön şartlar

Rehberle devam etmeden önce aşağıdaki ön koşulların karşılandığından emin olun:

  • SSL sertifikası almak istediğiniz etki alanı, genel sunucu IP'nizi göstermelidir. Kurulu example.com .Nginx'i kullanacağız.

Certbot'u Yükleme

Sertifikaları almak ve yenilemek için certbot aracını kullanacağız.

Certbot, Let's Encrypt SSL sertifikalarını alma ve yenileme ve web sunucularını sertifikaları kullanacak şekilde yapılandırma görevlerini otomatikleştiren tam özellikli ve kullanımı kolay bir araçtır.

Certbot paketi, varsayılan Debian depolarına dahil edilmiştir. Certbot'u kurmak için aşağıdaki komutları çalıştırın:

sudo apt update sudo apt install certbot

Dh (Diffie-Hellman) Grubu Oluşturma

Diffie – Hellman anahtar değişimi (DH), kriptografik anahtarları güvenli olmayan bir iletişim kanalı üzerinden güvenli bir şekilde alışverişi yapma yöntemidir.

Güvenliği güçlendirmek için yeni bir 2048 bit DH parametre seti oluşturacağız:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Boyutu 4096 bite kadar değiştirebilirsiniz, ancak sistem entropisine bağlı olarak üretim 30 dakikadan fazla sürebilir.

Let's Encrypt SSL sertifikası edinme

Alan adı için bir SSL sertifikası almak için Webroot eklentisini kullanacağız. ${webroot-path}/.well-known/acme-challenge dizininde istenen etki alanını doğrulamak için geçici bir dosya oluşturarak çalışır. Let's Encrypt sunucusu, istenen etki alanının certbot'un çalıştığı sunucuya çözümlendiğini doğrulamak için geçici dosyaya HTTP istekleri gönderir.

.well-known/acme-challenge için tüm HTTP isteklerini /var/lib/letsencrypt tek bir dizine /var/lib/letsencrypt .

Dizini oluşturmak ve Nginx sunucusu için yazılabilir yapmak için aşağıdaki komutları çalıştırın:

mkdir -p /var/lib/letsencrypt/.well-known chgrp www-data /var/lib/letsencrypt chmod g+s /var/lib/letsencrypt

Kodun kopyalanmasını önlemek için, tüm Nginx sunucu blok dosyalarına dahil edilecek iki snippet oluşturacağız.

Metin düzenleyicinizi açın ve ilk letsencrypt.conf parçasını oluşturun, letsencrypt.conf :

sudo nano /etc/nginx/snippets/letsencrypt.conf /etc/nginx/snippets/letsencrypt.conf

location ^~ /.well-known/acme-challenge/ { allow all; root /var/lib/letsencrypt/; default_type "text/plain"; try_files $uri =404; }

İkinci snippet ssl.conf , Mozilla tarafından önerilen ssl.conf içerir, OCSP Zımbalama, HTTP Sıkı Aktarım Güvenliği'ni (HSTS) etkinleştirir ve güvenlik odaklı birkaç HTTP üstbilgisini zorlar.

sudo nano /etc/nginx/snippets/ssl.conf /etc/nginx/snippets/ssl.conf

ssl_dhparam /etc/ssl/certs/dhparam.pem; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_session_tickets off; 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:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off; ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 30s; add_header Strict-Transport-Security "max-age=63072000" always; add_header X-Frame-Options SAMEORIGIN; add_header X-Content-Type-Options nosniff;

Tamamlandığında, etki alanı sunucusu blok dosyasını açın ve aşağıda gösterildiği gibi letsencrypt.conf snippet'ini letsencrypt.conf :

sudo nano /etc/nginx/sites-available/example.com /etc/nginx/sites-available/example.com

server { listen 80; server_name example.com www.example.com; include snippets/letsencrypt.conf; }

Etki alanı sunucusu bloğunu etkinleştirmek için sites-enabled dizine sembolik bir bağlantı oluşturun:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

Değişikliklerin etkili olması için Nginx hizmetini yeniden başlatın:

sudo systemctl restart nginx

Artık aşağıdaki komutu çalıştırarak SSL sertifika dosyalarını almaya hazırsınız:

sudo certbot certonly --agree-tos --email [email protected] --webroot -w /var/lib/letsencrypt/ -d example.com -d www.example.com

SSL sertifikası başarıyla alınırsa, terminalinize aşağıdaki mesaj yazdırılır:

IMPORTANT NOTES: IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/example.com/privkey.pem Your cert will expire on 2020-02-22. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF:

Etki alanı sunucusu bloğunu düzenleyin ve SSL sertifika dosyalarını aşağıdaki gibi ekleyin:

sudo nano /etc/nginx/sites-available/example.com /etc/nginx/sites-available/example.com

server { listen 80; server_name www.example.com example.com; include snippets/letsencrypt.conf; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name www.example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem; include snippets/ssl.conf; include snippets/letsencrypt.conf; return 301 https://example.com$request_uri; } server { listen 443 ssl http2; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem; include snippets/ssl.conf; include snippets/letsencrypt.conf; #… other code }

Yukarıdaki yapılandırma Nginx'e HTTP'den HTTPS'ye ve www'den www olmayan sürüme yönlendirme yapmasını söyler.

Değişikliklerin etkili olması için Nginx hizmetini yeniden başlatın veya yeniden yükleyin:

sudo systemctl restart nginx

https:// kullanarak web sitenizi açın, yeşil bir kilit simgesi göreceksiniz.

Otomatik yenileme SSL sertifikasını şifreleyelim

Şifreleme sertifikaları 90 gün geçerlidir. Sertifikalar süresi dolmadan otomatik olarak yenilemek için, certbot paketi günde iki kez çalışan bir cronjob oluşturur ve süresi dolmadan 30 gün önce herhangi bir sertifikayı otomatik olarak yeniler.

Yenilemede, sunucunun sertifikayı yükleyebilmesi için nginx hizmetinin yeniden yüklenmesi gerekir. /etc/cron.d/certbot dosyasına --renew-hook "systemctl reload nginx" aşağıdaki gibi /etc/cron.d/certbot :

sudo nano /etc/cron.d/certbot /etc/cron.d/certbot

0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --renew-hook "systemctl reload nginx"

Bu komutu çalıştırarak otomatik yenileme işlemini test edin:

sudo certbot renew --dry-run

Herhangi bir hata yoksa, yenileme işleminin başarılı olduğu anlamına gelir.

Sonuç

Günümüzde SSL sertifikasına sahip olmak şarttır. Web sitenizi korur, SERP sıralama konumunu artırır ve web sunucunuzda HTTP / 2'yi etkinleştirmenizi sağlar.

Bu öğreticide, certbot komut dosyasını kullanarak SSL sertifikalarının nasıl oluşturulacağını ve yenileneceğini gösterdik. Nginx'in sertifikaları kullanacak şekilde nasıl yapılandırılacağını da gösterdik.

Certbot hakkında daha fazla bilgi için Certbot belgelerini ziyaret edin.

nginx debian certbot ssl şifreleyelim