WordPress HTTPS, SSL & TLS – panduan untuk administrator situs web
Diterbitkan: 2021-02-01Saat Anda mengunjungi situs web, browser Anda (juga dikenal sebagai klien ) mengirimkan permintaan HTTP ke server web. Setelah server web mengirimkan respons HTTP , browser kemudian dapat merender laman ke layar Anda. Namun, lalu lintas HTTP memiliki masalah; itu adalah protokol plaintext. Ini membuatnya rentan terhadap pengintaian dan campur tangan.
Jika penyerang berada di jaringan yang sama dengan Anda, mereka dapat mencegat dan membaca lalu lintas HTTP Anda. Mereka juga dapat mengubah permintaan Anda ke server, serta tanggapan server kembali kepada Anda. Ini dikenal sebagai serangan Man-in-the-Middle (MitM). Ini dapat dengan mudah terjadi pada WiFi publik, seperti yang ada di lobi hotel dan ruang publik.
Itulah mengapa situs web harus menggunakan HTTPS – sehingga lalu lintas tidak dapat disadap. Artikel ini menjelaskan apa itu HTTPS, SSL, dan TLS. Ini juga menjelaskan bagaimana Anda dapat mengonfigurasi situs web WordPress Anda agar berfungsi di HTTPS.
Daftar Isi
- Apa itu SSL dan TLS?
- Apa itu HTTPS?
- Bagaimana cara kerja HTTPS?
- Jabat tangan TLS
- Kunci publik dan pribadi (keypair)
- Bagaimana cara kerja HTTPS?
- Apakah saya benar-benar membutuhkan HTTPS di situs WordPress saya?
- Mendapatkan sertifikat HTTPS TLS (alias sertifikat SSL)
- HTTPS pada hosting WordPress yang dibagikan dan dikelola
- Mengonfigurasi HTTPS WordPress
- Mengkonfigurasi server web
- Mengonfigurasi URL WordPress ke HTTPS
- Menegakkan TLS di dasbor WordPress (Tips bonus)
- Menambahkan Keamanan Transportasi Ketat HTTP (HSTS)
- Mengkonfigurasi HSTS di server web
- TLS Cipher
- WordPress saya berjalan di HTTPS, apakah aman?
Apa itu SSL dan TLS?
Setelah internet mulai berkembang, menjadi jelas bahwa kami membutuhkan mekanisme untuk mentransfer informasi secara aman antara klien dan server tanpa ada yang bisa menguping atau mengubah lalu lintas — masukkan SSL, atau Secure Socket Layer. SSL adalah protokol keamanan Internet, pertama kali dikembangkan oleh Netscape pada tahun 1995 untuk mengatasi masalah ini.
Lebih khusus lagi, SSL ditetapkan untuk mencapai hal-hal berikut:
- Enkripsi — untuk mengenkripsi lalu lintas sehingga tidak dapat dicegat oleh pihak ketiga yang tidak berwenang dengan menguping,
- Otentikasi — untuk memastikan server yang diajak bicara klien memang server yang mereka katakan,
- Integritas — untuk memastikan bahwa data yang dikirim antara klien dan server tidak diubah oleh orang lain di sepanjang jalan.
Namun, seiring waktu peneliti keamanan mengidentifikasi sejumlah masalah keamanan di SSL. Oleh karena itu SSL digantikan oleh TLS (Transport Layer Security protocol). Meskipun perbedaan mendasar antara SSL dan TLS sangat drastis, tujuan TLS sebagian besar tetap sama.
CATATAN: Anda mungkin sering melihat SSL digunakan untuk merujuk ke TLS. SSL adalah protokol lama dan tidak lagi aman untuk digunakan. Namun karena kepopulerannya banyak yang masih menggunakan SSL sebagai akronim, padahal yang dimaksud TLS .
Apa itu HTTPS?
HTTPS, atau Hypertext Transfer Protocol Secure adalah versi aman dari protokol HTTP. HTTPS bergantung pada Transport Layer Security (TLS), protokol yang ditingkatkan dan lebih aman daripada yang digunakan sebelumnya, Secure Socket Layer (SSL). TLS menyediakan enkripsi, otentikasi, dan integritas untuk permintaan dan tanggapan HTTPS.
Anda dapat menganggap HTTPS sebagai permintaan dan tanggapan HTTP (itulah versi teks biasa dari protokol) yang melewati terowongan TLS . Istilah teknis untuk ini adalah enkapsulasi . Penting untuk dicatat bahwa TLS dapat digunakan untuk merangkum protokol lain, bukan hanya HTTP.
Anda dapat melihat situs web yang menggunakan HTTPS dengan melihat awal URL (dimulai dengan HTTPS) di bilah navigasi browser atau dengan gembok hijau. Jika Anda menjelajahi situs web di HTTP, browser menandainya sebagai Tidak Aman .
Bagaimana cara kerja HTTPS?
Saat Anda meminta halaman web menggunakan HTTPS, browser dan server web Anda memulai proses yang disebut handshake TLS . Jabat tangan TLS adalah cara bagi klien dan server untuk memutuskan apakah dan bagaimana mereka harus berkomunikasi. Selama jabat tangan TLS, klien dan server melakukan hal berikut:
- memutuskan versi protokol TLS yang akan digunakan (TLS 1.0, 1.2, 1.3…),
- menyepakati suite sandi mana (satu set algoritme enkripsi yang digunakan untuk membangun komunikasi yang aman) yang akan digunakan,
- mengotentikasi identitas server,
- menghasilkan kunci enkripsi untuk digunakan setelah jabat tangan selesai, untuk berkomunikasi dengan aman.
Jabat tangan TLS
Selama jabat tangan TLS, server mengirim klien itu sertifikat agar klien memverifikasi bahwa mereka dapat mengotentikasi server. Sertifikat mirip dengan paspor — dikeluarkan oleh otoritas pusat tepercaya yang disebut Certificate Authority (CA) yang secara independen menetapkan identitas situs web yang dapat dibuktikan ke browser Anda.
Kunci publik dan pribadi (keypair)
Sertifikat TLS (sering disebut sebagai sertifikat SSL) yang dikirim server web ke klien berisi kunci publik . Kunci publik adalah salah satu dari dua kunci khusus yang disebut keypair . Sebuah keypair terdiri dari dua kunci; kunci publik dan kunci privat . Sementara kunci publik dibagikan dengan klien, kunci pribadi dirahasiakan di server dan tidak pernah diungkapkan. Pasangan kunci ditempa bersama.
Pasangan kunci publik dan pribadi memiliki hubungan yang sangat menarik — tanpa mengetahui kunci pribadi server (ini rahasia dan hanya server yang harus mengetahuinya), klien dapat mengenkripsi data menggunakan kunci publik server yang dapat didekripsi oleh server menggunakan kunci pribadinya .
Jika ini terdengar membingungkan, pikirkan ini seolah-olah "server" mengirim "browser" Anda sebuah koper terbuka (kunci publik) yang dilindungi dengan gembok — setelah Anda memasukkan sesuatu ke dalam koper dan mengunci gembok, hanya "server" dengan kunci gembok (private key) bisa melihat apa yang ada di dalamnya.
Apakah saya benar -benar membutuhkan HTTPS di situs WordPress saya?
Ya. Apa pun jenis lalu lintas yang dilayani situs web Anda (baik itu informasi pengenal pribadi (PII), data pemegang kartu, atau gambar kucing) sama sekali tidak ada alasan mengapa Anda tidak boleh melayani situs web Anda melalui HTTPS.
Pertama-tama, ketika Anda menjalankan situs web Anda di HTTP, peretas dapat dengan mudah mencuri kata sandi dan kredensial WordPress Anda dan meretas ke situs web Anda. Mereka dapat melakukan semua ini dengan menggunakan alat yang tersedia secara bebas.
Selain manfaat keamanan dan pengalaman pengguna yang lebih baik, protokol HTTP/2 baru, yang menawarkan beberapa manfaat kinerja, tidak dapat digunakan tanpa TLS di dalam browser web. Selain itu, HTTPS juga memiliki manfaat Search Engine Optimization (SEO) dan merupakan bagian dari algoritma peringkat pencarian Google.
Mendapatkan sertifikat HTTPS TLS (alias sertifikat SSL)
Untuk mengatur HTTPS, Anda memerlukan sertifikat TLS jika Anda mengatur semuanya sendiri. Meskipun Anda akan melihat lusinan penawaran sertifikat TLS berbayar, Anda bisa mendapatkan sertifikat TLS gratis dari Otoritas Sertifikat nirlaba yang disebut Let's Encrypt. Sama sekali tidak ada perbedaan antara sertifikat yang Anda dapatkan dari Let's Encrypt secara gratis dan yang Anda bayar.
HTTPS pada hosting WordPress yang dibagikan dan dikelola
Harap dicatat bahwa untuk solusi hosting terkelola atau bersama, penyedia hosting Anda mungkin atau mungkin tidak mengenakan biaya untuk menambahkan HTTPS — jika ini masalahnya, sebelum mengeluarkan uang untuk mendapatkan sertifikat, tanyakan dukungan pelanggan mereka apakah Anda dapat menggunakan sertifikat Let's Encrypt dengan mereka layanan sebagai gantinya. Forum komunitas Let's Encrypt juga merupakan sumber yang bagus yang dapat membantu Anda.
Mengonfigurasi HTTPS WordPress (menerapkan TLS di seluruh situs WordPress Anda)
Ada beberapa cara untuk menerapkan TLS di situs WordPress Anda tergantung pada pengaturan Anda. Dalam kebanyakan kasus, Anda akan mengonfigurasi server web Anda untuk mengalihkan semua lalu lintas HTTP ke HTTPS (lihat generator konfigurasi SSL Mozilla.
Anda juga perlu mengonfigurasi WordPress untuk mendengarkan di HTTPS. Anda dapat melakukannya dengan plugin seperti Really Simple SSL atau WP force SSL. Dalam contoh ini, kita akan melihat bagaimana melakukannya tanpa menggunakan plugin tambahan.
Mengkonfigurasi server web
Perhatian
- Berhati-hatilah saat menyalin/menempel konfigurasi server web dan pastikan Anda tahu persis apa yang mereka lakukan dengan melihat dokumentasi server web Anda
- Anda mungkin menemukan banyak contoh online menggunakan %{HTTP_HOST} (Server HTTP Apache), atau $http_host (Nginx) — keduanya dapat membuat situs web Anda rentan terhadap serangan header host HTTP — sebagai gantinya, ketik nama host Anda di konfigurasi Anda seperti yang terlihat di bawah.
Jika Anda menggunakan Nginx, Anda dapat mengonfigurasi yang berikut:
server { listen 80; server_name example.com www.example.com; return 301 https://example.com$request_uri; }
Atau, jika Anda menggunakan Apache HTTP Server, Anda dapat mengonfigurasi yang berikut ini:
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://www.example.com%{REQUEST_URI} [L,R=301] <IfModule>
Mengonfigurasi URL WordPress ke HTTPS
Setelah Anda mengaktifkan HTTPS di server web, Anda juga harus menyiapkan WordPress. Secara teori Anda dapat melakukan ini secara manual: cukup ubah Alamat WordPress dan Alamat Situs di pengaturan umum WordPress. Anda juga perlu melakukan pencarian dan penggantian di database untuk mengubah semua tautan situs web Anda dari HTTP ke HTTPS.
[SCREENSHOT]
Jadi kemungkinan besar jauh lebih mudah menggunakan plugin untuk mengalihkan situs WordPress Anda ke HTTPS. Anda dapat menggunakan plugin populer seperti Really Simple SSL untuk membantu Anda melalui proses tersebut.
Menegakkan TLS di dasbor WordPress
TLS hanya berguna jika sedang digunakan. Karena itu, Anda ingin memastikan bahwa situs WordPress Anda tidak hanya mendukung TLS, tetapi juga menerapkannya. Karena dasbor WordPress harus selalu diakses melalui HTTPS, WordPress menyertakan opsi konfigurasi khusus FORCE_SSL_ADMIN, yang dapat disetel ke true di wp-config.php.
define('FORCE_SSL_ADMIN', true);
Perhatian
- Bergantung pada penyiapan dan konfigurasi situs web Anda (khususnya, jika Anda menggunakan proxy terbalik), ini dapat menyebabkan permintaan ke dasbor WordPress Anda masuk ke loop pengalihan tak terbatas. Untuk informasi lebih lanjut tentang cara memperbaikinya, lihat dokumentasi WordPress dan selalu uji perubahan Anda di lingkungan staging sebelum meluncurkannya ke produksi.
- Selain itu, pastikan Anda sudah memiliki TLS yang dikonfigurasi dan berfungsi dengan benar sebelum menyetel FORCE_SSL_ADMIN ke true.
KIAT BONUS 1: Menambahkan Keamanan Transportasi Ketat HTTP (HSTS)
Meskipun mengalihkan semua lalu lintas Anda ke HTTPS adalah langkah yang bagus, sayangnya, penyerang mungkin masih memiliki beberapa trik. Serangan yang dikenal sebagai strip SSL akan memungkinkan penyerang mengelabui browser untuk menjelajahi situs dalam HTTP alih-alih HTTPS yang aman, secara efektif mengalahkan kerja keras Anda sama sekali.
Untuk detail lebih lanjut (sangat teknis) tentang serangan strip SSL, tonton pembicaraan oleh Moxie Marlinspike di bawah ini.
Akibatnya, browser sekarang menerapkan HTTP Strict Transport Security, atau HSTS. HSTS tidak lain hanyalah header HTTP sederhana yang memberi tahu browser bahwa situs web khusus ini tidak boleh diakses melalui HTTP, mengalahkan serangan strip SSL apa pun.
Mengkonfigurasi HSTS di server web
Perhatian
- Jangan aktifkan HSTS sampai Anda yakin dengan HTTPS — setiap pengunjung yang menerima header HTTP ini hanya akan dapat melihat situs Anda melalui HTTPS
- Selalu atur atribut max-age — opsional, Anda dapat memilih untuk menetapkan nilai rendah saat pertama kali menerapkan HSTS (untuk membatasi potensi masalah) dan meningkatkannya saat Anda lebih percaya diri menggunakan HSTS
Jika Anda menggunakan Nginx, Anda dapat mengonfigurasi yang berikut ini di dalam blok server yang mendengarkan pada port 443:
# HSTS (ngx_http_headers_module is required) (63072000 seconds) add_header Strict-Transport-Security "max-age=63072000" always;
Atau, jika Anda menggunakan Apache HTTP Server, Anda dapat mengonfigurasi yang berikut ini dalam mendengarkan VirtualHost Anda pada port 443:
# HTTP Strict Transport Security (mod_headers is required) (63072000 seconds) Header always set Strict-Transport-Security "max-age=63072000"
Kiat Bonus 2: Mengonfigurasi TLS Cipher
Untuk memastikan bahwa transfer data antara browser dan server aman, kedua belah pihak setuju untuk menggunakan apa yang dikenal sebagai cipher suite — kombinasi algoritma otentikasi, enkripsi, dan kode otentikasi pesan (MAC) — untuk merundingkan pengaturan keamanan , serta untuk mentransfer data dengan aman.
Sayangnya, banyak sandi lama memiliki kerentanan keamanan dan tidak terlalu aman untuk digunakan lagi. Saat memutuskan cipher mana yang akan digunakan adalah bisnis yang rumit, Mozilla SSL Configuration Generator membuatnya mudah untuk memilih rangkaian cipher TLS yang sesuai dengan kebutuhan Anda. Jika memungkinkan, coba dan gunakan profil modern atau menengah, namun, tergantung pada kasus penggunaan Anda, terutama jika Anda perlu mendukung browser lawas atau memenuhi persyaratan peraturan dan kepatuhan, Anda mungkin perlu menggunakan konfigurasi cipher suite yang sedikit berbeda.
Jika Anda menggunakan Nginx, Anda dapat mengonfigurasi cipher TLS berikut (berdasarkan profil perantara Mozilla SSL Configuration Generator):
# intermediate configuration ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES25 6-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDH E-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off;
Atau, jika Anda menggunakan Apache HTTP Server, Anda mengonfigurasi cipher TLS berikut (berdasarkan profil perantara Mozilla SSL Configuration Generator):
# intermediate configuration SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 SSLCipherSuite 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 SSLHonorCipherOrder off SSLSessionTickets off
Anda juga dapat menguji skor konfigurasi TLS situs web Anda menggunakan alat gratis yang disebut SSLabs untuk wawasan teknis yang lebih banyak lagi.
WordPress saya berjalan di HTTPS, apakah aman?
Ikon gembok hijau dan kata-kata "aman" di sebelah bilah alamat browser Anda mungkin membuat Anda percaya bahwa HTTPS adalah tongkat ajaib yang menyelesaikan semua masalah keamanan situs web. Sayangnya, tidak.
HTTPS hanyalah sebagian kecil dari keamanan WordPress: HTTPS memungkinkan pengunjung menjelajahi situs web Anda melalui koneksi yang aman . Namun itu tidak melindungi situs web Anda seperti firewall WordPress, atau membuatnya lebih aman. Ini tidak berarti bahwa itu lebih aman daripada situs web yang berjalan di HTTP juga. Seperti pertahanan keamanan lainnya, HTTPS membantu memecahkan sebagian masalah.
Dengan kata lain, meskipun Anda tentu harus menerapkan dan menerapkan HTTPS, itu tidak berarti Anda dapat tenang dan tidak pernah khawatir tentang keamanan lagi. Anda tetap harus:
- Tambahkan otentikasi dua faktor
- Instal plugin pemantauan integritas file
- Terapkan kebijakan kata sandi WordPress yang kuat
- Simpan log aktivitas WordPress sebagai catatan semua perubahan yang terjadi di situs web Anda
- Gunakan firewall yang bagus.