Share
March 12, 2026

Mengatasi ERR_SSL_VERSION_OR_CIPHER_MISMATCH di Cloudflare (Ternyata Karena Subdomain Bertingkat)

Beberapa waktu lalu saya mengalami error yang cukup membingungkan ketika mencoba membuka salah satu aplikasi self-hosted saya. Setup infrastrukturnya kira-kira seperti ini:

Domain → Cloudflare Tunnel → Nginx Proxy Manager → Docker App

Semua service sebenarnya berjalan normal. Container hidup, reverse proxy aktif, dan tunnel juga terkoneksi dengan baik. Tapi ketika aplikasi diakses melalui browser, yang muncul justru error ini:

ERR_SSL_VERSION_OR_CIPHER_MISMATCH

Sekilas error ini terlihat seperti masalah TLS atau cipher SSL, tapi ternyata penyebabnya sama sekali berbeda.

Di artikel ini saya akan berbagi pengalaman troubleshooting sampai akhirnya menemukan penyebabnya.


Gejala yang Terlihat

Error muncul ketika mengakses domain aplikasi, misalnya seperti ini:

https://sub.service.mydomain.com

Browser langsung menampilkan halaman error:

ERR_SSL_VERSION_OR_CIPHER_MISMATCH

Biasanya error ini diasosiasikan dengan:

  • TLS version tidak cocok
  • cipher tidak didukung
  • konfigurasi SSL salah

Karena itu saya mencoba mengecek koneksi menggunakan openssl.

openssl s_client -connect sub.service.mydomain.com:443

Hasilnya kurang lebih seperti ini:

SSL alert handshake failure
no peer certificate available
Cipher is (NONE)

Yang menarik di sini adalah bagian:

no peer certificate available

Artinya server bahkan tidak mengirim certificate sama sekali.


Mengecek dengan Curl

Untuk memastikan, saya juga mencoba menggunakan curl.

curl -Iv https://sub.service.mydomain.com

Hasilnya:

TLS alert handshake failure

Ini menandakan bahwa TLS handshake gagal sebelum koneksi benar-benar terjadi.

Artinya masalah kemungkinan besar bukan di server aplikasi, tetapi terjadi lebih awal di jalur koneksi.


Petunjuk Penting dari Cloudflare

Saat mengecek DNS record di dashboard Cloudflare, saya menemukan sebuah catatan kecil di bagian hostname:

This hostname is not covered by a certificate.

Ini langsung memberi petunjuk kuat bahwa masalahnya berkaitan dengan certificate coverage.


Penyebab Sebenarnya: Subdomain Bertingkat

Cloudflare Free Plan menggunakan Universal SSL. Secara default, Cloudflare hanya membuat certificate untuk:

mydomain.com
*.mydomain.com

Artinya hanya subdomain satu level yang tercakup.

Contoh yang didukung:

app.mydomain.com
monitor.mydomain.com
grafana.mydomain.com
status.mydomain.com

Contoh yang tidak didukung:

monitor.service.mydomain.com
grafana.monitor.mydomain.com
api.dev.mydomain.com

Domain yang saya gunakan ternyata termasuk kategori kedua:

monitor.service.mydomain.com

Strukturnya seperti ini:

mydomain.com
└ service.mydomain.com
  └ monitor.service.mydomain.com

Wildcard certificate:

*.mydomain.com

tidak bisa mencakup domain:

monitor.service.mydomain.com

Akibatnya Cloudflare tidak memiliki certificate untuk hostname tersebut, sehingga TLS handshake gagal dan browser menampilkan error:

ERR_SSL_VERSION_OR_CIPHER_MISMATCH

Padahal sebenarnya bukan masalah cipher sama sekali.


Solusi yang Saya Gunakan

Solusi paling sederhana adalah mengubah domain menjadi satu level subdomain.

Dari:

monitor.service.mydomain.com

menjadi:

monitor.mydomain.com

Setelah DNS diubah dan Cloudflare menerbitkan certificate baru, aplikasi langsung bisa diakses dengan normal.

Tidak perlu mengubah konfigurasi tunnel, reverse proxy, atau container.


Alternatif Solusi Lain

Jika memang ingin tetap menggunakan subdomain bertingkat, ada beberapa opsi lain.

1. Mengaktifkan Total TLS

Cloudflare menyediakan fitur Total TLS yang dapat membuat certificate untuk semua hostname secara otomatis, termasuk subdomain bertingkat.

Namun fitur ini termasuk dalam add-on Advanced Certificate Manager, yang merupakan fitur berbayar.


2. Menggunakan Custom Certificate

Alternatif lainnya adalah mengunggah certificate sendiri, misalnya wildcard seperti:

*.service.mydomain.com

Namun ini juga biasanya digunakan pada plan berbayar.


Rekomendasi Struktur Domain untuk Self-Hosted Services

Jika menggunakan Cloudflare Free Plan, biasanya lebih praktis menggunakan pola seperti ini:

grafana.mydomain.com
monitor.mydomain.com
status.mydomain.com
pbx.mydomain.com
docker.mydomain.com

Selain lebih sederhana, pola ini juga menghindari masalah certificate coverage.


Kesimpulan

Jika kamu menemukan error seperti:

ERR_SSL_VERSION_OR_CIPHER_MISMATCH

dan menggunakan Cloudflare, jangan langsung fokus ke konfigurasi TLS.

Coba cek dulu apakah hostname yang digunakan tercakup oleh certificate Cloudflare.

Pada Free Plan, Cloudflare hanya menjamin certificate untuk:

mydomain.com
*.mydomain.com

Jika menggunakan subdomain bertingkat, kemungkinan besar domain tersebut tidak memiliki certificate di Cloudflare edge.

Solusi paling cepat biasanya hanya mengubah domain menjadi satu level subdomain.