Tutorial ini menunjukkan cara mengaktifkan HTTPS di Nginx dengan benar dengan Let's Encrypt di Ubuntu. Google Chrome dan Firefox telah mulai menandai halaman web yang tidak terenkripsi dengan kotak masukan kata sandi sebagai tidak aman. Akhirnya semua halaman web HTTP akan ditandai sebagai tidak aman. HTTPS akan menjadi default untuk situs web apa pun. Ini juga merupakan persyaratan jika Anda ingin menggunakan protokol HTTP/2 untuk mempercepat situs web Anda.
Let's Encrypt adalah otoritas sertifikat gratis, otomatis, dan terbuka. Dokumentasi resmi menjelaskan langkah-langkah sederhana yang dapat Anda ikuti untuk mengaktifkan HTTPS dengan Let's Encrypt, tetapi ada lebih dari itu. Jika Anda mengikuti dokumen resmi, Anda mendapatkan skor A pada tes SSL Labs. Jika Anda mengikuti langkah saya, Anda akan mendapatkan A+ skor. Jika Anda telah menerapkan sertifikat Let's Encrypt sebelumnya, Anda masih dapat mengikuti tutorial ini untuk memperbarui dan mengganti sertifikat yang ada.
Tutorial ini dibagi menjadi 3 bagian.
- Bagian pertama adalah tentang catatan CAA, header keamanan dan penjilidan OCSP . Hal-hal inilah yang dapat membantu Anda mendapatkan A+ .
- Bagian kedua tentang pengalihan domain www ke domain non-www dan sebaliknya.
- Saya akan menunjukkan cara menangani layanan CDN CloudFlare di bagian ketiga.
Catatan:Tutorial ini berfungsi pada semua versi Nginx dan Ubuntu saat ini (termasuk 16.04, 18.04, dan 20.04).
Membuat Catatan CAA untuk Nama Domain Anda
Otorisasi Otoritas Sertifikat (CAA) adalah catatan sumber daya DNS yang menentukan otoritas sertifikat (CA) mana yang diizinkan untuk mengeluarkan sertifikat untuk nama domain tertentu. Mulai September 2017, Semua CA diberi mandat untuk memeriksa catatan CAA sebelum menerbitkan sertifikat untuk nama domain tertentu. Jika tidak ada catatan CAA yang ditemukan untuk nama domain, maka CA mana pun dapat menerbitkan sertifikat untuk nama domain tersebut. Jika CA tidak tercantum dalam catatan CAA Anda, maka CA tersebut tidak dapat menerbitkan sertifikat untuk nama domain Anda.
Untuk membuat catatan CAA yang memungkinkan Let's Encrypt menerbitkan sertifikat untuk nama domain Anda, tambahkan entri berikut di server DNS atau pengelola DNS Anda.
example.com. IN CAA 0 issue "letsencrypt.org"
Anda juga dapat menggunakan iodef untuk membuat laporan CA permintaan masalah sertifikat berbahaya ke alamat email Anda.
example.com. IN CAA 0 iodef "mailto:your-email-address"
Format catatan di atas adalah untuk file zona. Berikut adalah beberapa tips untuk Anda.
- Anda dapat menggunakan SSLMate CAA Record Helper untuk menghasilkan data CCA untuk nama domain Anda.
- Jika Anda menggunakan DNS GoDaddy, ikuti postingan ini untuk menambahkan data CAA.
Anda dapat menggunakan perintah dig berikut untuk memeriksa catatan CAA Anda.
dig example.com CAA
Perhatikan bahwa browser web tidak memeriksa catatan CAA.
Header Keamanan
Header keamanan sama pentingnya dengan protokol HTTPS, tetapi hanya sebagian kecil situs yang mendukung HTTPS yang memperhatikan header keamanan. Meskipun diskusi lengkap tentang header keamanan berada di luar cakupan tutorial ini, saya akan berbicara tentang permintaan upgrade-insecure- dan HSTS tajuk, karena Anda dapat dengan mudah mengaktifkannya dengan Let's Encrypt untuk meningkatkan keamanan situs web Anda.
Tingkatkan Permintaan Tidak Aman
Ada kalanya situs telah mengaktifkan HTTPS, tetapi beberapa CSS, gambar, atau JavaScript masih disajikan melalui HTTP. Dalam hal ini, gembok hijau di awal bilah alamat browser akan hilang. Di Google Chrome, itu diganti dengan ikon info; Di Firefox, itu diganti dengan gembok abu-abu dengan segitiga kuning. Anda akan ingin menunjukkan gembok hijau kepada pengunjung situs sesering mungkin dan cara mudah untuk memperbaiki masalah ini adalah dengan mengaktifkan permintaan peningkatan-tidak aman header, yang akan memaksa browser web untuk menggunakan https:// untuk setiap http:// sumber daya.
Untuk mengaktifkan header ini, cukup tambahkan --uir
tandai saat mengeluarkan certbot memerintah. Perhatikan bahwa tajuk ini berfungsi pada sumber daya yang dihosting di domain Anda sendiri dan sumber daya di domain pihak ketiga yang mendukung HTTPS. Jika laman web Anda menyertakan sumber daya di server pihak ketiga yang tidak tersedia melalui HTTPS, maka sumber daya tersebut akan diblokir oleh browser web, tetapi menggunakan tajuk ini memastikan bahwa laman web Anda selalu mendapatkan gembok hijau.
HSTS (Keamanan Transportasi Ketat HTTP)
Header HSTS memberi tahu browser web bahwa semua komunikasi dengan situs web Anda harus dilakukan melalui HTTPS. Itu bertahan melawan SSL Striping, yang merupakan serangan untuk menurunkan versi dari HTTPS ke HTTP. Untuk mengaktifkan header ini, cukup tambahkan --hsts
tandai saat mengeluarkan certbot perintah.
Penjilidan OCSP
Ketika browser web terhubung ke situs web HTTPS, itu mengirimkan permintaan OCSP (Protokol Status Sertifikat Online) ke otoritas sertifikat (CA) untuk menanyakan status pencabutan sertifikat SSL situs web. Ini dapat menunda pemuatan halaman hingga 1-3 detik, menurut data telemetri Firefox.
Untuk meningkatkan kinerja, pemilik situs web dapat mengaktifkan stapel OCSP, dalam hal ini server web itu sendiri mengambil respons OCSP yang ditandatangani oleh CA secara berkala. Saat browser web terhubung ke situs, Nginx dapat mengirim respons OCSP yang di-cache ke browser web, sehingga menghilangkan kebutuhan browser web untuk menghubungi server OCSP.
Untuk mengaktifkan stapel OCSP, cukup tambahkan --staple-ocsp
tandai saat mengeluarkan certbot perintah.
OCSP Harus Menjepret
Jika seorang peretas membuat situs web palsu, duplikat, matikan OCSP staples dan juga memblokir akses browser web ke server OCSP, maka browser web akan menganggapnya baik-baik saja dan melanjutkan ke situs web jahat. Untuk mengatasi masalah ini, Anda dapat mengaktifkan OCSP must staple di situs web Anda, yang memberi tahu browser web bahwa respons pokok OCSP harus disajikan oleh situs web Anda selama koneksi HTTPS. Jadi, ketika browser web terhubung ke situs web palsu yang tidak memiliki staples OCSP, koneksi akan dihentikan.
Untuk mengaktifkan OCSP must staple, tambahkan --must-staple
tandai saat mengeluarkan certbot perintah.
Menginstal Let's Encrypt Client (Certbot) di Ubuntu
Sekarang saatnya mengotori tangan Anda. Mulai Ubuntu 16.04, klien Let's Encrypt (Certbot) disertakan dalam repositori Ubuntu, sehingga Anda dapat menginstalnya dengan perintah berikut. Python3-certbot-nginx adalah plugin Certbot Nginx.
sudo apt install certbot python3-certbot-nginx
Untuk memeriksa nomor versi, jalankan
certbot --version
Contoh keluaran:
certbot 0.31.0
Jika Anda ingin menggunakan versi terbaru, Anda dapat menginstal Certbot dari toko Snap.
sudo apt install snapd sudo snap install --classic certbot
Catatan :Jika Anda ingin menggunakan versi Snap, Anda harus menggunakan jalur biner lengkap:/snap/bin/certbot
.
Menggunakan Plugin Certbot Nginx untuk Mengaktifkan HTTPS
Jika situs web Anda tidak menggunakan layanan CDN, maka disarankan untuk menggunakan plugin Nginx untuk mengaktifkan HTTPS di server web Nginx, karena secara otomatis dapat memperoleh sertifikat SSL/TLS dan mengonfigurasinya untuk Anda. Jalankan perintah berikut di server Ubuntu Anda.
sudo certbot --nginx --agree-tos --redirect --uir --hsts --staple-ocsp --must-staple -d www.example.com,example.com --email [email protected]
Dimana:
--nginx
:Gunakan autentikator dan penginstal Nginx--agree-tos
:Setuju dengan persyaratan layanan Let's Encrypt--redirect
:Tambahkan pengalihan 301.--uir
:Tambahkan header “Content-Security-Policy:upgrade-insecure-requests” ke setiap respons HTTP.--hsts
:Tambahkan header Strict-Transport-Security ke setiap respons HTTP.--staple-ocsp
:Mengaktifkan Stapel OCSP.--must-staple
:Menambahkan ekstensi OCSP Must Staple ke sertifikat.-d
flag diikuti oleh daftar nama domain, dipisahkan dengan koma. Anda dapat menambahkan hingga 100 nama domain.--email
:Email yang digunakan untuk pendaftaran dan kontak pemulihan.
Anda akan ditanya apakah Anda ingin menerima email dari EFF (Electronic Frontier Foundation). Setelah memilih Y atau T, sertifikat SSL Anda akan secara otomatis diperoleh dan dikonfigurasi untuk Anda, yang ditunjukkan oleh pesan di bawah ini.
/etc/letsencrypt/live/example.com/fullchain.pem
:Rantai lengkap sertifikat Root CA, sertifikat CA perantara, dan sertifikat server Anda./etc/letsencrypt/live/example.com/privkey.pem
:Kunci pribadi server Anda
Sekarang jika Anda mengunjungi situs web Anda, Anda dapat melihat bahwa HTTP secara otomatis dialihkan ke koneksi HTTPS. Ternyata plugin Nginx saat ini tidak mendukung --uir
bendera. Untuk menambahkan header upgrade-insecure-requests secara manual, edit file blok server Nginx Anda.
sudo nano /etc/nginx/conf.d/example.com
.conf
Tambahkan baris berikut di blok server SSL.
add_header Content-Security-Policy upgrade-insecure-requests;
Sebaiknya tambahkan juga resolver DNS di blok server SSL.
resolver 8.8.8.8;
Jika Anda tidak menambahkan resolver, Anda mungkin melihat pesan berikut di log kesalahan Nginx.
[warn] 559#559: no resolver defined to resolve ocsp.int-x3.letsencrypt.org while requesting certificate status, responder: ocsp.int-x3.letsencrypt.org
Simpan dan tutup file. Kemudian muat ulang Nginx agar perubahan diterapkan.
sudo systemctl reload nginx
Kiat Pemecahan Masalah
Jika Anda melihat pesan kesalahan berikut saat menjalankan perintah certbot, Anda hanya perlu menjalankan perintah certbot lagi, karena ini merupakan kegagalan sementara dalam resolusi DNS.
An unexpected error occurred: Traceback (most recent call last): File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 159, in _new_conn conn = connection.create_connection( File "/usr/lib/python3/dist-packages/urllib3/util/connection.py", line 61, in create_connection for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): File "/usr/lib/python3.8/socket.py", line 918, in getaddrinfo for res in _socket.getaddrinfo(host, port, family, type, proto, flags): socket.gaierror: [Errno -3] Temporary failure in name resolution
Menguji Sertifikat SSL Anda
Buka ssllabs.com untuk menguji sertifikat dan konfigurasi SSL Anda. Seperti yang saya janjikan, Anda mendapatkan A+ . Anda juga dapat memeriksa apakah nama domain Anda telah mengaktifkan data CAA, apakah server Anda telah mengaktifkan HSTS, OCSP stapel, dan OCSP harus menstaples.
Mengalihkan WWW ke Non-WWW (Atau Sebaliknya)
Kami telah mengaktifkan pengalihan HTTP ke HTTPS, yang tersisa untuk dilakukan adalah mengarahkan ulang www ke non-www, atau sebaliknya. Jika Anda menggunakan WordPress, maka itu sangat mudah. Cukup buka Dasbor WordPress> Setelan> Umum dan atur versi pilihan Anda (www atau non-www) di Alamat WordPress dan Alamat Situs .
Jika Anda mengikuti rute itu, Anda akan berakhir dengan apa yang dikenal sebagai pengalihan 301 ganda. Pertama, server Nginx mengarahkan HTTP ke HTTPS, lalu WordPress mengalihkan ke domain www atau non-www. Beberapa orang mungkin berpendapat bahwa pengalihan 301 ganda dapat merusak SEO situs Anda. Jika Anda khawatir tentang hal itu, maka Anda dapat menggunakan metode di bawah ini untuk membuat semua versi domain langsung ke tujuan akhir.
Edit blok server Nginx Anda.
sudo nano /etc/nginx/conf.d/example.com.conf
Klien CertBot menambahkan baris berikut ke file untuk mengarahkan HTTP ke HTTPS.
if ($scheme != "https") { return 301 https://$host$request_uri; } # managed by Certbot
Anda dapat menghapus 3 baris tersebut dan mengedit konfigurasi blok server Anda seperti tangkapan layar di bawah ini untuk mengalihkan non-www ke domain www.
- Blok server pertama mendengarkan pada port 80. Ini berisi pengalihan 301 untuk mengalihkan HTTP ke HTTPS.
- Blok server kedua mendengarkan pada port 443. Ini berisi pengalihan 301 untuk mengalihkan non-www ke domain www.
Jika Anda ingin mengalihkan www ke domain non-www, maka ubah
return 301 https://www.example.com$request_uri;
untuk
return 301 https://example.com$request_uri;
Dan ubah server_name
direktif di blok server SSL.
Simpan dan tutup file. Uji konfigurasi Nginx.
sudo nginx -t
Jika pengujian berhasil, muat ulang Nginx agar perubahan diterapkan.
sudo systemctl reload nginx
Jika Anda menggunakan WordPress, pastikan Anda menyetel versi domain pilihan Anda di Alamat WordPress dan Alamat Situs sebelum mengedit file konfigurasi blok server Nginx. Jika pengaturan WordPress bertentangan dengan konfigurasi Nginx, situs Anda akan berada dalam lingkaran pengalihan.
Cara Mengaktifkan Protokol HTTP/2
Untuk mengaktifkan protokol HTTP/2 di Nginx, cukup buka file virtual host Nginx Anda dan temukan baris berikut.
listen 443 ssl;
Tambahkan http2
di akhir.
listen 443 ssl http2;
Simpan dan tutup file. Kemudian muat ulang Nginx.
sudo systemctl reload nginx
Cara Menonaktifkan TLSv1 dan TLSv1.1
TLSv1 dan TLSv1.1 tidak lagi dianggap aman. Mulai 31-01-2020, SSL Labs membatasi server yang mendukung TLS 1.0 atau TLS 1.1 menjadi B nilai. Untuk menonaktifkannya, edit file konfigurasi opsi Let's Encrypt SSL.
sudo nano /etc/letsencrypt/options-ssl-nginx.conf
Temukan baris berikut.
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
Hapus versi TLS yang dihapus secara bertahap.
ssl_protocols TLSv1.2
Simpan dan tutup file. Kemudian mulai ulang Nginx.
sudo systemctl restart nginx
Cara Mengaktifkan TLS 1.3
Silakan baca artikel berikut:
- Cara Mudah Mengaktifkan TLS 1.3 di Nginx di Ubuntu 20.04, 18.04, 16.04
Cara Mengaktifkan IPv6 di Nginx
Jika server Anda memiliki alamat IPv6 dan nama domain Anda memiliki data AAAA, maka Anda harus mengaktifkan IPv6 di Nginx. Tambahkan baris berikut di blok server HTTP.
listen [::]:80;
Dan tambahkan baris berikut di blok server HTTPS.
listen [::]:443 ssl http2;
Simpan dan tutup file. Muat ulang Nginx dan selesai.
sudo systemctl reload nginx
Perpanjangan Otomatis Sertifikat
Untuk memperbarui sertifikat Let's Encrypt secara otomatis, cukup edit file crontab pengguna root.
sudo crontab -e
Kemudian tambahkan baris berikut di bagian bawah.
@daily certbot renew --quiet && systemctl reload nginx
--quiet
flag akan menekan output standar. Jika Anda ingin menerima kesalahan standar, tambahkan baris berikut di awal file crontab.
MAILTO=[email protected]
Memuat ulang Nginx diperlukan untuk menyajikan sertifikat baru kepada klien.
Menyetel PATH di Crontab
Terkadang Cron mengirimi saya pesan berikut, yang juga dapat dilihat di /var/log/letsencrypt/letsencrypt.log
berkas.
Could not choose appropriate plugin for updaters: The nginx plugin is not working; there may be problems with your existing configuration. The error was: NoInstallationError()
Penyebab kesalahan ini adalah bahwa secara default PATH di Cron diatur ke
PATH=/usr/bin:/bin
Tetapi biner nginx terletak di /usr/sbin/nginx
, Cron tidak dapat menemukannya dengan PATH default. Untuk memperbaiki kesalahan ini, tambahkan baris berikut di awal file Crontab.
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
CloudFlare CDN
Jika Anda ingin menginstal sertifikat Let's Encrypt di server Anda dan pada saat yang sama menggunakan layanan CDN CloudFlare, maka Anda harus mengaktifkan SSL Universal CloudFlare di situs Anda, yang berarti
- Koneksi antara pengunjung situs dan server tepi CloudFlare dienkripsi menggunakan sertifikat SSL Universal CloudFlare
- Koneksi antara server asal Anda dan server tepi CloudFlare dienkripsi menggunakan sertifikat yang diterbitkan Let's Encrypt.
Jika Anda menginstal sertifikat Let's Encrypt di server asal Anda dan mengarahkan HTTP ke HTTPS, tetapi menonaktifkan SSL Universal CloudFlare, browser Web akan mengeluh bahwa situs web Anda berada dalam lingkaran pengalihan tak terbatas karena CloudFlare mengalihkan HTTPS ke HTTP saat SSL Universal tidak diaktifkan.
Hal kedua yang perlu Anda ketahui adalah jika Anda ingin mengaktifkan catatan CAA saat menggunakan CloudFlare Universal SSL, maka Anda juga perlu membuat catatan CAA berikut.
example.com. IN CAA 0 issue "comodoca.com" example.com. IN CAA 0 issue "digicert.com" example.com. IN CAA 0 issue "globalsign.com
Ikuti posting ini untuk menambahkan catatan CAA untuk sertifikat SSL Universal CloudFlare.
Jadi bagaimana Anda menginstal sertifikat Let's Encrypt dengan CloudFlare? Nah, ada dua skenario.
- Anda telah menginstal sertifikat Let's Encrypt menggunakan langkah-langkah di atas, sekarang Anda ingin mengaktifkan layanan CDN CloudFlare.
- Situs web Anda menggunakan layanan CDN CloudFlare, sekarang Anda ingin menginstal sertifikat Let's Encrypt di server asal Anda.
Skenario Pertama
Jika Anda berada dalam skenario pertama, maka Anda dapat melanjutkan dan mengaktifkan layanan CloudFlare CDN dan juga mengaktifkan CloudFlare Universal SSL di Dashboard CloudFlare dengan masuk ke Crypto> SSL dan memilih Penuh (Ketat) . Situs Anda akan berfungsi dengan baik tanpa masalah.
Skenario Kedua
Jika Anda menggunakan CloudFlare CDN dan sekarang Anda ingin menginstal Let's Encrypt di server asal Anda, jalankan perintah berikut untuk mendapatkan dan menginstal sertifikat Let's Encrypt TLS.
sudo certbot --nginx --agree-tos --redirect --uir --hsts --staple-ocsp --must-staple -d www.example.com,example.com --email [email protected]
Setelah sertifikat diperoleh dan diinstal di server Anda, buka dasbor Cloudflare dan aktifkan CloudFlare Universal SSL.
Langkah Selanjutnya
Saya harap tutorial ini membantu Anda mengaktifkan HTTPS di Nginx dengan Let's Encrypt di Ubuntu . Anda mungkin juga ingin mengatur firewall aplikasi web ModSecurity untuk melindungi situs WordPress Anda dari peretasan.
- Cara Mengatur ModSecurity dengan Nginx di Debian/Ubuntu
Seperti biasa, jika menurut Anda postingan ini bermanfaat, berlangganan newsletter gratis kami untuk mendapatkan lebih banyak tips dan trik. Hati-hati