Sertifikat self-signed adalah sertifikat yang Anda terbitkan sendiri, bukan membelinya dari otoritas sertifikat. Browser tidak akan mempercayainya secara otomatis, sehingga tidak cocok digunakan di situs web publik, tetapi ini adalah cara tercepat untuk memasang HTTPS pada mesin pengembangan, server staging, dasbor internal, atau layanan apa pun yang tidak pernah menghadapi internet terbuka.
Panduan ini menunjukkan cara membuat sertifikat self-signed dengan OpenSSL di Windows, Linux, dan macOS. Perintahnya sama di ketiganya. Anda juga akan melihat cara memeriksa apakah sertifikat yang Anda hasilkan benar-benar dapat digunakan, dan cara membuat mesin Anda sendiri mempercayainya sehingga peringatan browser hilang.
Apa itu sertifikat self-signed
Sertifikat self-signed adalah sertifikat digital yang ditandatangani dengan private key miliknya sendiri, bukan oleh otoritas sertifikat (CA) tepercaya. Secara kriptografis, ini adalah sertifikat X.509 biasa: enkripsi lalu lintasnya sama baiknya dengan sertifikat yang dibeli. Yang tidak dimilikinya adalah rantai kepercayaan. Tidak ada apa pun di luar mesin Anda sendiri yang punya alasan untuk mempercayainya, sehingga browser menampilkan peringatan sampai Anda memberi tahu sebaliknya.
Hal ini membuat sertifikat self-signed cocok untuk:
- Pengembangan lokal, di mana Anda membutuhkan HTTPS agar cookie, service worker, atau SDK pembayaran berperilaku seperti yang akan terjadi di produksi.
- Layanan internal seperti dasbor intranet, panel pemantauan, atau antarmuka manajemen perangkat di jaringan privat.
- Pengujian dan staging, di mana Anda ingin menguji coba konfigurasi TLS tanpa mengeluarkan biaya untuk sertifikat.
- Server origin di belakang proxy yang menerima sertifikat tidak tepercaya pada jalur back-end, seperti Cloudflare dalam mode Full.
Sertifikat ini adalah alat yang salah untuk apa pun yang akan dimuat oleh pengunjung sungguhan. Kami membahas perbedaan ini secara rinci lebih lanjut di bawah, pada bagian kapan sebaiknya tidak menggunakannya.
Sebelum memulai: periksa OpenSSL Anda
Anda memerlukan alat baris perintah OpenSSL. Periksa versi yang Anda miliki:
openssl version
- Linux: OpenSSL sudah terpasang di sebagian besar distribusi. Jika belum, lihat panduan kami tentang cara memasang OpenSSL di Ubuntu.
- Windows: OpenSSL tidak disertakan secara bawaan. Ikuti instruksi kami tentang cara memasang OpenSSL di Windows, lalu jalankan perintah dari Command Prompt atau PowerShell.
- macOS: Apple menyertakan LibreSSL, sebuah fork dari OpenSSL, sebagai perintah openssl bawaan, sehingga ini akan menampilkan sesuatu seperti LibreSSL 3.3.6 alih-alih versi OpenSSL.
Perintah utama dalam panduan ini berfungsi di LibreSSL 3.3.6 maupun OpenSSL versi terbaru, sehingga pengguna Mac dapat menggunakan alat bawaan. Jika Anda lebih memilih OpenSSL asli (beberapa perintah opsional di bawah ini membutuhkannya), pasang dengan pengelola paket Homebrew dan panggil dengan jalur lengkapnya:
brew install openssl@3
/opt/homebrew/opt/openssl@3/bin/openssl version
Pada Mac berbasis Intel, jalurnya adalah /usr/local/opt/openssl@3/bin/openssl. Untuk detail lebih lanjut tentang membaca output ini, lihat panduan kami tentang cara memeriksa versi OpenSSL Anda.
Cara membuat sertifikat self-signed dengan OpenSSL
Langkah 1: Buka terminal
Di Linux, tekan Ctrl + Alt + T atau cari “Terminal” di menu aplikasi Anda. Di macOS, buka Applications, lalu Utilities, lalu Terminal, atau tekan Cmd + Space dan ketik “Terminal”. Di Windows, tekan Win + R, ketik cmd, lalu tekan Enter.

Langkah 2: Pindah ke folder tempat Anda ingin menyimpan berkas
OpenSSL menulis outputnya ke direktori tempat Anda berada saat ini, bukan ke direktori tempat OpenSSL terpasang. Buat folder untuk sertifikat ini dan pindah ke dalamnya agar key dan sertifikat berada di tempat yang bisa Anda temukan:
mkdir my-cert
cd my-cert
Di Windows, gunakan dua perintah yang sama di Command Prompt. Jangan jalankan perintah dari dalam folder program OpenSSL: di Windows, direktori tersebut sering kali tidak dapat ditulisi oleh pengguna biasa, dan mencampur key Anda dengan berkas biner membuatnya mudah hilang.
Langkah 3: Jalankan perintah sertifikat
Satu perintah ini menghasilkan private key dan sertifikat self-signed sekaligus. Ganti example.com dan www.example.com dengan nama yang benar-benar akan digunakan untuk mengakses layanan Anda:
openssl req -x509 -newkey rsa:2048 -keyout private.key -out certificate.crt -days 365 -nodes -addext "subjectAltName=DNS:example.com,DNS:www.example.com" -addext "basicConstraints=critical,CA:FALSE" -addext "extendedKeyUsage=serverAuth"
Tetap dalam satu baris. Command Prompt dan shell Unix menggunakan karakter penyambung baris yang berbeda, dan satu baris tunggal berfungsi di mana saja. Gunakan tanda kutip ganda, bukan tanda kutip tunggal, karena alasan yang sama: Command Prompt tidak memperlakukan tanda kutip tunggal sebagai tanda kutip.
Berikut fungsi masing-masing bagian:
- req -x509: menghasilkan sertifikat jadi yang sudah ditandatangani, bukan certificate signing request.
- -newkey rsa:2048: membuat private key RSA 2048-bit baru sebagai bagian dari perintah yang sama. 2048 bit adalah minimum saat ini dan default yang masuk akal. Gunakan rsa:4096 jika kebijakan Anda mengharuskan key yang lebih besar, dengan konsekuensi jabat tangan (handshake) yang lebih lambat.
- -keyout private.key: nama berkas untuk private key.
- -out certificate.crt: nama berkas untuk sertifikat.
- -days 365: berapa lama sertifikat tetap berlaku. Lihat bagian masa berlaku di bawah sebelum mengubah nilai ini.
- -nodes: membiarkan private key tidak terenkripsi, sehingga server web Anda dapat dimulai tanpa seseorang perlu mengetikkan passphrase.
- -addext “subjectAltName=…”: daftar nama host tempat sertifikat berlaku. Tanpa ini, sertifikat tidak cocok dengan apa pun.
- -addext “basicConstraints=critical,CA:FALSE”: menandai sertifikat sebagai sertifikat end-entity (server), bukan otoritas sertifikat.
- -addext “extendedKeyUsage=serverAuth”: menyatakan bahwa sertifikat digunakan untuk mengautentikasi server TLS. Platform Apple memperlakukan ini sebagai wajib.

Mengapa ketiga opsi -addext ini penting
Ketiga flag ini adalah perbedaan antara sertifikat yang berfungsi dan sertifikat yang langsung ditolak klien. Penting untuk memahaminya, karena sertifikat self-signed yang dibuat tanpa flag ini gagal dalam tiga cara yang mudah salah didiagnosis.
Subject Alternative Name adalah tempat nama host disimpan. Browser sudah berhenti membaca field Common Name sejak bertahun-tahun lalu dan sekarang hanya mencocokkan nama host dengan ekstensi Subject Alternative Name (SAN). Sertifikat tanpa SAN tidak cocok dengan situs mana pun, seberapa benar pun Common Name terlihat. Daftar setiap nama yang akan Anda gunakan, dipisahkan dengan koma. Untuk layanan lokal, Anda juga bisa menyertakan alamat IP:
-addext "subjectAltName=DNS:localhost,DNS:dev.example.com,IP:127.0.0.1"
Tanpa CA:FALSE, OpenSSL membuatkan Anda sertifikat CA. Ketika req -x509 dibiarkan menggunakan defaultnya sendiri, ia mengatur basicConstraints menjadi critical, CA:TRUE, yang menggambarkan otoritas sertifikat, bukan server web. Chrome dan Safari menerima hal ini pada sertifikat server. Firefox tidak, dan berhenti dengan pesan MOZILLA_PKIX_ERROR_CA_CERT_USED_AS_END_ENTITY. Anda tetap bisa mengklik Advanced dan menambahkan pengecualian, tetapi itu berarti Anda mengakali sertifikat yang sudah Anda ketahui cacat, dan klien lain menarik batas di tempat yang berbeda-beda. Menyertakan basicConstraints=critical,CA:FALSE menghindari situasi ini sejak awal.
Build LibreSSL yang disertakan macOS berperilaku berbeda di sini: jika dibiarkan menggunakan defaultnya sendiri, ia menulis sertifikat X.509 versi 1 tanpa ekstensi sama sekali, sehingga Anda tidak mendapatkan masalah CA:TRUE tetapi juga tidak mendapatkan Subject Alternative Name. Menyediakan ekstensi secara eksplisit memberi Anda sertifikat yang sama dan benar di kedua alat tersebut.
Tanpa serverAuth, platform Apple menolak sertifikat. Persyaratan resmi Apple untuk sertifikat tepercaya menyatakan bahwa sertifikat server TLS harus membawa ekstensi ExtendedKeyUsage yang berisi OID id-kp-serverAuth. Sertifikat tanpa itu gagal saat validasi sertifikat macOS berdasarkan kebijakan TLS dengan pesan “Invalid Extended Key Usage for policy”, bahkan ketika sertifikat itu berfungsi sebagai jangkar kepercayaannya sendiri. Firefox dan Chrome lebih toleran dan memperlakukan ExtendedKeyUsage yang hilang pada sertifikat server sebagai hal yang diizinkan, sehingga masalah ini mudah terlewat sampai Mac atau iPhone menjadi perangkat yang tidak bisa terhubung. Menambahkan extendedKeyUsage=serverAuth tidak merugikan apa pun di platform lain dan memang begitulah yang akan diterbitkan oleh CA publik.
Langkah 4: Isi detail sertifikat
OpenSSL meminta field-field yang membentuk Distinguished Name. Tekan Enter untuk melewati salah satu field, tetapi isi setidaknya satu, dan jadikan itu Common Name. Build LibreSSL di macOS berhenti dengan pesan “error, no objects specified in config file” dan tidak menulis apa pun jika Anda membiarkan semua field kosong. Nilai-nilai di bawah ini adalah contoh, jadi gunakan nilai Anda sendiri:

- Country Name: kode dua huruf untuk negara Anda, misalnya US.
- State or Province Name: ditulis lengkap, misalnya California.
- Locality Name: kota Anda, misalnya San Jose.
- Organization Name: nama perusahaan atau proyek Anda, misalnya Example Inc.
- Organizational Unit Name: tim yang bertanggung jawab, misalnya IT.
- Common Name: nama host utama, misalnya example.com. Gunakan nama yang sama dengan yang Anda tempatkan pertama dalam daftar Subject Alternative Name.
- Email Address: alamat kontak, misalnya [email protected]. Opsional.
Hanya Common Name yang benar-benar penting di sini, dan hanya sebagai label: pencocokan nama host dilakukan oleh Subject Alternative Name yang sudah Anda tetapkan di baris perintah. Sisanya bersifat deskriptif.
Anda akan menyadari bahwa perintah ini tidak pernah meminta challenge password. Prompt tersebut adalah milik certificate signing request, dan merupakan field sisa yang umumnya diabaikan atau ditolak oleh CA. Karena perintah ini menghasilkan sertifikat jadi, bukan permintaan, prompt tersebut sama sekali tidak muncul.
Langkah 5: Verifikasi sertifikat sebelum menggunakannya
Jangan lewatkan ini. Sertifikat self-signed bisa saja berhasil dibuat namun tetap tidak dapat digunakan, dan kegagalannya baru muncul kemudian sebagai kesalahan browser. Baca kembali sertifikatnya:
openssl x509 -in certificate.crt -noout -text
Di blok ekstensi X509v3, Anda mencari tepat tiga hal:
X509v3 Subject Alternative Name:
DNS:example.com, DNS:www.example.com
X509v3 Basic Constraints: critical
CA:FALSE
X509v3 Extended Key Usage:
TLS Web Server Authentication
Jika baris Subject Alternative Name hilang, sertifikat tidak akan cocok dengan nama host mana pun. Jika Basic Constraints menyatakan CA:TRUE, Firefox akan berhenti karenanya. Jika baris Extended Key Usage hilang, platform Apple akan menolak sertifikat. Dalam kasus mana pun, hapus kedua berkas dan jalankan kembali perintahnya dengan ketiga opsi -addext disertakan.
Pada OpenSSL 3.x, Anda dapat meminta khusus ekstensi tersebut alih-alih membaca seluruh sertifikat:
openssl x509 -in certificate.crt -noout -ext subjectAltName,basicConstraints,extendedKeyUsage
Flag -ext tidak ada di build LibreSSL yang disertakan macOS, yang akan melaporkan “unknown option -ext”. Di Mac standar, gunakan versi -text di atas.
Untuk memastikan sertifikat dan key saling berpasangan, bandingkan modulusnya. Kedua perintah ini harus mencetak hash yang sama:
openssl x509 -noout -modulus -in certificate.crt | openssl md5
openssl rsa -noout -modulus -in private.key | openssl md5

Sertifikat itu sendiri adalah berkas teks. Membukanya di editor teks menampilkan blok base64 di antara baris BEGIN CERTIFICATE dan END CERTIFICATE, yang merupakan bagian yang Anda tempelkan ke panel kontrol yang meminta sertifikat, bukan unggahan berkas.
Variasi pada perintah
Menghasilkannya tanpa prompt apa pun
Untuk skrip dan pipeline CI, sediakan Distinguished Name dengan -subj dan perintahnya berjalan tanpa perlu interaksi:
openssl req -x509 -newkey rsa:2048 -keyout private.key -out certificate.crt -days 365 -nodes -subj "/C=US/ST=California/L=San Jose/O=Example Inc/CN=example.com" -addext "subjectAltName=DNS:example.com,DNS:www.example.com" -addext "basicConstraints=critical,CA:FALSE" -addext "extendedKeyUsage=serverAuth"
Menggunakan key EC alih-alih RSA
Key elliptic-curve lebih kecil dan lebih cepat daripada RSA dengan tingkat keamanan yang setara, dan setiap browser saat ini mendukungnya. P-256 adalah pilihan standar:
openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -keyout private.key -out certificate.crt -days 365 -nodes -addext "subjectAltName=DNS:example.com,DNS:www.example.com" -addext "basicConstraints=critical,CA:FALSE" -addext "extendedKeyUsage=serverAuth"
Hasilnya ditandatangani dengan ecdsa-with-SHA256. Tetaplah menggunakan RSA jika Anda harus mendukung klien tertanam lama atau versi Java lawas, yang terkadang tidak mendukung EC.
Gunakan OpenSSL asli untuk yang satu ini. Build LibreSSL di macOS menerima perintah ini, tetapi menuliskan curve ke dalam sertifikat sebagai serangkaian parameter eksplisit penuh, bukan pengenal P-256 standar. RFC 5480 menyatakan bahwa bentuk eksplisit tidak boleh digunakan dalam sertifikat, dan macOS sendiri menolak sertifikat yang dienkode dengan cara tersebut.
Periksa hasilnya dengan openssl x509 -in certificate.crt -noout -text: Anda ingin melihat baris yang berbunyi “ASN1 OID: prime256v1”, bukan blok yang mencantumkan Prime, A, B, dan Generator. Di Mac standar, gunakan perintah RSA di atas atau pasang OpenSSL melalui Homebrew terlebih dahulu.
-nodes atau -noenc?
Kedua flag melakukan hal yang sama: keduanya mencegah OpenSSL mengenkripsi private key dengan passphrase. OpenSSL 3.x menambahkan -noenc sebagai nama yang lebih jelas dan mencantumkan -nodes sebagai usang, meskipun masih menerimanya. LibreSSL, yang disertakan macOS, sama sekali tidak mengenali -noenc dan menghasilkan kesalahan.
Panduan ini menggunakan -nodes karena inilah opsi yang berfungsi di semua build yang mungkin Anda temui, termasuk Mac standar. Jika Anda menggunakan OpenSSL 3.x dan ingin menghindari ejaan yang usang, ganti dengan -noenc. Tidak ada yang berubah selain itu.
Jika Anda menghapus flag ini sepenuhnya, OpenSSL akan mengenkripsi key dengan passphrase pilihan Anda, dan server web Anda kemudian akan meminta passphrase tersebut setiap kali dimulai ulang. Ini jarang menjadi hal yang Anda inginkan untuk sertifikat pengembangan.
Membuat mesin Anda mempercayai sertifikat
Sertifikat self-signed yang benar tetap menghasilkan peringatan browser, karena belum ada yang diberi tahu untuk mempercayainya. Menambahkannya ke penyimpanan kepercayaan (trust store) lokal Anda adalah yang mematikan peringatan tersebut, dan biasanya itulah tujuan membuat sertifikat ini sejak awal.
Lakukan ini hanya di mesin yang Anda kendalikan, dan hanya untuk sertifikat yang Anda buat sendiri. Sertifikat tepercaya dipercaya untuk setiap situs yang disebutkannya, jadi perlakukan private key sesuai dengan itu dan jangan pernah membagikannya.
Keychain macOS
Tambahkan sertifikat ke keychain sistem dan tandai sebagai tepercaya untuk TLS. Anda akan diminta memasukkan kata sandi administrator:
sudo security add-trusted-cert -d -r trustRoot -p ssl -k /Library/Keychains/System.keychain certificate.crt
Bagian -p ssl membatasi kepercayaan hanya untuk koneksi TLS. Jika dihilangkan, sertifikat akan dipercaya untuk setiap tujuan yang dikenal macOS, termasuk penandatanganan kode, yang jauh lebih luas daripada yang dibutuhkan sertifikat pengembangan.
Untuk melakukannya melalui antarmuka, klik dua kali berkas sertifikat untuk membuka Keychain Access, cari entrinya di bawah keychain System, buka, perluas Trust, dan atur When using this certificate ke Always Trust. Untuk membatalkannya nanti, hapus entri tersebut dari Keychain Access.
Penyimpanan sertifikat Windows
Buka Command Prompt sebagai administrator (tekan Win + R, ketik cmd, lalu tekan Ctrl + Shift + Enter) dan tambahkan sertifikat ke penyimpanan Trusted Root Certification Authorities:
certutil -addstore -f "Root" certificate.crt
Alternatifnya, klik dua kali berkas sertifikat, pilih Install Certificate, pilih Local Machine, lalu Place all certificates in the following store, dan telusuri ke Trusted Root Certification Authorities. Untuk menghapusnya nanti, buka certmgr.msc dan hapus entri tersebut dari penyimpanan itu.
ca-certificates Linux
Di Debian dan Ubuntu, salin sertifikat ke direktori anchor lokal dan bangun ulang bundelnya. Berkas ini harus tetap memiliki ekstensi .crt atau alat pembaruan akan mengabaikannya:
sudo cp certificate.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
Di RHEL, CentOS, AlmaLinux, Rocky, dan Fedora, jalurnya berbeda:
sudo cp certificate.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust extract
Pengecualian Firefox
Firefox menyimpan penyimpanan kepercayaannya sendiri, bukan menggunakan milik sistem operasi. Di Windows dan macOS, Firefox juga membaca root yang ditambahkan ke penyimpanan OS secara default, sehingga langkah-langkah di atas biasanya sudah mencakupnya. Di Linux, hal ini tidak berlaku, sehingga sertifikat harus diimpor langsung ke Firefox: buka Settings, lalu Privacy & Security, gulir ke Certificates, klik View Certificates, buka tab Authorities, dan gunakan Import.
Mulai ulang browser setelah salah satu perubahan ini. Browser menyimpan cache keputusan sertifikat, dan sesi yang basi adalah alasan umum mengapa peringatan tampak terus muncul setelah pengimporan yang benar.
Kapan sebaiknya tidak menggunakan sertifikat self-signed
Jangan pernah memasangnya di situs yang akan dikunjungi publik. Setiap pengunjung akan mendapatkan peringatan keamanan satu halaman penuh, dan mereka yang tetap melanjutkan telah dilatih untuk mengklik lewati peringatan yang sebenarnya melindungi mereka dari serangan sungguhan. Pengunjung juga tidak punya cara untuk membedakan sertifikat self-signed Anda dari sertifikat penyerang, yang justru menjadi alasan utama mengapa browser tidak mempercayainya. Kami membahas detailnya di artikel kami tentang bahaya sertifikat self-signed.
Sertifikat self-signed juga gagal memenuhi persyaratan praktis di luar peringatan browser. Prosesor pembayaran, toko aplikasi, aplikasi seluler dengan certificate pinning, dan sebagian besar rezim kepatuhan mengharuskan sertifikat dari CA yang diakui. Untuk apa pun yang menghadap publik, gunakan sertifikat yang diterbitkan oleh otoritas sertifikat tepercaya, yang Anda minta dengan CSR dan divalidasi sebelum diterbitkan. Setelah aktif, konfirmasikan pemasangannya dengan SSL Checker kami.
Hemat 10% untuk Sertifikat SSL saat memesan hari ini!
Penerbitan cepat, enkripsi kuat, kepercayaan peramban 99,99%, dukungan khusus, dan jaminan uang kembali 25 hari. Kode kupon: SAVE10
