ERR_SSL_VERSION_OR_CIPHER_MISMATCH: Kenapa Bisa Muncul dan Cara Memperbaikinya (Cloudflare + Reverse Proxy)

ERR_SSL_VERSION_OR_CIPHER_MISMATCH: Kenapa Bisa Muncul dan Cara Memperbaikinya (Cloudflare + Reverse Proxy)

ERR_SSL_VERSION_OR_CIPHER_MISMATCH adalah salah satu error SSL yang paling bikin frustrasi. Di browser, situs terlihat “down”, padahal service di server bisa saja sebenarnya masih berjalan.

Masalah utamanya biasanya bukan sekadar “SSL rusak”, tapi ada ketidakcocokan konfigurasi TLS antar-layer: Cloudflare, WAF, reverse proxy (Traefik/Nginx), dan origin server.

Di artikel ini, kita bahas cara diagnosis cepat dan langkah perbaikan yang aman dipakai di lingkungan production.

1) Sebenarnya error ini artinya apa?

Secara sederhana, browser gagal menyelesaikan proses TLS handshake dengan endpoint yang dituju. Penyebabnya bisa:

  • sertifikat tidak cocok dengan hostname
  • chain sertifikat tidak valid
  • mode SSL antar-layer tidak sinkron
  • ada proxy yang mengubah alur handshake
  • redirect rule yang salah

Jadi, fokus troubleshooting-nya harus melihat alur koneksi end-to-end, bukan hanya server aplikasi.

2) Penyebab paling umum

a) Hostname tidak tercakup sertifikat Cloudflare

Contoh yang sering terjadi: domain multi-level seperti whoami.oc.domain.com tidak tercakup cert edge default.

Akibatnya, saat proxied lewat Cloudflare, browser gagal handshake.

b) SSL mode Cloudflare tidak cocok

Mode di Cloudflare (Flexible, Full, Full (strict)) harus sesuai dengan kondisi cert di origin.

  • Flexible: Cloudflare ke origin bisa HTTP (tidak direkomendasikan untuk setup modern)
  • Full: TLS ke origin, tapi validasi cert longgar
  • Full (strict): TLS ke origin + cert harus valid

Kalau origin cert tidak valid tapi mode strict, handshake gagal.

c) Origin certificate / SNI mismatch

Reverse proxy bisa punya cert, tapi bukan untuk domain yang diminta. Atau server mengembalikan cert default yang salah karena SNI tidak match.

d) Redirect salah (loop ke :443)

Rule seperti ini sering jadi biang masalah:

https://$host:443$request_uri

Hasilnya bisa loop aneh dan browser menampilkan error SSL yang menyesatkan.

e) Bentrok Cloudflare + WAF + reverse proxy

Kalau ada banyak layer proxy, satu setting yang salah di tengah bisa bikin handshake putus.

3) Diagnosis cepat (5–10 menit)

Jalankan cek ini berurutan.

a) Cek DNS resolve publik

dig +short yourdomain.com A @1.1.1.1
dig +short yourdomain.com AAAA @1.1.1.1

Pastikan hasilnya sesuai jalur yang kamu inginkan (direct ke origin atau lewat Cloudflare).

b) Cek header respon

curl -I https://yourdomain.com

Lihat server, location, dan apakah terjadi redirect berulang.

c) Cek loop redirect

curl -L -o /dev/null -s -w 'code=%{http_code} redirects=%{num_redirects} url=%{url_effective}\n' https://yourdomain.com

Kalau redirects naik terus, berarti ada loop.

d) Cek sertifikat yang dikirim endpoint

echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -subject -issuer -dates

Verifikasi:

  • CN/SAN sesuai hostname
  • masa berlaku belum habis
  • issuer sesuai ekspektasi (Cloudflare edge atau origin cert)

4) Cara memperbaiki (step-by-step)

Langkah 1 — Rapikan mode SSL Cloudflare

Untuk production, biasanya paling aman pakai Full (strict).

Langkah 2 — Pastikan cert edge cover hostname

Kalau pakai hostname multi-level (mis. *.oc.domain.com), cek apakah cert edge Cloudflare mencakup pola itu.

Kalau belum tercakup:

  • gunakan hostname yang didukung cert default, atau
  • tambahkan cert yang memang cover subdomain level itu.

Langkah 3 — Rapikan redirect rule

Hindari hardcode :443 di URL redirect.

Gunakan pola aman:

https://$host$request_uri

Langkah 4 — Validasi origin cert

Kalau mode strict aktif, cert origin harus valid dan match hostname.

Langkah 5 — Uji lagi dari luar

Setelah perubahan, ulangi:

  • curl -I
  • curl -L
  • openssl s_client

Pastikan tidak ada loop dan handshake berhasil.

5) Checklist validasi akhir

  • domain bisa diakses normal via browser
  • curl -L tidak loop
  • cert valid dan match hostname
  • Cloudflare SSL mode konsisten (Full (strict))
  • endpoint reverse proxy merespons 200/expected status
  • tidak ada rule redirect yang menyisipkan :443 secara salah

6) FAQ singkat

Q: Kalau DNS only normal, tapi proxied Cloudflare error, itu kenapa?

A: Hampir pasti masalahnya di layer Cloudflare ↔ origin TLS (mode SSL, cert coverage, atau chain trust).

Q: Apakah error ini selalu berarti server aplikasi down?

A: Tidak. Seringnya aplikasi hidup, tapi handshake TLS gagal sebelum request sampai ke app.

Q: Perlu matikan Cloudflare dulu?

A: Tidak selalu. Untuk isolasi, boleh test sementara DNS-only pada subdomain testing, lalu kembalikan setelah fix.

Penutup

ERR_SSL_VERSION_OR_CIPHER_MISMATCH terlihat seperti error “misterius”, tapi pola penyebabnya sebenarnya berulang. Kalau diagnosis dilakukan berurutan (DNS → header → redirect → cert), sumber masalah biasanya cepat ketemu.

Kuncinya: sinkronkan konfigurasi antar-layer, terutama mode Cloudflare, cakupan sertifikat, dan rule redirect di reverse proxy.