GNU/Linux >> Belajar Linux >  >> Ubuntu

Aktifkan HTTPS di Apache dengan Benar dengan Let's Encrypt di Ubuntu

Tutorial ini akan menunjukkan kepada Anda cara mengaktifkan HTTPS di Apache 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.

Seperti yang mungkin Anda ketahui, Let's Encrypt adalah otoritas sertifikat yang 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 akan mendapat skor A pada pengujian SSL Labs. Jika Anda mengikuti langkah saya, Anda akan mendapatkan skor A+ . Jika Anda telah menerapkan sertifikat Let's Encrypt sebelumnya, Anda masih dapat mengikuti tutorial ini untuk memperbarui dan mengganti sertifikat yang ada.

Sebelum saya menunjukkan langkah-langkah untuk mengaktifkan HTTPS dengan Let's Encrypt, saya ingin berbicara terlebih dahulu tentang catatan CAA, header keamanan dan penjilidan OCSP . Hal-hal inilah yang dapat membantu Anda mendapatkan A+. Saya juga akan menunjukkan cara menangani layanan CDN CloudFlare di akhir tutorial ini.

Catatan:Tutorial ini berfungsi pada semua versi Apache 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.

contoh.com. DI CAA 0 terbitan "letsencrypt.org"

Anda juga dapat menggunakan iodef untuk membuat CA melaporkan permintaan masalah sertifikat berbahaya ke alamat email Anda.

contoh.com. DI CAA 0 iodef "mailto:alamat-email-anda"

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.

gali example.com CAA

Perhatikan bahwa browser web tidak akan memeriksa catatan CAA.

Header Keamanan

Header keamanan sama pentingnya dengan 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 ingin berbicara tentang permintaan upgrade-insecure dan HSTS header karena Anda dapat dengan mudah mengaktifkannya dengan Let's Encrypt untuk meningkatkan keamanan situs 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 sebanyak mungkin dan cara mudah untuk memperbaiki masalah ini adalah dengan mengaktifkan upgrade-insecure-requests 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 OCSP stapel, dalam hal ini server web itu sendiri mengambil respons OCSP yang ditandatangani oleh CA secara berkala dan mengirimkannya 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 staple 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-apache adalah plugin Certbot Apache.

sudo apt install certbot python3-certbot-apache

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 snapdsudo snap install --classic certbot

Catatan :Jika Anda ingin menggunakan versi Snap, Anda harus menggunakan jalur biner lengkap:/snap/bin/certbot .

Menggunakan Plugin Apache untuk Mengaktifkan HTTPS

Jika situs web Anda tidak menggunakan layanan CDN, maka disarankan untuk menggunakan plugin Apache untuk mengaktifkan HTTPS di server web Apache, karena secara otomatis dapat memperoleh sertifikat SSL/TLS dan mengonfigurasinya untuk Anda. Jalankan perintah berikut di server Ubuntu Anda.

sudo certbot --apache --agree-tos --redirect --uir --hsts --staple-ocsp --must-staple -d www.example.com,example.com --email [dilindungi email] 

Penjelasan:

  • --apache :Gunakan autentikator dan penginstal Apache
  • --agree-tos :Setuju dengan persyaratan layanan Let's Encrypt
  • --redirect :Secara otomatis mengalihkan semua lalu lintas HTTP ke HTTPS
  • --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.

Sekarang jika Anda mengunjungi situs web Anda, Anda dapat melihat bahwa HTTP secara otomatis dialihkan ke koneksi HTTPS. Harap perhatikan bahwa klien certbot membuat /etc/Apache2/sites-enabled/example.com-le-ssl.conf Host virtual SSL saat mengonfigurasi SSL untuk situs web Anda.

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, stapel OCSP, 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 Apache mengalihkan HTTP ke HTTPS, lalu WordPress mengalihkan ke domain www atau non-www.

Beberapa orang mungkin berpendapat bahwa Anda dapat kehilangan jus tautan SEO saat melakukan pengalihan 301 ganda. Jika Anda khawatir tentang hal itu, maka Anda dapat menggunakan metode di bawah ini untuk membuat semua versi domain langsung ke tujuan akhir.

Edit file host virtual Anda. (Bukan host virtual SSL)

sudo nano /etc/apache2/sites-enabled/example.com.conf

Klien CertBot menambahkan baris berikut ke file untuk mengarahkan HTTP ke HTTPS.

RewriteEngine onRewriteCond %{SERVER_NAME} =example.com [OR]RewriteCond %{SERVER_NAME} =www.example.comRewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] 

Untuk mengarahkan ulang ke domain www atau non-www, Anda perlu mengubah baris terakhir. Ganti %{SERVER_NAME} dengan versi domain pilihan Anda seperti di bawah ini. (domain www)

RewriteRule ^ https://www.example.com%{REQUEST_URI} [END,NE,R=permanent]

Jika Anda lebih suka domain non-www, ubah ke berikut ini.

RewriteRule ^ https://example.com%{REQUEST_URI} [END,NE,R=permanent]

Kemudian simpan dan tutup file. Kami juga perlu mengedit host virtual SSL.

sudo nano /etc/Apache2/sites-enabled/example.com-le-ssl.conf

Tambahkan baris berikut di atas tag penutup untuk mengalihkan non-www ke domain www.

RewriteEngine onRewriteCond %{SERVER_NAME} =example.comRewriteRule ^ https://www.example.com%{REQUEST_URI} [END,NE,R=permanent]

Jika Anda ingin mengalihkan www ke domain non-www, tambahkan baris berikut sebagai gantinya.

RewriteEngine onRewriteCond %{SERVER_NAME} =www.example.comRewriteRule ^ https://example.com%{REQUEST_URI} [END,NE,R=permanent]

Simpan dan tutup file. Muat ulang layanan Apache agar perubahan diterapkan.

sudo systemctl reload apache2

Agar lebih jelas, di bawah ini adalah screenshot dari file virtual host Apache saya dan file host virtual SSL untuk mengarahkan non-www ke domain www.

File Host Virtual Apache

File Host Virtual SSL Apache

Jika Anda menggunakan WordPress, pastikan Anda menyetel versi domain pilihan Anda di Alamat WordPress dan Alamat Situs sebelum mengedit file host virtual Apache. Jika pengaturan WordPress bertentangan dengan konfigurasi Apache, situs Anda akan berada dalam loop redirect.

Cara Menonaktifkan TLSv1 dan TLSv1.1

TLSv1 dan TLSv1.1 tidak lagi dianggap aman. Untuk menonaktifkannya, edit file konfigurasi opsi Let's Encrypt SSL.

sudo nano /etc/letsencrypt/options-ssl-apache.conf

Temukan baris berikut, yang menonaktifkan SSLv2 dan SSLv3 secara default.

SSLProtocol semua -SSLv2 -SSLv3

Ubah ke berikut untuk juga menonaktifkan TLSv1.0 dan TLSv1.1.

SSLProtocol semua -SSLv2 -SSLv3 -TLSv1 -TLSv1.1

Simpan dan tutup file. Kemudian restart Apache.

sudo systemctl restart Apache2

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 perbarui --quiet &&systemctl reload Apache2

--quiet flag akan menekan pesan normal. Jika Anda ingin menerima pesan kesalahan, tambahkan baris berikut di awal file crontab.

MAILTO=alamat-email-anda

Memuat ulang Apache diperlukan untuk menyajikan sertifikat baru kepada klien.

CloudFlare CDN

Hal pertama yang perlu Anda ketahui adalah 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.
  • Komunikasi 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, mengarahkan HTTP ke HTTPS dan mematikan CloudFlare Universal SSL, browser web akan mengeluh bahwa situs web Anda berada dalam lingkaran pengalihan tak terbatas karena CloudFlare mengalihkan HTTPS ke HTTP.

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.

contoh.com. DI CAA 0 terbitkan "comodoca.com"example.com. DI CAA 0 terbitkan "digicert.com"example.com. DI CAA 0 terbitan "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.

  1. Anda telah menginstal sertifikat Let's Encrypt menggunakan langkah-langkah di atas, sekarang Anda ingin mengaktifkan layanan CDN CloudFlare.
  2. 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 --apache --agree-tos --redirect --uir --hsts --staple-ocsp --must-staple -d www.example.com,example.com --email [dilindungi email] 

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 host virtual Apache dengan Let's Encrypt di Ubuntu . Anda mungkin juga ingin menyiapkan firewall aplikasi web ModSecurity untuk melindungi situs Anda dari peretasan.

  • Cara Menyetel ModSecurity dengan Apache di Debian/Ubuntu

Untuk mempercepat situs web Anda, Anda dapat mengaktifkan protokol HTTP/2 dengan Apache.

  • Cara Mengaktifkan Protokol HTTP/2 dengan Apache di Ubuntu

Seperti biasa, jika menurut Anda postingan ini bermanfaat, berlangganan newsletter gratis kami untuk mendapatkan lebih banyak tutorial.


Ubuntu
  1. Amankan Nginx dengan Let's Encrypt di Ubuntu 18.04 - Bagaimana cara melakukannya?

  2. Cara Menginstal Let's Encrypt dengan Apache di CentOS 7

  3. Cara mengamankan Apache dengan Lets Encrypt di Ubuntu 18.04

  1. Cara Mengamankan Nginx dengan Lets Encrypt Di Ubuntu 20.04 / 18.04

  2. Amankan Apache dengan Lets Encrypt di Ubuntu 18.04

  3. Cara Mengaktifkan Protokol HTTPS dengan Apache 2 di Ubuntu 20.04

  1. Amankan Apache dengan Lets Encrypt di Ubuntu 20.04

  2. Cara Mengatur Apache Subversion dengan Lets encrypt SSL di Ubuntu 18.04

  3. Aktifkan HTTPS dengan Benar di Nginx dengan Let's Encrypt di Ubuntu