Masalah sertifikat SSL adalah salah satu masalah teknis paling mengganggu yang bisa dialami sebuah situs. Sertifikat yang kedaluwarsa akan mengunci setiap pengunjung dengan peringatan browser. Sertifikat yang salah dikonfigurasi menyebabkan kegagalan diam-diam. Sertifikat yang dikeluarkan untuk domain yang salah akan merusak subdomain. Dan tidak seperti kebanyakan masalah, masalah sertifikat terjadi sesuai jadwal — masa berlakunya habis — jadi masalah ini sepenuhnya dapat dicegah jika Anda tahu di mana mencarinya.

Berikut cara memeriksa sertifikat SSL, arti setiap kolom, dan apa yang harus dilakukan jika terjadi kesalahan.

Pemeriksaan Cepat: Browser Anda

Untuk situs mana pun yang Anda kunjungi, pemeriksaan SSL tercepat ada di browser Anda.

Krom / Tepi: Klik ikon gembok (atau teks "Koneksi aman") di sebelah URL → Sertifikat valid → Detail sertifikat

Firefox: Klik ikon kunci → Koneksi Aman → Informasi Lebih Lanjut → Lihat Sertifikat

Ini menunjukkan kepada Anda:

  • Kepada siapa sertifikat tersebut diterbitkan (domain)
  • Siapa yang menerbitkannya (Otoritas Sertifikat)
  • Berlaku mulai / Berlaku hingga tanggal
  • Nomor seri dan sidik jari sertifikat

Untuk pemeriksaan kewarasan cepat — apakah sertifikat ini valid, dan apakah sertifikat tersebut milik domain yang benar — Anda hanya memerlukan UI browser.

Pemeriksaan Menyeluruh: Alat Online

Untuk analisis lengkap sertifikat termasuk cipher suite, validitas rantai, konfigurasi HSTS, dan kerentanan yang diketahui, gunakan Alat Pemeriksa SSL. Masukkan domain apa pun dan analisis lengkap akan dijalankan tanpa perlu menginstal apa pun.

Hal ini sangat berguna untuk:

  • Sertifikat di server yang tidak dapat Anda akses secara langsung
  • Memverifikasi sertifikat baru setelah instalasi
  • Memeriksa sertifikat sebelum masa berlakunya habis
  • Mengaudit kekuatan cipher suite (TLS 1.0/1.1 harus dinonaktifkan)

Baris Perintah: openssl

Untuk pengembang dan sysadmin, openssl memberi Anda pemeriksaan sertifikat langsung dari terminal.

Periksa sertifikat server jarak jauh:

Perintah
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | openssl x509 -noout -text

Ini mengembalikan rincian lengkap sertifikat. Bidang utama yang harus dilihat:

Tanggal kedaluwarsa:

Perintah
openssl s_client -connect example.com:443 -servername example.name </dev/null 2>/dev/null | openssl x509 -noout -dates

Keluaran:

Perintah
notBefore=Jan  1 00:00:00 2025 GMT
notAfter=Jan  1 00:00:00 2026 GMT

Periksa file sertifikat lokal:

Perintah
openssl x509 -in certificate.crt -noout -text
openssl x509 -in certificate.crt -noout -dates
openssl x509 -in certificate.crt -noout -subject -issuer

Verifikasi rantai sertifikat:

Perintah
openssl verify -CAfile chain.pem certificate.crt

Periksa hari hingga habis masa berlakunya (dapat ditulis dalam skrip):

Perintah
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2 | xargs -I{} date -d {} +%s | xargs -I{} expr \( {} - $(date +%s) \) / 86400

Mengembalikan jumlah hari yang tersisa. Berguna dalam memonitor skrip.

Arti Setiap Bidang Sertifikat

Subjek / Nama Umum (CN): Domain tempat sertifikat diterbitkan. Harus cocok dengan domain yang Anda kunjungi, atau browser akan menampilkan peringatan. Untuk sertifikat wildcard, ini adalah *.example.com.

Nama Alternatif Subjek (SAN): Daftar semua domain yang dicakup oleh sertifikat. Sertifikat modern menggunakan SAN, bukan hanya CN. Sertifikat mungkin mencakup example.com, www.example.com, dan api.example.com — semua tercantum di sini. Inilah yang sebenarnya diperiksa oleh browser.

Penerbit: Otoritas Sertifikat (CA) yang menandatangani sertifikat. Yang umum: Let's Encrypt, DigiCert, Sectigo, Google Trust Services, Amazon. Sertifikat milik penerbit ditandatangani oleh root CA yang dipercaya oleh browser.

Masa berlaku: Bukan Tanggal Sebelum dan Bukan Setelahnya. Sertifikat kedaluwarsa — Mari Enkripsi sertifikat kedaluwarsa setiap 90 hari (dengan perpanjangan otomatis). Sertifikat komersial biasanya bertahan 1 tahun.

Algoritma dan ukuran kunci: RSA 2048-bit adalah minimumnya; 4096-bit atau EC P-256 lebih kuat. Sertifikat EC (kurva elips) menawarkan keamanan setara dengan ukuran kunci yang lebih kecil, sehingga sedikit meningkatkan kinerja.

Versi TLS: Server Anda harus mendukung TLS 1.2 dan TLS 1.3. TLS 1.0 dan 1.1 tidak digunakan lagi dan harus dinonaktifkan — browser modern menolak koneksi pada TLS ini.

Transparansi sertifikat: Sertifikat modern dicatat dalam log Transparansi Sertifikat publik. Ini wajib untuk sertifikat yang dipercaya oleh Chrome. Ini memungkinkan siapa pun mengaudit sertifikat apa yang telah diterbitkan untuk suatu domain — berguna untuk mendeteksi sertifikat yang tidak sah.

Masalah Umum SSL dan Cara Memperbaikinya

Sertifikat kedaluwarsa Masalah paling umum. Browser Anda menampilkan "Sambungan Anda tidak pribadi" dengan kesalahan NET::ERR_CERT_DATE_INVALID.

Perbaikan: Perpanjang sertifikat. Jika Anda menggunakan Let's Encrypt dengan Certbot, jalankan certbot renew. Jika menggunakan sertifikat berbayar, beli perpanjangan melalui CA Anda dan instal. Siapkan pemantauan untuk mengingatkan Anda 30 hari sebelum kedaluwarsa sehingga hal ini tidak pernah terjadi dalam produksi.

Ketidakcocokan domain sertifikat Sertifikat dikeluarkan untuk example.com tetapi Anda berkunjung www.example.com (atau sebaliknya), dan sertifikat tidak menyertakan yang lain sebagai SAN.

Perbaikan: Dapatkan sertifikat yang mencakup keduanya (sebagian besar sertifikat seharusnya), atau alihkan salah satu sertifikat ke sertifikat lainnya secara konsisten.

Rantai sertifikat tidak lengkap Server Anda menyajikan sertifikat Anda tetapi bukan sertifikat perantara yang menghubungkannya ke root CA tepercaya. Browser yang telah melakukan cache perantara dapat terhubung; orang lain melihat kesalahan.

Perbaikan: Konfigurasikan server web Anda untuk mengirim rantai lengkap. Dengan Nginx, gunakan ssl_certificate menunjuk ke file yang menyertakan sertifikat Anda dan bundel perantara. Dengan Apache, gunakan SSLCertificateChainFile.

Periksa masalah ini secara spesifik:

Perintah
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | grep -A 1 "Certificate chain"

Anda akan melihat setidaknya 2 sertifikat dalam rantai (sertifikat Anda + perantara).

Sertifikat yang ditandatangani sendiri Browser tidak mempercayai sertifikat yang tidak ditandatangani oleh CA yang diakui. Sertifikat yang ditandatangani sendiri baik untuk pengembangan internal tetapi akan memicu peringatan untuk situs publik mana pun.

Perbaikan: Dapatkan sertifikat dari CA tepercaya. Let's Encrypt gratis dan otomatis untuk domain publik.

Rangkaian sandi yang lemah Server menegosiasikan koneksi TLS menggunakan algoritma yang ketinggalan jaman atau lemah (RC4, DES, cipher tingkat ekspor, TLS 1.0/1.1).

Hubungi:

Perintah
nmap --script ssl-enum-ciphers -p 443 example.com

Perbaikan: Perbarui konfigurasi SSL server web Anda ke cipher suite modern saja. milik Mozilla Pembuat Konfigurasi SSL menghasilkan konfigurasi siap tempel untuk Nginx, Apache, dan lainnya.

Pemantauan Sertifikat

Memeriksa sertifikat secara manual sebelum masa berlakunya habis tidak akan berskala. Opsi untuk pemantauan otomatis:

Perpanjangan otomatis Certbot: Jika Anda menggunakan Let's Encrypt, Certbot menyiapkan tugas cron atau pengatur waktu sistem yang memperbarui sertifikat secara otomatis ketika sertifikatnya tersisa kurang dari 30 hari. Verifikasi itu berfungsi: certbot renew --dry-run

Layanan pemantauan waktu aktif: Kebanyakan monitor uptime (UptimeRobot, Freshping, Better Uptime) menyertakan peringatan kedaluwarsa sertifikat. Tetapkan ambang peringatan 30 hari.

Skrip khusus di cron: Skrip bash sederhana menggunakan openssl Perintah di atas dapat memeriksa masa berlaku dan mengirim peringatan email. Perintah

Perintah
#!/bin/bash
DOMAIN="example.com"
DAYS_LEFT=$(echo | openssl s_client -connect $DOMAIN:443 -servername $DOMAIN 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2 | xargs -I{} python3 -c "from datetime import datetime; print((datetime.strptime('{}', '%b %d %H:%M:%S %Y %Z') - datetime.utcnow()).days)")
if [ "$DAYS_LEFT" -lt 30 ]; then
    echo "Certificate for $DOMAIN expires in $DAYS_LEFT days" | mail -s "SSL Warning" admin@example.com
fi

Intinya

Masalah sertifikat dapat diprediksi dan dicegah. Masalah utama — kedaluwarsa, ketidakcocokan domain, rantai tidak lengkap — semuanya muncul dengan jelas di pemeriksaan SSL.

Jalankan pemeriksaan pada domain mana pun dengan Alat Pemeriksa SSL. Untuk server produksi, siapkan pemantauan kedaluwarsa dengan setidaknya jendela peringatan 30 hari. Dan jika Anda masih menggunakan TLS 1.0 atau 1.1, nonaktifkan semuanya — server modern mana pun sebaiknya hanya menggunakan TLS 1.2+.