Nginx'i SSL ile Koruma ve FreeBSD'de Şifreleyelim


Bu kılavuzda, FreeBSD'deki Nginx web sunucusunun Let's Encrypt Sertifikası tarafından sunulan TLS/SSL sertifikalarıyla nasıl güvence altına alınacağını tartışacağız. Yetki. Ayrıca Lets' Encrypt sertifikalarını sona erme tarihinden önce otomatik olarak nasıl yenileyeceğinizi de göstereceğiz.

Aktarım Katmanı Güvenliği'nin kısaltması olan TLS, HTTP protokolü altında çalışan ve paketleri kapsüllemek için sertifikalar ve anahtarlar kullanan bir protokoldür. Trafiğe müdahale edebilecek üçüncü bir tarafın şifreyi çözememesi için bağlantıyı güvence altına almak amacıyla bir sunucu ile istemci arasında veya bu durumda Nginx web sunucusu ile istemcinin tarayıcısı arasında alınıp verilen verileri şifreleyin iletim.

Ayrıca Okuyun: FreeBSD'de Let's Encrypt for Apache'yi yükleyin

FreeBSD'de ücretsiz bir Let's Encrypt sertifikası edinme süreci, kullanılan resmi Let's Encrypt istemcisi olan certboot istemci yardımcı programının yüklenmesiyle büyük ölçüde basitleştirilebilir. Sertifika oluşturmak ve indirmek için.

Gereksinimler

  1. FreeBSD'ye FBEMP (Nginx, MariaDB ve PHP) yığınını yükleyin

1. Adım: Nginx TLS/SSL'yi yapılandırın

1. TLS sunucu engelleme ifadeleri nedeniyle varsayılan olarak TLS/SSL sunucu yapılandırması FreeBSD'de etkin değildir. Nginx varsayılan yapılandırma dosyasında yorumlanır.

Nginx'de TLS sunucusunu etkinleştirmek için nginx.conf yapılandırma dosyasını açın, 'nin başlangıcını tanımlayan satırı arayın. SSL sunucusunu oluşturun ve tüm bloğu aşağıdaki örnekteki gibi görünecek şekilde güncelleyin.

nano /usr/local/etc/nginx/nginx.conf

Nginx HTTPS bloğu alıntısı:

server {
       listen 443 ssl  default_server;
       server_name  www.yourdomain.com;
	
	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;
	error_page   500 502 503 504  /50x.html;
        
	location = /50x.html {
            root   /usr/local/www/nginx-dist;
        }
	
	location / {
	    root   /usr/local/www/nginx;
       	    index  index.html index.htm;
	    try_files $uri $uri/ /index.php?$args;
				}

	ssl_certificate "/usr/local/etc/letsencrypt/live/www.yourdomain.com/cert.pem";
	ssl_certificate_key "/usr/local/etc/letsencrypt/live/www.yourdomain.com/privkey.pem";
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	ssl_dhparam /usr/local/etc/nginx/dhparam.pem;
	ssl_session_cache shared:SSL:1m;
	ssl_session_timeout 10m;
	ssl_ciphers HIGH:!aNULL:!MD5;
	ssl_prefer_server_ciphers  on;

	# Use gzip compression
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 5;
gzip_buffers 16 8k;
gzip_http_version 1.0;

	# Set a variable to work around the lack of nested conditionals
	
	set $cache_uri $request_uri;
	
	location ~ /.well-known {
	allow all;
		}
    


        location ~ \.php$ {
        root	/usr/local/www/nginx;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        #fastcgi_param  SCRIPT_FILENAME /scripts$fastcgi_script_name;
        fastcgi_param SCRIPT_FILENAME $request_filename;    
		include        fastcgi_params;
        }	
    }

Yukarıdaki blok, SSL bloğuna ek olarak, gzip sıkıştırmasını ve PHP kodunu PHP-FPM<'ye aktarmak için kullanılan FastCGI Process Manager'ı etkinleştirmeye yönelik bazı ifadeler de içerir. Dinamik web uygulamalarını çalıştırmak için ağ geçidi.

Yukarıdaki kodu Nginx ana yapılandırma dosyasına ekledikten sonra, alan adınız için bir Let's Encrypt sertifikası yükleyip almadan önce arka plan programını yeniden başlatmayın veya ayarları uygulamayın.

Adım 2: Certbot İstemcisini FreeBSD'ye yükleyin

2. Let's Encrypt certbot istemci yardımcı programını FreeBSD'ye yükleme işlemi, py-certbot için kaynak kodunun indirilmesini ve yerel olarak derlenmesini içerir. aşağıdaki komutlar.

cd /usr/ports/security/py-certbot
make install clean

3. py-certbot yardımcı programını derlemek, normal bir ikili paket kurmaya kıyasla çok daha fazla zaman alır. Bu süre zarfında, FreeBSD'de yerel olarak derlenmiş olarak bir dizi bağımlılığın indirilmesi gerekir.

Ayrıca ekranınızda, her bağımlılık için derleme zamanında hangi paketlerin kullanılacağını seçmenizi isteyen bir dizi bilgi istemi görünecektir. İlk ekranda aşağıdaki resimde gösterildiği gibi python27 bağımlılığını derlemek için [space] tuşuna basarak aşağıdaki araçları seçin.

  • IPV6
  • LIBFFI
  • NLS
  • PYMALLOC
  • İŞ PARÇACIĞI
  • Unicode desteği için UCS4

4. Ardından, gettext-tools bağımlılığı için BELGELER ve THREADS'i seçin ve Tamam 'a basın aşağıdaki resimde gösterildiği gibi devam etmek için.

5. Bir sonraki ekranda libffi-3.2.1 için TESTLER seçeneğini devre dışı bırakın ve taşımak için Tamam'a basın daha öte.

6. Ardından boşluk tuşuna basarak py27-enum34 bağımlılığı için DOCS'u seçin; bu bağımlılık için gerekli belgeleri yükleyecektir. aracını seçin ve aşağıdaki ekran görüntüsünde gösterildiği gibi devam etmek için Tamam'a basın.

7. Son olarak, [space] tuşuna basarak py27-openssl bağımlılığı için örnek örnekleri yüklemeyi seçin ve Tamam 'a basın py-certbot istemcisinin derleme ve kurulum işlemini tamamlamak için.

8. py-certbot yardımcı programının derlenmesi ve kurulması işlemi tamamlandıktan sonra, aracı, aşağıdaki şekilde gösterildiği gibi paketin en son sürümüne yükseltmek için aşağıdaki komutu çalıştırın. ekran görüntülerinin altında.

pkg install py27-certbot

9. Ücretsiz bir Let's Encrypt sertifikası alırken oluşabilecek bazı sorunları önlemek için, en yaygın hata “pkg_resources.DistributionNotFound” olur. sisteminizde şu iki bağımlılığın da mevcut olduğundan emin olun: py27-salt ve py27-acme.

pkg install py27-salt
pkg install py27-acme

Adım 3: FreeBSD'de Nginx için Let's Encrypt Sertifikasını yükleyin

10. Alanınız için bağımsız bir Let's Encrypt sertifikası almak için aşağıdaki komutu çalıştırın ve -d bayrak.

certbot certonly --standalone -d yourdomain.com -d www.yourdomain.com

11. Sertifikayı oluştururken e-posta adresinizi girmeniz ve Let's Encrypt hizmet şartlarını kabul etmeniz istenecektir. Kabul edip devam etmek için klavyeden a yazın; ayrıca e-posta adresinizi Let's Encrypt ortaklarıyla paylaşmak isteyip istemediğiniz sorulacaktır.

E-posta adresinizi paylaşmak istemiyorsanız istemde no kelimesini yazıp devam etmek için [enter] tuşuna basmanız yeterlidir. Alan adınız için sertifikalar başarıyla alındıktan sonra, sertifikaların sisteminizde nerede saklandığını ve geçerlilik sürelerinin ne zaman dolduğunu size bildirecek bazı önemli notlar alacaksınız.

12. Alan adınız için Nginx sunucusunun webroot dizinini ekleyerek “webroot” eklentisini kullanarak Let's Encrypt sertifikası almak istiyorsanız , --webroot ve -w bayraklarıyla aşağıdaki komutu verin. Varsayılan olarak, Nginx web kökü yolunu değiştirmediyseniz bu yol /usr/local/www/nginx/ sistem yolunda bulunmalıdır.

certbot certonly --webroot -w /usr/local/www/nginx/ -d yourdomain.com -d www.yourdomain.com

Sertifika almak için --strandalone prosedüründe olduğu gibi, --webroot prosedürü de sizden sertifika yenileme ve güvenlik bildirimleri için bir e-posta adresi sağlamanızı ve <'ye basmanız istenecektir. Let's Encrypt hüküm ve koşullarını kabul etmek içina ve aşağıdaki örnekte gösterildiği gibi Let's Encrypt ortaklarının e-posta adresini paylaşmak veya paylaşmamak için hayır veya evet.

Certbot istemcisinin sahte bir e-posta adresi tespit edebileceğini ve gerçek bir e-posta adresi sağlayana kadar sertifika oluşturmaya devam etmenize izin vermeyeceğini unutmayın.

Cerbot örneği:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):[email   #A fake email address will be detected
There seem to be problems with that address. Enter email address (used for
urgent renewal and security notices)  If you really want to skip this, you can
run the client with --register-unsafely-without-email but make sure you then
backup your account key from /etc/letsencrypt/accounts   (Enter 'c' to cancel):[email 

-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: a ------------------------------------------------------------------------------- Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about EFF and our work to encrypt the web, protect its users and defend digital rights. ------------------------------------------------------------------------------- (Y)es/(N)o: n Obtaining a new certificate Performing the following challenges: http-01 challenge for www.domain.com Using the webroot path /usr/local/www/nginx/ for all unmatched domains. Waiting for verification... Cleaning up challenges IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /usr/local/etc/letsencrypt/live/www.yourdomain.com/fullchain.pem. Your cert will expire on 2017-12-28. 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" - Your account credentials have been saved in your Certbot configuration directory at /usr/local/etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le

4. Adım: Nginx TLS Sertifikalarını Güncelleyin

13. FreeBSD'de elde edilen Let's Encrypt sertifikalarının ve anahtarlarının konumu /usr/local/etc/letsencrypt/live/www.yourdomain.com/ sistem yoludur. Let's Encrypt sertifikanızın bileşenlerini görüntülemek için ls komutunu verin: aşağıdaki örnekte gösterildiği gibi zincir dosyası, tam zincir dosyası, özel anahtar ve sertifika dosyası.

ls /usr/local/etc/letsencrypt/live/www.yourdomain.com/

14. Nginx web sunucusuna alan adınıza ait Let's Encrypt sertifikalarını yüklemek için, Nginx ana yapılandırma dosyasını veya ayrı bir dosya olması durumunda Nginx TLS sunucusunun yapılandırma dosyasını açın ve aşağıdaki satırları değiştirin. Let's Encrypt tarafından verilen sertifikaların yolunu aşağıda gösterildiği gibi yansıtacak şekilde.

nano /usr/local/etc/nginx/nginx.conf

Aşağıdaki satırları bu örnekteki gibi görünecek şekilde güncelleyin:

ssl_certificate "/usr/local/etc/letsencrypt/live/www.yourdomain.com/cert.pem";
	ssl_certificate_key "/usr/local/etc/letsencrypt/live/www.yourdomain.com/privkey.pem";

15. Ayrıca, Nginx SSL yapılandırmasında ssl_dhparam satırı mevcutsa, yeni bir 2048 biti oluşturmalısınız Diffie–Hellman tuşuna aşağıdaki komutla basın:

openssl dhparam –out /usr/local/etc/nginx/dhparam.pem 2048 

16. Son olarak, Nginx TLS yapılandırmasını etkinleştirmek için öncelikle Nginx global yapılandırmasını olası sözdizimi hataları açısından kontrol edin ve ardından aşağıdaki komutları vererek SSL yapılandırmasını uygulamak için Nginx hizmetini yeniden başlatın.

nginx -t
service nginx restart

17. Sistemdeki tüm açık ağ yuvalarını dinleme durumunda listeleyebilen aşağıdaki komutları vererek Nginx arka plan programının 443 bağlantı noktasına bağlanıp bağlanmadığını doğrulayın.

netstat -an -p tcp| grep LISTEN
sockstat -4 

18. Let's Encrypt sertifikalarının beklendiği gibi çalıştığını doğrulamak için bir tarayıcı açarak alan adı adresinizi HTTPS protokolü aracılığıyla da ziyaret edebilir ve aşağıdaki adresi yazabilirsiniz. Geçerli bir Sertifika Yetkilisi tarafından oluşturulan sertifikaları kullandığınız için tarayıcıda herhangi bir hata görüntülenmemelidir.

https://www.yourdomain.com

19. Openssl yardımcı programı, komutu aşağıdaki seçeneklerle çalıştırarak Let's Encrypt CA'dan alınan bir sertifika hakkında bilgi bulmanıza da yardımcı olabilir.

openssl s_client -connect www.yourdomain.com:443

Nginx'i, alan adınız için 80 bağlantı noktasından HTTPS'ye alınan tüm http'den https'ye isteklerini yönlendirmeye zorlamak istiyorsanız, Nginx yapılandırma dosyasını açın, 80 numaralı bağlantı noktası için sunucu yönergesini bulun. ve aşağıdaki örnekte gösterildiği gibi sunucu_adı ifadesinden sonra aşağıdaki satırı ekleyin.

rewrite ^(.*) https://www.yourdomain.com$1 permanent;

20. Let's Encrypt yetkilisi tarafından verilen sertifikanın süresi dolmadan önce otomatik yenilemeyi ayarlamak, aşağıdaki komutu vererek bir cron işinin günde bir kez çalışacak şekilde planlanmasıyla yapılabilir.

crontab -e

Sertifikayı yenilemek için Cron görevi.

0 0 * * * certbot renew >> /var/log/letsencrypt.log

Bu kadar! Nginx artık Let's Encrypt ücretsiz sertifikalarını kullanarak ziyaretçilerinize güvenli web uygulamaları sunabiliyor.