Dalam panduan ini kita akan membahas cara mengamankan Nginx server web di FreeBSD dengan TLS/SSL sertifikat yang ditawarkan oleh Let's Encrypt Certificate Authority . Kami juga akan menunjukkan cara memperbarui sertifikat Lets’ Encrypt secara otomatis sebelum tanggal kedaluwarsa.
TLS , singkatan dari Transport Layer Security , adalah protokol yang berjalan di bawah HTTP protokol dan menggunakan sertifikat dan kunci untuk mengenkapsulasi paket dan mengenkripsi data yang dipertukarkan antara server dan klien, atau dalam hal ini antara Nginx server web dan browser klien, untuk mengamankan koneksi, sehingga pihak ketiga, yang mungkin mencegat lalu lintas, tidak dapat mendekripsi transmisi.
Baca Juga :Instal Let's Encrypt untuk Apache di FreeBSD
Proses mendapatkan Let's Encrypt free gratis sertifikat di FreeBSD dapat sangat disederhanakan dengan menginstal certboot utilitas klien, yang merupakan klien Let's Encrypt resmi yang digunakan untuk membuat dan mengunduh sertifikat.
Persyaratan
- Instal tumpukan FBEMP (Nginx, MariaDB dan PHP) di FreeBSD
Langkah 1:Konfigurasi Nginx TLS/SSL
1. Secara default, TLS/SSL konfigurasi server tidak diaktifkan di FreeBSD karena TLS pernyataan blok server dikomentari di Nginx file konfigurasi default.
Untuk mengaktifkan TLS server di Nginx , buka nginx.conf file konfigurasi, cari baris yang mendefinisikan awal SSL server dan perbarui seluruh blok agar terlihat seperti pada contoh di bawah ini.
# nano /usr/local/etc/nginx/nginx.conf
Kutipan blok HTTPS Nginx:
Konfigurasi HTTPS Nginxserver { 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; } }
Blok di atas, selain SSL blok, juga berisi beberapa pernyataan untuk mengaktifkan kompresi gzip dan FastCGI Process Manager , digunakan untuk meneruskan kode PHP ke PHP-FPM gateway untuk menjalankan aplikasi web dinamis.
Setelah Anda menambahkan kode di atas ke Nginx file konfigurasi utama, jangan memulai ulang daemon atau menerapkan pengaturan sebelum menginstal dan mendapatkan Let's Encrypt sertifikat untuk domain Anda.
Langkah 2:Instal Klien Certbot di FreeBSD
2. Proses pemasangan Let's Encrypt certbot utilitas klien di FreeBSD melibatkan pengunduhan kode sumber untuk py-certbot dan kompilasi secara lokal, dengan mengeluarkan perintah di bawah ini.
# cd /usr/ports/security/py-certbot # make install clean
3. Mengkompilasi py-certbot utilitas membutuhkan banyak waktu dibandingkan dengan menginstal paket biner biasa. Selama waktu ini, serangkaian dependensi harus diunduh dalam bentuk kompilasi lokal di FreeBSD.
Juga, serangkaian prompt akan muncul di layar Anda, menuntut Anda untuk memilih paket apa yang akan digunakan pada waktu kompilasi untuk setiap ketergantungan. Pada layar pertama, pilih alat berikut, dengan menekan [spasi] kunci, untuk mengkompilasi python27 ketergantungan, seperti yang diilustrasikan pada gambar di bawah ini.
- IPV6
- LIBFFI
- NLS
- PYMALLOC
- BENANG
- UCS4 untuk dukungan Unicode
4. Selanjutnya, pilih DOCS dan THREAD untuk gettext-tools ketergantungan dan tekan OK untuk melanjutkan seperti yang ditunjukkan pada gambar di bawah ini.
5. Di layar berikutnya tinggalkan TES opsi dinonaktifkan untuk libffi-3.2.1 dan tekan Oke untuk melangkah lebih jauh.
6. Selanjutnya, tekan spasi untuk memilih DOCS untuk py27-enum34 dependensi, yang akan menginstal dokumentasi untuk alat ini, dan tekan OK untuk melanjutkan, seperti yang diilustrasikan pada tangkapan layar di bawah.
7. Terakhir, pilih untuk memasang contoh contoh untuk py27-openssl ketergantungan dengan menekan [spasi] tombol dan tekan OK untuk menyelesaikan proses kompilasi dan instalasi untuk py-certbot klien.
8. Setelah proses kompilasi dan pemasangan py-certbot utilitas selesai, jalankan perintah di bawah ini untuk meningkatkan alat pada versi terbaru dari paket seperti yang diilustrasikan pada tangkapan layar di bawah ini.
# pkg install py27-certbot
9. Untuk menghindari beberapa masalah yang mungkin terjadi saat mendapatkan Let's Encrypt free gratis sertifikat, kesalahan paling umum adalah “pkg_resources.DistributionNotFound ”, pastikan dua dependensi berikut juga ada di sistem Anda:py27-salt dan py27-acme .
# pkg install py27-salt # pkg install py27-acme
Langkah 3:Instal Let's Encrypt Certificate untuk Nginx di FreeBSD
10. Untuk mendapatkan sertifikat mandiri Let's Encrypt untuk domain Anda, jalankan perintah berikut dan berikan nama domain dan semua subdomain yang ingin Anda dapatkan sertifikatnya dengan menyiratkan -d
bendera.
# certbot certonly --standalone -d yourdomain.com -d www.yourdomain.com
11. Saat membuat sertifikat, Anda akan diminta untuk memasukkan alamat email Anda dan menyetujui persyaratan layanan Let's Encrypt. Ketik a
dari keyboard untuk menyetujui dan melanjutkan dan Anda juga akan ditanya apakah Anda bersedia membagikan alamat email Anda dengan mitra Let's Encrypt.
Jika Anda tidak ingin membagikan alamat email Anda, cukup ketik no
kata di prompt dan tekan [enter] kunci untuk melanjutkan. Setelah sertifikat untuk domain Anda berhasil diperoleh, Anda akan menerima beberapa catatan penting yang akan memberi tahu Anda di mana sertifikat disimpan di sistem Anda dan kapan sertifikat itu kedaluwarsa.
12. Jika Anda ingin mendapatkan sertifikat Let's Encrypt menggunakan "webroot ” plugin dengan menambahkan webroot direktori server Nginx untuk domain Anda, jalankan perintah berikut dengan --webroot
dan -w
bendera. Secara default, jika Anda belum mengubah jalur root web Nginx, itu harus berada di /usr/local/www/nginx/ jalur sistem.
# certbot certonly --webroot -w /usr/local/www/nginx/ -d yourdomain.com -d www.yourdomain.com
Seperti pada --strandalone
prosedur untuk mendapatkan sertifikat, --webroot
prosedur juga akan meminta Anda untuk memberikan alamat email untuk pembaruan sertifikat dan pemberitahuan keamanan, untuk menekan a
untuk menyetujui syarat dan ketentuan Let's Encrypt dan no
atau yes
untuk atau tidak membagikan alamat email mitra Let's Encrypt seperti yang diilustrasikan dalam contoh di bawah ini.
Ketahuilah bahwa klien certbot dapat mendeteksi alamat email palsu dan tidak akan membiarkan Anda melanjutkan pembuatan sertifikat sampai Anda memberikan alamat email asli.
Contoh Cerbot:
Saving debug log to /var/log/letsencrypt/letsencrypt.log Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel):[email protected] #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 protected] ------------------------------------------------------------------------------- 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
Langkah 4:Perbarui Sertifikat TLS Nginx
13. Lokasi untuk mendapatkan sertifikat dan kunci Let's Encrypt di FreeBSD adalah /usr/local/etc/letsencrypt/live/www.domainanda.com/ jalur sistem. Keluarkan perintah ls untuk menampilkan komponen sertifikat Let's Encrypt Anda:file rantai, file rantai penuh, kunci pribadi, dan file sertifikat, seperti yang diilustrasikan dalam contoh berikut.
# ls /usr/local/etc/letsencrypt/live/www.yourdomain.com/
14. Untuk menginstal sertifikat Let's Encrypt untuk domain Anda di server web Nginx, buka file konfigurasi utama Nginx atau file konfigurasi untuk server Nginx TLS, jika itu adalah file terpisah, dan ubah baris di bawah ini untuk mencerminkan jalur Let's Encrypt yang diterbitkan sertifikat seperti yang diilustrasikan di bawah ini.
# nano /usr/local/etc/nginx/nginx.conf
Perbarui baris berikut agar terlihat seperti dalam contoh ini:
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. Juga, jika baris ssl_dhparam ada di Nginx SSL konfigurasi, Anda harus membuat 2048 new baru sedikit Diffie–Hellman kunci dengan perintah berikut:
# openssl dhparam –out /usr/local/etc/nginx/dhparam.pem 2048
16. Terakhir, untuk mengaktifkan konfigurasi Nginx TLS, pertama-tama periksa konfigurasi global Nginx untuk kemungkinan kesalahan sintaks dan, kemudian, mulai ulang layanan Nginx untuk menerapkan konfigurasi SSL dengan mengeluarkan perintah berikut.
# nginx -t # service nginx restart
17. Konfirmasi apakah daemon Nginx mengikat 443 port dengan mengeluarkan perintah berikut yang dapat mencantumkan semua soket jaringan yang terbuka di sistem dalam status mendengarkan.
# netstat -an -p tcp| grep LISTEN # sockstat -4
18. Anda juga dapat mengunjungi alamat domain Anda melalui HTTPS protokol dengan membuka browser dan ketik alamat berikut untuk mengonfirmasi bahwa sertifikat Let's Encrypt berfungsi seperti yang diharapkan. Karena Anda menggunakan sertifikat yang dihasilkan oleh Otoritas Sertifikat yang valid, seharusnya tidak ada kesalahan yang ditampilkan di browser.
https://www.yourdomain.com
19. Utilitas Openssl juga dapat membantu Anda menemukan informasi tentang sertifikat yang diperoleh dari Let's Encrypt CA, dengan menjalankan perintah dengan opsi berikut.
# openssl s_client -connect www.yourdomain.com:443
Jika Anda ingin memaksa Nginx untuk mengarahkan semua permintaan http ke https yang diterima untuk domain Anda pada port 80 ke HTTPS , buka file konfigurasi Nginx, cari direktif server untuk port 80 dan tambahkan baris di bawah ini setelah pernyataan server_name seperti yang diilustrasikan pada contoh di bawah ini.
rewrite ^(.*) https://www.yourdomain.com$1 permanent;
20. Menyiapkan perpanjangan otomatis untuk sertifikat yang dikeluarkan oleh otoritas Let's Encrypt sebelum kedaluwarsa dapat dilakukan dengan menjadwalkan tugas cron untuk dijalankan sekali sehari dengan mengeluarkan perintah berikut.
# crontab -e
Tugas Cron untuk memperbarui sertifikat.
0 0 * * * certbot renew >> /var/log/letsencrypt.log
Itu saja! Nginx sekarang dapat menyajikan aplikasi web aman kepada pengunjung Anda menggunakan sertifikat gratis Let's Encrypt.