Mengaktifkan HTTPS di server Anda

Chris Palmer
Chris Palmer

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

  • Membuat pasangan kunci publik/pribadi RSA 2048-bit.
  • Membuat permintaan penandatanganan sertifikat (CSR) yang menyematkan kunci publik Anda.
  • Membagikan CSR Anda kepada Certificate Authority (CA) untuk menerima sertifikat final atau rantai sertifikat.
  • Menginstal sertifikat akhir Anda di tempat yang dapat diakses selain web seperti /etc/ssl (Linux dan Unix) atau di mana pun IIS memerlukannya (Windows).

Membuat kunci dan permintaan penandatanganan sertifikat

Bagian ini menggunakan program command line openssl, yang biasanya 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 dirusak dengan serangan tebakan brute force, dan kunci yang lebih panjang akan menggunakan resource yang tidak perlu.

Gunakan perintah berikut untuk membuat pasangan kunci RSA:

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

Ini menghasilkan output berikut:

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

Membuat permintaan penandatanganan sertifikat

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

Menjalankan perintah berikut:

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

Menghasilkan output 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:
         ...

Kirimkan CSR Anda ke certificate authority

Certificate authority (CA) yang berbeda mengharuskan Anda mengirimkan CSR kepada mereka dengan cara yang berbeda. Hal ini dapat mencakup penggunaan formulir di situs atau pengiriman CSR melalui email. Beberapa CA, atau reseller-nya, bahkan mungkin mengotomatiskan sebagian atau semua proses ini, termasuk, dalam beberapa kasus, pasangan kunci dan pembuatan 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 yang berbeda (misalnya semua example.com, www.example.com, example.net, dan www.example.net) atau nama "karakter pengganti" seperti *.example.com.

Salin sertifikat ke semua server front-end di tempat yang dapat diakses selain web, seperti /etc/ssl (Linux dan Unix) atau di mana pun IIS (Windows) memerlukannya.

Mengaktifkan HTTPS di server

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

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

Pada titik 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 menayangkan konten.
  • Gunakan hosting virtual berbasis nama.

Jika menggunakan alamat IP yang 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 cara ini lebih praktis secara umum.

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

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

Sekarang, dan secara rutin selama masa aktif situs, periksa konfigurasi HTTPS dengan SSL Server Test Qualys. Situs Anda harus mendapatkan skor A atau A+. Perlakukan apa pun yang menyebabkan nilai lebih rendah sebagai bug, dan tetap rajin, karena serangan baru terhadap algoritma dan protokol selalu dikembangkan.

Menjadikan URL intrasitus relatif

Karena sekarang Anda menayangkan situs di HTTP dan HTTPS, segala sesuatunya harus bekerja semulus mungkin, apa pun protokolnya. Salah satu faktor penting adalah menggunakan URL relatif untuk link intrasitus.

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

Menayangkan halaman yang berisi resource HTTP menggunakan HTTPS dapat menyebabkan masalah. Jika browser menemukan halaman yang aman menggunakan resource yang tidak aman, browser akan memperingatkan pengguna bahwa halaman tersebut tidak sepenuhnya aman, dan beberapa browser menolak untuk memuat atau menjalankan resource HTTP, yang merusak halaman. Namun, Anda dapat menyertakan resource HTTPS dengan aman di halaman HTTP. Untuk panduan lebih lanjut 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 memperbaiki masalah ini, buat URL intrasitus Anda se relatif mungkin, dengan membuatnya menjadi protokol-relatif (tidak memiliki protokol, dimulai dengan //example.com) atau relatif host (dimulai dengan jalur, 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 secara manual, untuk menghindari kesalahan. Jika konten situs Anda berada dalam database, uji skrip Anda pada salinan pengembangan database tersebut. Jika konten situs Anda hanya terdiri dari beberapa file sederhana, uji skrip Anda pada salinan pengembangan file. Kirim perubahan ke produksi hanya setelah perubahan lulus QA, seperti biasa. Anda dapat menggunakan skrip Bram van Damme atau yang serupa untuk mendeteksi konten campuran di situs Anda.

Saat membuat link ke situs lain (bukan menyertakan resource dari situs tersebut), jangan ubah protokolnya. Anda tidak memiliki kontrol atas cara beroperasi situs tersebut.

Agar migrasi lebih lancar bagi situs besar, kami merekomendasikan URL protokol-relatif. Jika Anda tidak yakin apakah Anda dapat men-deploy HTTPS sepenuhnya, memaksa situs Anda menggunakan HTTPS untuk semua subresource dapat berdampak negatif. Mungkin ada periode waktu ketika HTTPS baru dan aneh bagi Anda, dan situs HTTP harus tetap berfungsi sebagaimana mestinya. Seiring waktu, Anda akan menyelesaikan migrasi dan mengunci HTTPS (lihat dua bagian berikutnya).

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

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

Mengalihkan HTTP ke HTTPS

Untuk memberi tahu mesin telusur agar menggunakan HTTPS guna mengakses situs Anda, letakkan link kanonis di head setiap halaman menggunakan tag <link rel="canonical" href="https://…"/>.

Aktifkan 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 tetapkan flag Aman 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://. Hal ini akan mengalahkan serangan seperti SSL Stripping, dan menghindari biaya bolak-balik 301 redirect yang kami aktifkan di Mengalihkan HTTP ke HTTPS.

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

Sebagian besar server web menawarkan kemampuan yang serupa untuk menambahkan header kustom.

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

Untuk menghindari hal ini, ubah aplikasi web Anda agar selalu menetapkan flag Secure pada cookie yang ditetapkan. Halaman OWASP ini menjelaskan cara menetapkan flag Secure di beberapa framework aplikasi. Setiap framework appl memiliki cara untuk menetapkan 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 ke versi HTTPS situs Anda dari HTTP.

Menelusuri peringkat

Google menggunakan HTTPS sebagai indikator kualitas penelusuran positif. Google juga memublikasikan panduan tentang cara mentransfer, memindahkan, atau memigrasikan situs Anda dengan tetap mempertahankan peringkat penelusurannya. Bing juga memublikasikan pedoman untuk webmasters.

Performa

Jika lapisan konten dan aplikasi telah disesuaikan dengan baik (lihat buku Steve Souders untuk mendapatkan saran), masalah performa TLS yang tersisa umumnya kecil dibandingkan dengan keseluruhan biaya aplikasi. Anda juga dapat mengurangi dan mengamortisasi biaya tersebut. Untuk saran tentang pengoptimalan TLS, lihat Jaringan Browser Berperforma Tinggi oleh Ilya Grigorik, serta OpenSSL Cookbook dari Ivan Ristic, dan Bulletproof SSL And TLS.

Dalam beberapa kasus, TLS dapat meningkatkan performa, sebagian besar karena mengizinkan HTTP/2. Untuk informasi selengkapnya, lihat perbincangan 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 Perujuk. Jika ini menjadi masalah, ada beberapa cara untuk mengatasinya:

  • Situs lainnya harus dimigrasikan ke HTTPS. Jika situs penerima rujukan menyelesaikan bagian Aktifkan 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 berbagai masalah dengan header Perujuk, gunakan standar Kebijakan Perujuk baru.

Pendapatan iklan

Operator situs yang memonetisasi situs mereka dengan menampilkan iklan ingin memastikan bahwa bermigrasi ke HTTPS tidak mengurangi tayangan iklan. Namun, karena adanya 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. Namun, hingga operator situs bermigrasi ke HTTPS, pengiklan memiliki sedikit motivasi untuk memublikasikan HTTPS.

Anda dapat memulai proses untuk mengatasi hambatan ini dengan menggunakan pengiklan yang menawarkan layanan iklan melalui HTTPS, dan meminta pengiklan yang tidak menayangkan HTTPS sama sekali agar setidaknya menyediakan layanan tersebut. Anda mungkin perlu menunda penyelesaian Membuat URL intrasitus relatif hingga cukup banyak pengiklan yang beroperasi dengan benar.