Mengaktifkan HTTPS di server Anda

Chris Palmer
Chris Palmer

Halaman ini berisi panduan untuk menyiapkan HTTPS di server Anda, termasuk langkah-langkah berikut:

  • Membuat pasangan kunci publik/privat RSA 2048-bit.
  • Membuat permintaan penandatanganan sertifikat (CSR) yang akan menyematkan kunci publik Anda.
  • Membagikan CSR Anda bersama Otoritas Sertifikat (CA) untuk menerima sertifikat final atau rantai sertifikat.
  • Menginstal sertifikat final Anda di tempat yang tidak dapat diakses web seperti /etc/ssl (Linux dan Unix) atau di mana saja yang diperlukan oleh IIS (Windows).

Membuat kunci dan permintaan penandatanganan sertifikat

Bagian ini menggunakan program command line openssl, yang disertakan dengan sebagian besar sistem Linux, BSD, dan Mac OS X, untuk membuat kunci pribadi dan publik serta CSR.

Membuat pasangan kunci publik/pribadi

Untuk memulai, buat pasangan kunci RSA 2.048-bit. Kunci yang lebih pendek dapat dipecahkan oleh serangan tebakan brute force, dan kunci yang lebih panjang menggunakan resource yang tidak perlu.

Gunakan perintah berikut untuk membuat pasangan kunci RSA:

openssl genrsa -out www.example.com.key 2048

Tindakan ini akan memberikan output berikut:

Generating RSA private key, 2048 bit long modulus
.+++
.......................................................................................+++
e
is 65537 (0x10001)

Membuat permintaan penandatanganan sertifikat

Dalam langkah ini, Anda menyematkan kunci publik dan informasi tentang organisasi serta situs Anda ke dalam permintaan penandatanganan sertifikat atau CSR. Perintah openssl akan meminta metadata yang diperlukan.

Dengan menjalankan perintah berikut:

openssl req -new -sha256 -key www.example.com.key -out www.example.com.csr

Output-nya adalah sebagai berikut:

You are about to be asked to enter information that will be incorporated
into your certificate request

What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CA
State or Province Name (full name) [Some-State]:California
Locality Name (for example, city) []:Mountain View
Organization Name (for example, company) [Internet Widgits Pty Ltd]:Example, Inc.
Organizational Unit Name (for example, section) []:Webmaster Help Center Example
Team
Common Name (e.g. server FQDN or YOUR name) []:www.example.com
Email Address []:webmaster@example.com

Please enter the following 'extra' attributes
to be sent
with your certificate request
A challenge password
[]:
An optional company name []:

Untuk memastikan validitas CSR, jalankan perintah ini:

openssl req -text -in www.example.com.csr -noout

Responsnya akan terlihat seperti ini:

Certificate Request:
   
Data:
       
Version: 0 (0x0)
       
Subject: C=CA, ST=California, L=Mountain View, O=Google, Inc.,
OU
=Webmaster Help Center Example Team,
CN
=www.example.com/emailAddress=webmaster@example.com
       
Subject Public Key Info:
           
Public Key Algorithm: rsaEncryption
               
Public-Key: (2048 bit)
               
Modulus:
                   
00:ad:fc:58:e0:da:f2:0b:73:51:93:29:a5:d3:9e:
                    f8
:f1:14:13:64:cc:e0:bc:be:26:5d:04:e1:58:dc:
                   
...
               
Exponent: 65537 (0x10001)
       
Attributes:
            a0
:00
   
Signature Algorithm: sha256WithRSAEncryption
         
5f:05:f3:71:d5:f7:b7:b6:dc:17:cc:88:03:b8:87:29:f6:87:
         
2f:7f:00:49:08:0a:20:41:0b:70:03:04:7d:94:af:69:3d:f4:
         
...

Mengirimkan CSR Anda ke otoritas sertifikat

Otoritas sertifikat (CA) yang berbeda mengharuskan Anda mengirimkan CSR ke mereka dengan cara yang berbeda. Hal ini dapat mencakup penggunaan formulir di situs mereka atau pengiriman CSR melalui email. Beberapa CA, atau reseller-nya, bahkan dapat mengotomatiskan sebagian atau semua proses, termasuk, dalam beberapa kasus, pembuatan pasangan kunci dan CSR.

Kirim CSR ke CA Anda dan ikuti petunjuknya untuk menerima sertifikat final atau rantai sertifikat Anda.

CA yang berbeda mengenakan biaya yang berbeda untuk layanan penjaminan kunci publik Anda.

Ada juga opsi untuk memetakan kunci Anda ke lebih dari satu nama DNS, termasuk beberapa nama berbeda (mis. semua example.com, www.example.com, example.net, dan www.example.net) atau nama "karakter pengganti" seperti *.example.com.

Salin sertifikat ke semua server frontend Anda di tempat yang tidak dapat diakses web seperti /etc/ssl (Linux dan Unix) atau di mana saja IIS (Windows) memerlukannya.

Mengaktifkan HTTPS di server Anda

Mengaktifkan HTTPS di server merupakan langkah sangat penting dalam memberikan keamanan bagi halaman web Anda.

  • Gunakan alat Server Configuration dari Mozilla untuk menyiapkan server bagi dukungan HTTPS.
  • Ujilah situs secara teratur dengan SSL Server Test dari Qualys dan pastikan Anda mendapatkan setidaknya nilai A atau A+.

Pada tahap ini, Anda harus membuat keputusan operasi yang sangat penting. Pilih salah satu opsi berikut:

  • Khususkan alamat IP berbeda ke setiap nama host yang digunakan server web Anda untuk menyajikan konten.
  • Gunakan hosting virtual berbasis nama.

Jika telah menggunakan alamat IP berbeda untuk setiap nama host, Anda dapat mendukung HTTP dan HTTPS untuk semua klien. Namun, sebagian besar operator situs menggunakan hosting virtual berbasis nama untuk menghemat alamat IP dan karena lebih praktis secara umum.

Jika belum memiliki layanan HTTPS yang tersedia di server Anda, aktifkan sekarang (tanpa mengalihkan HTTP ke HTTPS. Lihat Mengalihkan HTTP ke HTTPS untuk informasi selengkapnya). Konfigurasikan server web Anda untuk menggunakan sertifikat yang telah Anda beli dan instal. Anda mungkin akan menemukan generator konfigurasi Mozilla yang berguna.

Jika Anda memiliki banyak nama host atau subdomain, masing-masing harus menggunakan sertifikat yang tepat.

Sekarang, dan secara rutin selama masa aktif situs Anda, periksa konfigurasi HTTPS dengan SSL Server Test dari Qualys. Situs Anda harus mendapatkan skor A atau A+. Anggaplah semua yang menyebabkan nilai lebih rendah sebagai bug, dan tetaplah waspada, karena serangan baru terhadap algoritme dan protokol selalu dikembangkan.

Membuat URL intrasitus relatif

Karena sekarang Anda melayani situs di HTTP maupun HTTPS, segala sesuatunya perlu bekerja semulus mungkin, apa pun protokolnya. Faktor penting adalah menggunakan URL relatif untuk link intrasitus.

Pastikan URL intrasitus dan URL eksternal tidak bergantung pada protokol tertentu. Gunakan jalur relatif atau hapus protokol seperti di //example.com/something.js.

Menayangkan halaman yang berisi resource HTTP menggunakan HTTPS dapat menyebabkan masalah. Saat menemukan halaman yang aman menggunakan resource yang tidak aman, browser akan memperingatkan pengguna bahwa halaman tersebut tidak sepenuhnya aman, dan beberapa browser menolak memuat atau menjalankan resource HTTP, yang akan merusak halaman. Namun, Anda dapat menyertakan resource HTTPS dengan aman di halaman HTTP. Untuk panduan selengkapnya tentang cara memperbaiki masalah ini, lihat Memperbaiki Konten Campuran.

Mengikuti link berbasis HTTP ke halaman lain di situs Anda juga dapat mendowngrade pengalaman pengguna dari HTTPS ke HTTP. Untuk memperbaikinya, buat URL intrasitus Anda serelatif mungkin, dengan membuatnya protokol-relatif (tidak memiliki protokol, dimulai dengan //example.com) atau host-relatif (dimulai dengan jalur saja, seperti /jquery.js).

Anjuran
<h1>Welcome To Example.com</h1>
<script src="/jquery.js"></script>
<link rel="stylesheet" href="/assets/style.css"/>
<img src="/images/logo.png"/>;
<p>A <a href="/2014/12/24">new post on cats!</a></p>
Gunakan URL intrasitus relatif.
Anjuran
<h1>Welcome To Example.com</h1>
<script src="//example.com/jquery.js"></script>
<link rel="stylesheet" href="//assets.example.com/style.css"/>
<img src="//img.example.com/logo.png"/>;
<p>A <a href="//example.com/2014/12/24/">new post on cats!</a></p>
Atau, gunakan URL intrasitus protokol-relatif.
Anjuran
<h1>Welcome To Example.com</h1>
<script src="/jquery.js"></script>
<link rel="stylesheet" href="/assets/style.css"/>
<img src="/images/logo.png"/>;
<p>A <a href="/2014/12/24">new post on cats!</a></p>
<p>Check out this <a href="https://foo.com/"><b>other cool site.</b></a></p>
Gunakan URL HTTPS untuk link ke situs lain jika memungkinkan.

Perbarui link Anda dengan skrip, bukan dengan cara manual, untuk menghindari kesalahan. Jika konten situs Anda ada dalam database, uji skrip Anda di salinan pengembangan database. Jika konten situs Anda hanya terdiri dari beberapa file sederhana, uji skrip Anda di salinan pengembangan file tersebut. Pindahkan perubahan ke produksi hanya setelah perubahan tersebut lulus QA, seperti biasa. Anda dapat menggunakan skrip Bram van Damme atau yang serupa untuk mendeteksi konten campuran di situs Anda.

Saat menautkan ke situs lain (bukan menyertakan resource dari sana), jangan ubah protokol. Anda tidak memiliki kontrol atas cara situs tersebut beroperasi.

Untuk membuat proses migrasi lebih mulus bagi situs besar, sebaiknya gunakan URL protokol-relatif. Jika Anda belum yakin apakah bisa menerapkan HTTPS sepenuhnya, memaksa situs Anda untuk menggunakan HTTPS bagi semua sub-resource malah akan merugikan. Mungkin ada masanya Anda masih baru dan asing dengan HTTPS, sementara situs HTTP harus tetap berfungsi seperti biasa. Lama-kelamaan, Anda akan menyelesaikan migrasi dan mengunci HTTPS (lihat dua bagian berikutnya).

Jika situs Anda bergantung pada skrip, gambar, atau resource lainnya yang dilayani dari pihak ketiga, seperti CDN atau jquery.com, Anda memiliki dua opsi:

  • Gunakan URL protokol-relatif untuk resource ini. Jika pihak ketiga tidak melayani HTTPS, mintalah mereka melakukannya. Sebagian besar sudah melakukannya, termasuk jquery.com.
  • Layani resource dari server yang Anda kontrol, yang menawarkan HTTP dan HTTPS. Sering kali ini merupakan ide bagus, karena nanti Anda memiliki kontrol yang lebih baik atas tampilan, performa, dan keamanan situs, dan tidak perlu mempercayai pihak ketiga untuk menjaga keamanan situs Anda.

Mengalihkan HTTP ke HTTPS

Untuk memberi tahu mesin telusur agar menggunakan HTTPS untuk mengakses situs Anda, tempatkan tautan kanonis di bagian awal setiap halaman menggunakan tag <link rel="canonical" href="https://…"/>.

Mengaktifkan Strict Transport Security dan cookie aman

Pada tahap ini, Anda siap untuk "mengunci" penggunaan HTTPS:

  • Gunakan HTTP Strict Transport Security (HSTS) untuk menghindari biaya pengalihan 301.
  • Selalu setel flag Secure pada cookie.

Pertama, gunakan Strict Transport Security untuk memberi tahu klien bahwa mereka harus selalu terhubung ke server Anda menggunakan HTTPS, bahkan saat mengikuti referensi http://. Tindakan ini akan mengalahkan serangan seperti SSL Stripping, dan menghindari biaya bolak-balik 301 redirect yang kita aktifkan di Redirect HTTP to HTTPS.

Untuk mengaktifkan HSTS, tetapkan header Strict-Transport-Security. Halaman HSTS OWASP berisi link ke petunjuk untuk berbagai jenis software server.

Sebagian besar server web menawarkan kemampuan menambahkan header khusus.

Anda juga harus memastikan klien tidak pernah mengirim cookie (misalnya untuk autentikasi atau preferensi situs) melalui HTTP. Misalnya, jika cookie autentikasi pengguna akan diekspos dalam bentuk teks biasa, jaminan keamanan untuk seluruh sesi pengguna akan dihancurkan, meskipun Anda telah melakukan hal lainnya dengan benar.

Untuk menghindari hal ini, ubah aplikasi web Anda agar selalu menyetel flag Secure pada cookie yang ditetapkan. Halaman OWASP ini menjelaskan cara menyetel flag Secure di beberapa framework aplikasi. Setiap framework aplikasi memiliki cara untuk menyetel flag.

Sebagian besar server web menawarkan fitur pengalihan sederhana. Gunakan 301 (Moved Permanently) untuk menunjukkan kepada mesin telusur dan browser bahwa versi HTTPS bersifat kanonis, dan mengalihkan pengguna Anda ke versi HTTPS situs Anda dari HTTP.

Menelusuri peringkat

Google menggunakan HTTPS sebagai indikator kualitas penelusuran positif. Google juga memublikasikan panduan tentang cara mentransfer, memindah, atau memigrasikan situs sambil mempertahankan peringkat penelusurannya. Bing juga memublikasikan panduan untuk webmaster.

Performa

Jika lapisan konten dan aplikasi telah disesuaikan dengan baik (lihat buku Steve Souders untuk mendapatkan saran), masalah kinerja TLS selebihnya umumnya kecil dibandingkan dengan biaya keseluruhan aplikasi. Anda juga dapat mengurangi dan menyusutkan biaya tersebut. Untuk mendapatkan saran tentang optimalisasi TLS, lihat High Performance Browser Networking oleh Ilya Grigorik, serta OpenSSL Cookbook dan Bulletproof SSL And TLS oleh Ivan Ristic.

Dalam beberapa kasus, TLS dapat meningkatkan performa, terutama karena memungkinkan HTTP/2. Untuk informasi selengkapnya, lihat presentasi Chris Palmer tentang performa HTTPS dan HTTP/2 di Chrome Dev Summit 2014.

Header perujuk

Saat pengguna mengikuti link dari situs HTTPS ke situs HTTP lain, agen-pengguna tidak akan mengirim header Referer. Jika ini masalahnya, ada beberapa cara untuk mengatasinya:

  • Situs lainnya harus bermigrasi ke HTTPS. Jika situs rujukan menyelesaikan bagian Mengaktifkan HTTPS di server Anda dalam panduan ini, Anda dapat mengubah link di situs Anda ke situs mereka dari http:// ke https:// atau menggunakan link protokol-relatif.
  • Untuk mengatasi beragam masalah pada header Referer, gunakan standar Kebijakan Referrer baru.

Pendapatan iklan

Operator situs yang memonetisasi situs mereka dengan menampilkan iklan ingin memastikan bahwa bermigrasi ke HTTPS tidak akan mengurangi tayangan iklan. Namun, karena masalah keamanan konten campuran, <iframe> HTTP tidak berfungsi di halaman HTTPS. Sebelum pengiklan memublikasikan melalui HTTPS, operator situs tidak dapat bermigrasi ke HTTPS tanpa kehilangan pendapatan iklan; tetapi sebelum operator situs bermigrasi ke HTTPS, pengiklan memiliki sedikit motivasi untuk memublikasikan HTTPS.

Anda dapat memulai proses untuk mengatasi kebuntuan ini dengan menggunakan pengiklan yang menawarkan layanan iklan melalui HTTPS, dan meminta pengiklan yang sama sekali tidak menggunakan HTTPS untuk setidaknya menjadikannya sebagai opsi. Anda mungkin perlu menunda penyelesaian Membuat URL IntraSitus relatif hingga cukup banyak pengiklan yang melakukan interoperasi dengan benar.