TLS 1.3 sudah beberapa tahun muncul dan memberikan benefit seperti Handshake yang lebih cepat dan downgrade protection. Semua browser sudah support TLS 1.3, Google Chrome sejak versi 66 dan Firefox sejak versi 60.

Agar bisa menggunakan TLS 1.3 minimal nginx yang digunakan adalah versi 1.14, OpenSSL versi 1.1.1 dan tentunya memiliki sertifikat SSL

Cek versi nginx dengan nginx -v

$ nginx -v
nginx version: nginx/1.18.0

Cek versi OpenSSL dengan openssl version

$ openssl version
OpenSSL 1.1.1i  8 Dec 2020

Setting TLS 1.3 di Nginx

Cara setting TLS 1.3 di nginx sebenarnya sangat sederhana, contohnya

server {
    listen 443 http2 ssl;
    server_name jaranguda.com;
    ssl_certificate /etc/nginx/ssl/jaranguda.com/fullchain.cer;
    ssl_certificate_key /etc/nginx/ssl/jaranguda.com/jaranguda.com.key;
    root /var/www/domains/jaranguda.com;
    ssl_protocols TLSv1.2 TLSv1.3;
}

Bagian yang mengaktifkan TLS 1.3 berada dibaris ssl_protocols TLSv1.2 TLSv1.3, ingat urutannya adalah versi lama ke versi baru, bila ingin mengaktifkan semua versi TLS menjadi

ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

Testing TLS 1.3

Untuk testingnya sendiri kita akan menggunakan OpenSSL dan curl, ada banyak tools yang bertebaran di Internet, tetapi dengan kedua tools ini seharusnya sudah cukup tanpa perlu menggunakan bantuan pihak ketiga (thirdparty)

Contoh dengan curl

curl --tlsv1.3 https://EXAMPLE.com

Contoh dengan openssl

openssl s_client -connect EXAMPLE.com:443 -tls1_3

Troubleshooting TLS di Nginx

Ada kasus unik yang menghabiskan berjam-jam untuk debuggingnya ;), error yang ditampilkan

# openssl
CONNECTED(00000003)
140217493542720:error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version:ssl/record/rec_layer_s3.c:1543:SSL alert number 70
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 260 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
 
# curl
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: none
  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS alert, protocol version (582):
* error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version
* Closing connection 0

error tersebut tetap muncul walaupun TLS 1.3 sudah di setting di server block nginx. Di server yang digunakan untuk testing, saya memiliki banyak domain (multi domain) dengan konfigurasi nginx masing-masing, saya memiliki 1 server block default yang saya beri nama 000-default isi konfigurasinya

server {
    listen 80 default_server;
    server_name _;
    root /var/www/tanpa/isi;
    index index.html;
}
 
 
server {
    listen 443 http2 default_server;
    server_name _;
    root /var/www/tanpa/isi;
    index index.html;
    ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
    ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
}

bila tidak disertakan default_server dibelakang listen maka yang menjadi default adalah berdasarkan urutan abjad file konfigurasinya. Dengan konfigurasi diatas akses ke TLS 1.3 akan selalu error seperti yang diatas. Solusinya adalah dengan menambahkan ssl_protocols TLSv1.2 TLSv1.3 dikonfigurasi tersebut, setelah restart testing terhadap semua domain bisa mengakses TLS 1.3

Join the Conversation

1 Comment

Your email address will not be published. Required fields are marked *