ZeroSSL #
ZeroSSL adalah Certificate Authority (CA) komersial yang menawarkan sertifikat TLS gratis dan berbayar menggunakan protokol standar terbuka ACME. Awalnya dikenal sebagai penyedia layanan SSL tradisional, ZeroSSL kini dioperasikan oleh apilayer dan didukung oleh infrastruktur Sectigo (dahulu Comodo CA). Salah satu terobosan penting dalam dunia web server modern terjadi ketika Caddy v2.4 memperkenalkan ZeroSSL sebagai Certificate Authority fallback otomatis. Integrasi ini menjadikan Caddy sebagai server web pertama yang mengimplementasikan redundansi CA bawaan secara out-of-the-box.
Memahami ZeroSSL dan cara konfigurasinya memberi kita fleksibilitas operasional yang sangat tinggi. Di lingkungan produksi enterprise yang menuntut keandalan 100%, bergantung pada satu CA tunggal merupakan risiko titik kegagalan tunggal (single point of failure). Dengan memahami arsitektur ZeroSSL dan bagaimana Caddy menggunakannya untuk mitigasi risiko, kita dapat merancang sistem infrastruktur HTTPS yang jauh lebih tangguh terhadap gangguan jaringan, pemadaman layanan CA, maupun kendala batas frekuensi (rate limit).
Perbandingan Komparatif: ZeroSSL vs Let’s Encrypt #
Sebelum memutuskan untuk beralih menggunakan ZeroSSL sebagai CA utama kita, penting bagi kita untuk memahami perbedaan karakteristik teknis maupun non-teknis antara ZeroSSL dan Let’s Encrypt pada tingkat gratis (free tier):
| Kriteria Analisis | Let’s Encrypt | ZeroSSL (Free Tier via ACME) |
|---|---|---|
| Model Organisasi | Nirlaba (ISRG) didukung sponsor industri. | Komersial (apilayer / Sectigo). |
| Batas Sertifikat Gratis | Tidak terbatas. | Tidak terbatas jika dibuat melalui protokol ACME. (Terbatas 3 jika dibuat manual lewat dasbor web). |
| Batas Frekuensi (Rate Limit) | Ketat (50 sertifikat per domain terdaftar per minggu). | Jauh lebih longgar / tidak dipublikasikan secara ketat. |
| Kebutuhan EAB (ACME) | Tidak memerlukan EAB (External Account Binding). | Memerlukan EAB jika kita ingin mendaftarkan sertifikat ke akun dasbor pribadi kita. |
| Rantai Kepercayaan Root | ISRG Root X1 (Murni milik Let’s Encrypt). | AAA Certificate Services / USERTrust (Sectigo). |
| Sertifikat Alamat IP | Tidak mendukung sertifikat alamat IP publik via ACME. | Mendukung sertifikat untuk alamat IP publik via ACME. |
| Dasbor Pemantauan Web | Tidak menyediakan dasbor bawaan. | Menyediakan dasbor web lengkap untuk manajemen sertifikat. |
| Dukungan Kriptografi | Mendukung penuh kunci RSA dan ECDSA. | Mendukung kunci RSA dan ECDSA. |
| Dukungan SLA & Bantuan Teknis | Tidak ada (mengandalkan forum komunitas). | Tersedia secara komersial untuk pelanggan tier berbayar. |
Pentingnya Strategi Redundansi Multi-CA #
Salah satu masalah klasik dalam operasional infrastruktur web adalah ketergantungan pada satu penyedia layanan. Meskipun Let’s Encrypt memiliki keandalan yang luar biasa, pemadaman layanan (outage) sesekali tetap terjadi. Ketika Let’s Encrypt mengalami gangguan teknis atau database mereka bermasalah, server web tradisional yang hanya dikonfigurasi menggunakan Certbot tidak akan bisa menerbitkan atau memperbarui sertifikat. Hal ini dapat menyebabkan sertifikat kedaluwarsa di tengah jalan dan merusak akses pengguna.
Caddy memecahkan masalah ini dengan merintis strategi Multi-CA Redundancy secara otomatis:
flowchart TD
A["Caddy Mengajukan Permohonan Sertifikat"] --> B["Hubungi Let's Encrypt (CA Utama)"]
B --> C{"Apakah Let's Encrypt Merespons & Sukses?"}
C -- Ya --> D["Pasang Sertifikat Let's Encrypt & Selesai"]
C -- Tidak --> E["Catat Log Warning & Alihkan ke Fallback"]
E --> F["Hubungi ZeroSSL (CA Fallback)"]
F --> G{"Apakah ZeroSSL Merespons & Sukses?"}
G -- Ya --> H["Pasang Sertifikat ZeroSSL & Selesai"]
G -- Tidak --> I["Log Error Kritis & Jadwalkan Retry dengan Backoff"]
Di balik layar, jika Let’s Encrypt membalas dengan kode kesalahan (seperti masalah koneksi, server sibuk, atau jika kita telah mencapai rate limit), mesin TLS Caddy akan segera mendeteksi kegagalan tersebut. Caddy kemudian akan beralih menghubungi direktori ACME ZeroSSL menggunakan akun ACME sekunder. Seluruh proses pengalihan ini berjalan secara otomatis tanpa memerlukan konfigurasi tambahan apa pun dari kita, dan yang terpenting: tanpa menyebabkan downtime layanan.
Konsep External Account Binding (EAB) #
External Account Binding (EAB) didefinisikan dalam RFC 8555 Section 7.3.4 sebagai mekanisme untuk mengaitkan akun ACME baru dengan akun pelanggan yang sudah ada di server CA komersial. Pada Let’s Encrypt, siapa saja dapat membuat akun ACME secara anonim hanya dengan alamat email. Namun, karena ZeroSSL adalah entitas komersial, mereka perlu memastikan bahwa setiap sertifikat yang diterbitkan via ACME gratisan dikaitkan dengan akun pengguna terdaftar pada dasbor web mereka.
Secara teknis, proses EAB melibatkan penandatanganan kriptografis menggunakan algoritma HMAC (biasanya HMAC-SHA256). Saat Caddy membuat akun baru di ZeroSSL, ia harus menyertakan tanda tangan HMAC yang dibuat menggunakan EAB HMAC Key yang diberikan oleh ZeroSSL, yang diverifikasi oleh ZeroSSL menggunakan EAB Key ID kita. Keamanan HMAC ini menjamin bahwa tidak ada pihak lain yang dapat mengklaim sertifikat domain kita pada akun ZeroSSL mereka tanpa memegang HMAC Key yang valid.
Konfigurasi ZeroSSL sebagai Certificate Authority Utama #
Jika kita ingin menggunakan ZeroSSL sebagai CA primer (misalnya untuk memanfaatkan dasbor pemantauan mereka di lingkungan perusahaan kita), kita harus mendaftarkan akun secara eksplisit dan mengonfigurasi External Account Binding (EAB).
Langkah 1: Mendapatkan Kredensial EAB di Dasbor ZeroSSL #
- Daftar dan masuk ke akun kita di app.zerossl.com.
- Di sidebar kiri, klik menu Developer.
- Pada bagian ACME Credentials, klik tombol Generate.
- Sistem akan menampilkan dua string kunci penting:
- EAB Key ID (misal:
abCDEfg12345678) - EAB HMAC Key (misal:
xyz123abc456...)
- EAB Key ID (misal:
- Salin kedua string tersebut untuk digunakan di konfigurasi Caddy.
Alternatif: Membuat Kredensial EAB via REST API #
Jika kita ingin mengotomatisasikan pembuatan kredensial EAB tanpa membuka dasbor web, ZeroSSL menyediakan API REST:
# Membuat kredensial EAB baru menggunakan curl
curl -s -X POST "https://api.zerossl.com/acme/eab-credentials?access_key=API_KEY_AKUN_KITA" \
-H "Content-Type: application/json"
# Output JSON sukses:
# {
# "success": true,
# "eab_kid": "abCDEfg12345678",
# "eab_hmac_key": "xyz123abc456..."
# }
Langkah 2: Mengonfigurasi Caddyfile dengan EAB #
Setelah memiliki kredensial EAB, kita harus menuliskannya di blok opsi global Caddyfile agar Caddy dapat melakukan otentikasi ke akun ZeroSSL kita saat meminta sertifikat:
# Opsi global untuk menetapkan ZeroSSL sebagai CA utama
{
email [email protected]
cert_issuer acme {
# Endpoint direktori ACME ZeroSSL
ca https://acme.zerossl.com/v2/DV90
# Konfigurasi EAB (External Account Binding)
eab {
key_id "your-eab-key-id-here"
mac_key "your-eab-hmac-key-here"
}
}
}
example.com {
reverse_proxy localhost:8080
}
Penerbitan Sertifikat untuk Alamat IP Publik #
Salah satu keunggulan utama ZeroSSL dibandingkan Let’s Encrypt adalah dukungannya untuk sertifikat TLS pada alamat IP publik. Let’s Encrypt saat ini menolak menerbitkan sertifikat untuk IP mentah via ACME. Jika kita memiliki layanan API yang harus diakses langsung menggunakan alamat IP publik (misalnya https://203.0.113.50), ZeroSSL adalah solusi yang tepat.
Verifikasi untuk alamat IP publik dilakukan menggunakan tantangan HTTP-01 pada port 80. Berikut contoh konfigurasi Caddyfile untuk IP publik menggunakan ZeroSSL:
# Mengamankan alamat IP publik menggunakan ZeroSSL EAB
203.0.113.50 {
tls {
issuer acme {
ca https://acme.zerossl.com/v2/DV90
eab {
key_id {env.ZEROSSL_KEY_ID}
mac_key {env.ZEROSSL_MAC_KEY}
}
}
}
# Respons handler biasa
respond "Halo dari IP Publik Terenkripsi!" 200
}
Praktik Terbaik: Menggunakan Variabel Lingkungan untuk Kredensial EAB #
Sesuai panduan keamanan sistem, kita tidak boleh mencantumkan kredensial rahasia secara langsung (hardcoded) di dalam berkas Caddyfile. Caddyfile sering kali disimpan di repositori Git, dan menaruh EAB Key di sana adalah risiko keamanan besar. Cara yang benar adalah menggunakan variabel lingkungan (environment variables).
Caddy mendukung interpolasi variabel lingkungan menggunakan sintaks {env.NAMA_VARIABEL}:
# Menggunakan variabel lingkungan untuk kredensial EAB
{
email {env.ACME_EMAIL}
cert_issuer acme {
ca https://acme.zerossl.com/v2/DV90
eab {
key_id {env.ZEROSSL_KEY_ID}
mac_key {env.ZEROSSL_MAC_KEY}
}
}
}
example.com {
file_server
}
Cara Menyuntikkan Variabel Lingkungan: #
1. Pada Layanan Systemd (Linux) #
Gunakan fitur override systemd untuk menyuntikkan variabel tanpa mengubah berkas unit bawaan:
# Buka editor override systemd Caddy
sudo systemctl edit caddy
Tambahkan baris berikut di dalam blok layanan:
[Service]
Environment="[email protected]"
Environment="ZEROSSL_KEY_ID=isi_key_id_anda"
Environment="ZEROSSL_MAC_KEY=isi_hmac_key_anda"
Simpan file tersebut, lalu muat ulang daemon dan restart Caddy:
sudo systemctl daemon-reload
sudo systemctl restart caddy
2. Pada Docker Compose #
Jika Caddy berjalan di dalam kontainer Docker, sertakan variabel di bagian environment pada file docker-compose.yml:
version: "3.7"
services:
caddy:
image: caddy:2.8.4
ports:
- "80:80"
- "443:443"
environment:
- [email protected]
- ZEROSSL_KEY_ID=isi_key_id_anda
- ZEROSSL_MAC_KEY=isi_hmac_key_anda
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
- caddy_config:/config
volumes:
caddy_data:
caddy_config:
Konfigurasi Kustom Multi-CA Eksplisit #
Jika kita ingin tetap mengaktifkan Let’s Encrypt sebagai CA utama tetapi ingin mengaitkan ZeroSSL fallback dengan akun EAB pribadi kita (sehingga sertifikat fallback tetap tercatat di dasbor ZeroSSL kita), kita dapat mendeklarasikan kedua penerbit sertifikat secara berurutan dalam blok opsi global:
# Konfigurasi kustom dengan dua CA terdaftar secara eksplisit
{
email [email protected]
# Penerbit 1: Let's Encrypt (CA Utama)
cert_issuer acme {
ca https://acme-v02.api.letsencrypt.org/directory
}
# Penerbit 2: ZeroSSL dengan EAB (CA Fallback)
cert_issuer acme {
ca https://acme.zerossl.com/v2/DV90
eab {
key_id {env.ZEROSSL_KEY_ID}
mac_key {env.ZEROSSL_MAC_KEY}
}
}
}
example.com {
reverse_proxy localhost:3000
}
Dengan konfigurasi di atas, Caddy akan selalu mencoba Let’s Encrypt terlebih dahulu menggunakan akun Let’s Encrypt anonim. Jika Let’s Encrypt gagal, Caddy akan beralih menggunakan ZeroSSL yang terhubung ke akun dasbor ZeroSSL kita melalui EAB.
Fitur Dasbor ZeroSSL dan Audit Sertifikat #
Salah satu motivasi utama perusahaan beralih ke ZeroSSL adalah keberadaan dasbor administrasi web. Let’s Encrypt tidak menyediakan dasbor visual; kita hanya bisa melacak sertifikat yang diterbitkan melalui situs kueri publik seperti crt.sh.
Dasbor ZeroSSL menyediakan berbagai fitur manajemen visual:
1. Daftar Sertifikat Aktif:
Melihat semua nama domain yang saat ini menggunakan sertifikat ZeroSSL kita.
2. Peringatan Masa Berlaku:
Dasbor memberikan indikator visual yang jelas mengenai sertifikat yang mendekati
tanggal kedaluwarsa (misalnya 15 hari tersisa).
3. Manajemen Pencabutan (Revocation):
Kita dapat mencabut sertifikat langsung dari dasbor web dengan satu klik jika terjadi
kebocoran kunci privat di server.
4. SLA & Dukungan Komersial:
Jika kita berlangganan tier berbayar, kita mendapatkan garansi uptime, bantuan teknis
via email/tiket, dan sertifikat berdurasi lebih panjang (hingga 1 tahun).
Panduan Pemecahan Masalah (Troubleshooting) ZeroSSL #
Ketika mengonfigurasi ZeroSSL with Caddy, ada beberapa masalah spesifik EAB dan CA yang kerap muncul. Berikut cara menanganinya:
1. Kegagalan Otentikasi EAB (External Account Binding Failed) #
- Gejala di Log: Log Caddy menampilkan error seperti
registration failed: acme: error: 400 ... JWS verification erroratauinvalid EAB credentials. - Penyebab: String Key ID atau HMAC Key yang disalin dari dasbor ZeroSSL salah, telah kedaluwarsa, atau sudah pernah digunakan oleh klien ACME lain sebelumnya.
- Solusi: Buka kembali dasbor ZeroSSL, klik tombol untuk generate ACME Credentials baru, lalu salin ulang kuncinya secara teliti ke berkas variabel lingkungan server kita.
2. Mismatch Alamat Email #
- Gejala di Log: Proses registrasi gagal dengan pesan kesalahan terkait email.
- Penyebab: Alamat email yang kita cantumkan pada opsi
emaildi Caddyfile berbeda dengan email yang terdaftar pada akun ZeroSSL pemilik kredensial EAB. - Solusi: Pastikan parameter
emailglobal di Caddyfile sama persis dengan email login dasbor ZeroSSL kita.
3. Sertifikat Masih Menggunakan Let’s Encrypt #
- Gejala: Kita sudah mengonfigurasi ZeroSSL sebagai CA utama di Caddyfile, tetapi ketika kita melakukan pengecekan via browser atau
openssl, sertifikat yang terpasang masih diterbitkan oleh Let’s Encrypt. - Penyebab: Caddy tidak akan mengganti sertifikat yang ada jika masa berlakunya masih aktif dan aman (> 30 hari). Caddy menggunakan file sertifikat yang ada di penyimpanan lokal sampai jadwal pembaruan berikutnya tiba.
- Solusi: Jika kita ingin langsung bermigrasi ke ZeroSSL sekarang tanpa menunggu masa pembaruan, kita harus menghapus sertifikat Let’s Encrypt lama dari penyimpanan Caddy secara manual:
# Cari dan hapus file sertifikat Let's Encrypt lama untuk domain terkait
sudo find /var/lib/caddy/.local/share/caddy/ -name "*example.com*" -type d -exec rm -rf {} +
# Muat ulang konfigurasi Caddy agar meminta sertifikat baru dari ZeroSSL
sudo systemctl reload caddy
Ringkasan #
- ZeroSSL — Certificate Authority komersial yang didukung infrastruktur Sectigo, sepenuhnya kompatibel dengan protokol ACME, dan menawarkan opsi gratis tidak terbatas via ACME.
- Redundansi CA Otomatis — Caddy secara default memosisikan ZeroSSL sebagai CA cadangan. Jika Let’s Encrypt mengalami kendala, Caddy otomatis beralih ke ZeroSSL tanpa intervensi kita.
- External Account Binding (EAB) — Kredensial khusus yang harus digenerate di dasbor ZeroSSL dan dipasang di Caddy agar sertifikat terhubung dengan dasbor pemantauan web pribadi kita.
- Sertifikat Alamat IP — Kelebihan ZeroSSL dibanding Let’s Encrypt adalah kemampuannya menerbitkan sertifikat SSL untuk alamat IP publik mentah via tantangan HTTP-01.
- Keamanan Kredensial — Selalu gunakan variabel lingkungan (
{env.ZEROSSL_KEY_ID}) untuk menyimpan kunci EAB agar tidak terekspos dalam Caddyfile di Git.- Dasbor Manajemen — Keuntungan menggunakan ZeroSSL adalah dasbor visual untuk memantau status, melacak masa aktif, dan mencabut sertifikat jika terjadi kebocoran kunci privat.