HTTPS menjadi lebih cepat dan aman berkat rilis TLS 1.3 oleh IETF (RFC 8446) pada Agustus 2018. TLS 1.3 kini merupakan versi terbaru dari protokol TLS. Tutorial ini akan menunjukkan cara mengaktifkan TLS 1.3 di server web Nginx di Ubuntu 18.04 dan Ubuntu 16.04.
Perbarui :Ada cara yang lebih mudah untuk mengaktifkan TLS 1.3. Lihat artikel ini:Cara mudah mengaktifkan TLS 1.3 di Nginx di Ubuntu 18.10, 18.04, 16.04, 14.04
TLS 1.3:Peningkatan Performa dan Keamanan
Dari segi kinerja, TLS 1.2 membutuhkan dua perjalanan pulang pergi untuk membuat koneksi HTTPS. Dengan TLS 1.3, hanya diperlukan satu perjalanan pulang pergi. TLS 1.3 juga mendukung mode nol perjalanan pulang pergi (sesi dimulai kembali 0-RTT), memungkinkan klien yang sebelumnya terhubung ke situs web Anda untuk mengirim permintaan HTTP pada pesan pertama ke server. Hal ini membuat perbedaan besar bagi pengguna di jaringan seluler atau di lokasi yang jauh.
Dalam hal keamanan, TLS 1.3 menghapus dukungan untuk cipher suites lama, yang bertanggung jawab atas eksploitasi seperti serangan ROBOT. Karena itu, admin server tidak dapat lagi menambahkan rangkaian sandi lama di TLS 1.3 untuk menenangkan pengguna browser web lama. Ini, tentu saja, adalah penjelasan yang terlalu disederhanakan. CloudFlare memiliki penjelasan rinci yang baik tentang TLS 1.3.
Aktifkan TLS 1.3 di Nginx di Ubuntu 18.04, Ubuntu 16.04
Ada dua persyaratan untuk mengaktifkan TLS 1.3 dengan Nginx.
- Versi Nginx Anda harus mendukung TLS 1.3. Itu berarti nginx 1.13 atau lebih tinggi.
- Nginx harus dibuat dengan OpenSSL 1.1.1+, atau dijalankan dengan OpenSSL 1.1.1+.
Persyaratan kedua mungkin terdengar membingungkan, jadi izinkan saya memberi Anda dua contoh.
- Ubuntu 18.04 dikirimkan dengan OpenSSL 1.1.0. Mengganti sistem perpustakaan OpenSSL bukanlah ide yang baik, tetapi Anda dapat mengunduh kode sumber OpenSSL 1.1.1 dan mengompilasi Nginx dengan kode sumber OpenSSL 1.1.1 untuk mengaktifkan TLS 1.3.
- Arch Linux saat ini dikirimkan dengan OpenSSL 1.1.1, tetapi paket Nginx di repositori Arch sebenarnya dibuat dengan OpenSSL 1.1.0. Dalam hal ini, Nginx tidak dibuat dengan OpenSSL 1.1.1, tetapi berjalan dengan OpenSSL 1.1.1.
Sekarang mari kita lihat bagaimana cara mengkompilasi Nginx dengan OpenSSL 1.1.1 di Ubuntu 18.04 dan Ubuntu 16.04.
1. Menambahkan Repositori Nginx Resmi
Alih-alih mengunduh tarball sumber dan mengompilasinya dengan make
, saya akan menambahkan repositori Nginx resmi ke server Ubuntu saya dan kemudian membuat paket deb dari kode sumber. Dengan cara ini, saya tidak perlu menambahkan daftar panjang parameter konfigurasi secara manual ke configure
memerintah. Juga akan ada file layanan systemd yang berguna di dalam paket deb.
Pertama-tama ambil kunci Nginx GPG dan impor ke Ubuntu.
wget http://nginx.org/keys/nginx_signing.key sudo apt-key add nginx_signing.key
Kemudian buat file daftar sumber untuk repo Nginx.
sudo nano /etc/apt/sources.list.d/nginx.list
Tambahkan dua baris berikut ke dalam file. deb-src
baris memungkinkan kami mengunduh paket sumber Nginx dengan apt source
memerintah. Bonic
adalah nama kode untuk Ubuntu 18.04. Jika Anda menggunakan Ubuntu 16.04, ganti dengan xenial
. (Catatan:Repositori ini tidak mendukung OS 32 bit.)
deb [arch=amd64] http://nginx.org/packages/mainline/ubuntu/ bionic nginx deb-src http://nginx.org/packages/mainline/ubuntu/ bionic nginx
Untuk menyimpan file di editor teks Nano, tekan Ctrl+O
, lalu tekan Enter untuk mengonfirmasi. Untuk keluar, tekan Ctrl+X
. Kemudian perbarui indeks paket lokal.
sudo apt update
Sekarang repositori resmi Nginx ditambahkan ke server Ubuntu.
2. Unduh Kode Sumber Nginx dan OpenSSL
Kami akan membuat nginx
direktori di bawah /usr/local/src/
untuk menyimpan sumber Nginx dan kemudian cd
ke direktori itu.
sudo mkdir /usr/local/src/nginx cd /usr/local/src/nginx/
Unduh paket sumber Nginx dengan perintah di bawah ini:
sudo apt install dpkg-dev sudo apt source nginx
Periksa file yang diunduh.
ls
Keluaran:
nginx-1.15.3 nginx_1.15.3-1~bionic.dsc nginx_1.15.3-1~bionic.debian.tar.xz nginx_1.15.3.orig.tar.gz
Kemudian kloning repositori github OpenSSL.
cd /usr/local/src sudo apt install git sudo git clone https://github.com/openssl/openssl.git cd openssl
Selanjutnya, buat daftar semua cabang dan alihkan ke cabang stabil 1.1.1.
git branch -a sudo git checkout OpenSSL_1_1_1-stable
3. Edit Aturan Kompilasi Nginx
Edit file aturan kompilasi Nginx.
sudo nano /usr/local/src/nginx/nginx-1.15.3/debian/rules
Temukan config.status.nginx: config.env.nginx
bagian. Tambahkan teks berikut di akhir baris CFLAGS. Perhatikan bahwa teks berikut bukan baris dengan sendirinya.
--with-openssl=/usr/local/src/openssl
Simpan dan tutup file.
4. Kompilasi Nginx
Pastikan Anda berada di direktori sumber Nginx.
cd /usr/local/src/nginx/nginx-1.15.3/
Instal dependensi untuk membangun paket deb Nginx kami.
sudo apt build-dep nginx
Sekarang gunakan perintah berikut untuk membangun paket deb.
sudo dpkg-buildpackage -b
Jika Anda melihat kesalahan berikut,
missing initializer for field 'md_ctrl' of 'EVP_MD {aka const struct evp_md_st}
Kemudian edit auto/cc/gcc
berkas.
sudo nano /usr/local/src/nginx/nginx-1.15.3/auto/cc/gcc
Komentari baris berikut. -Werror
flag membuat GCC memperlakukan peringatan sebagai kesalahan.
CFLAGS="$CFLAGS -Werror"
Kemudian jalankan kembali perintah build. Setelah build selesai, akan ada paket deb Nginx di /usr/local/src/nginx/
direktori. Jika Anda telah menginstal Nginx sebelumnya, saatnya untuk menghapus versi lama dan kemudian menginstal versi baru.
sudo apt remove nginx nginx-common nginx-full cd /usr/local/src/nginx/ sudo dpkg -i nginx_1.15.3-1~bionic_amd64.deb
Sekarang mari kita mulai Nginx.
sudo systemctl start nginx
Jika Anda melihat pesan kesalahan berikut.
Failed to start nginx.service: Unit nginx.service is masked.
Kemudian buka kedok nginx dan jalankan perintah start lagi.
sudo systemctl unmask nginx
Perhatikan bahwa proses Nginx mungkin berjalan sebagai pengguna nginx
atau www-data
. Ini dapat diubah dengan mengedit baris pertama di /etc/nginx/nginx.conf
mengajukan. Pastikan Nginx berjalan sebagai pengguna yang sama dengan PHP-FPM.
Sekarang periksa argumen konfigurasi Nginx.
sudo nginx -V
Seperti yang Anda lihat, kami memiliki Nginx versi terbaru yang dibuat dengan OpenSSL 1.1.1.
5. Aktifkan TLS 1.3 di Blok Server Nginx
Sekarang saya berasumsi bahwa Anda telah mengaktifkan HTTPS untuk blok server Nginx Anda. Sintaks untuk mengaktifkan TLS 1.3 cukup mudah. Buka file blok server Nginx Anda di /etc/nginx/conf.d/
direktori atau /etc/nginx/sites-enabled/
direktori. Temukan baris berikut.
ssl_protocols TLSv1.2;
Tambahkan TLSv1.3
ke daftar protokol.
ssl_protocols TLSv1.2 TLSv1.3;
Kemudian tambahkan 3 cipher suite berikut ke cipher suite yang ada.
TLS-CHACHA20-POLY1305-SHA256 TLS-AES-256-GCM-SHA384 TLS-AES-128-GCM-SHA256
seperti ini:
ssl_ciphers 'TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:TLS-AES-128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
Simpan dan tutup file. Kemudian uji konfigurasi Nginx dan muat ulang.
sudo nginx -t sudo systemctl reload nginx
Kecil kemungkinan Ubuntu 18.04 akan beralih ke OpenSSL 1.1.1, jadi jika Anda memutakhirkan Nginx dengan sudo apt upgrade
perintah, TLS 1.3 akan hilang. Ada baiknya untuk menahan Nginx agar tidak ditingkatkan oleh apt
dengan perintah ini:
sudo apt-mark hold nginx
Pembaruan:Pada Nginx 1.15.4, Anda dapat mengaktifkan 0-RTT dengan OpenSSL dengan menambahkan arahan berikut dalam konteks server ssl. Nilai default diatur ke off
. Pada versi 1.15.3 sebelumnya, hanya dapat digunakan dengan BoringSSL.
ssl_early_data on
Aktifkan TLS 1.3 di Google Chrome
Saat ini, Firefox 62 dan Chrome 69 hanya mendukung draft 28 dari TLS 1.3. OpenSSL 1.1.1 mendukung versi final TLS 1.3. Implementasi berdasarkan versi draf dan versi RFC final tidak saling beroperasi.
Untuk menguji server Nginx kami sekarang, kami perlu menginstal versi beta Google Chrome dan mengaktifkan versi final TLS 1.3. Setelah Chrome beta terpasang, Masukkan chrome://flags/#tls13-variant
di bilah alamat dan beralih dari default
ke Enabled (Final)
. Kemudian luncurkan kembali Google Chrome agar perubahan diterapkan.
Sekarang kunjungi situs web Anda yang mendukung TLS 1.3 di Google Chrome beta dan tekan Ctrl+Shift+I
untuk membuka halaman alat pengembang. Buka Security
tab. Anda dapat melihat versi TLS yang digunakan.
Firefox dikatakan akan mengirimkan versi final TLS 1.3 di Firefox 63, dijadwalkan pada Oktober 2018. Di Chrome 70, versi final TLS 1.3 akan diaktifkan untuk koneksi keluar.
Pembaruan:Chrome 70 menambahkan dukungan untuk versi final TLS 1.3, tetapi secara default masih menggunakan draf 28 dari TLS 1.3.Aktifkan TLS 1.3 dengan CloudFlare
Jika Anda menggunakan CloudFlare CDN (Content Delivery Network), maka situs web Anda sudah menggunakan TLS1.3. Di dasbor CloudFlare, pilih crypto
tab dan Anda akan melihat opsi untuk mengaktifkan/menonaktifkan TLS 1.3. Anda juga dapat mengaktifkan 0-RTT. CloudFlare mendukung versi draft 28 dan versi final.
Itu dia! Saya harap tutorial ini membantu Anda mengaktifkan TLS 1.3 di Nginx di Ubuntu 18.04 dan Ubuntu 16.04. Hati-hati.