Belajar OpenSSL dan Ubuntu - Panduan Lengkap Membuat Certificate Authority Root CA Intermediate dan Menerbitkan Sertifikat Untuk Server dan Client | UNIX LINUX EXPLORE
Edit

Belajar OpenSSL dan Ubuntu - Panduan Lengkap Membuat Certificate Authority Root CA Intermediate dan Menerbitkan Sertifikat Untuk Server dan Client

Pembahsan kita kali ini masih seputar pembuatan sertifikat OpenSSL. Pada artikel ini kami akan menjelaskan cara membangun otoritas sertifikat sendiri dan cara menerbitkan sertifikat untuk orang, lain perangkat, dan layanan yang bertindak sebagai klien dan server.




1. Pengertian sertifikat Public dan sertifikat Private CA

Saat anda ingin menyediakan layanan untuk masyarakat umum seperti server DNS atau web server, pasti anda menggunakan sertifikat yang ditandatangani oleh pihak ketiga yang “tepercaya”. Orang-orang yang mengakses server anda tidak mengenal anda, dan anda juga tidak mengenal mereka. Lalu bagaimana anda dapat berkomunikasi dengan aman dengan orang-orang tersebut.

Untuk memulai saluran komunikasi yang aman dan “tepercaya”, server anda memerlukan tanda tangan CA publik (yang dapat dikenal oleh anda dan orang-orang yang mengakses server anda. Hal ini akan meyakinkan mereka, bahwa mereka memang berbicara dengan server anda, dan tidak ada seorang pun yang dapat mendengarkan atau membaca komunikasi antara server anda dan mereka.

Jadi secara garis besar sertifikat publik adalah sertifikat yang dikeluarkan oleh anda, dan digunakan oleh orang banyak untuk berkomunikasi secara aman dengan server anda.

Mungkin anda juga bertanya, kapan menggunakan sertifikat Private CA?. Private CA merupakan sertifikat pribadi atau tertutup yang digunakan hanya untuk sekelompok orang tertentu, seperti perusahaan, rumah sakit, kampus, LSM atau sekolah. Sertifikat ini biasanya untuk memberikan hak akses tertentu kepada penggunanya. Dengan adanya sertifikat Private CA, akan menjamin keamanan server perusahaan, karena tak ada orang atau karyawan yang dapat mengakses server tanpa seizin administrator.

2. Certificate Authority (CA)


Pada prakteknya, untuk membuat sebuah certificate authority (CA)  banyak sekali komponen yang terlibat, karena certificate authority adalah gabungan atau  kombinasi dari hal-hal di bawah ini:
  • Private key (kunci pribadi)
  • Self-signed certificate (Sertifikat yang ditandatangani sendiri untuk kunci privat tersebut).
  • List of all certificates (Daftar seluruh sertifikat yang telah diterbitkan;).
  • Revoked / CRL (Daftar seluruh sertifikat yang telah dicabut).
  • Policy certificates (Kebijakan penerbitan sertifikat).
  • Publishing the CRL validate certificates / OCSP (Layanan untuk menerbitkan sertifikat validasi CRL / OCSP.
Dari semua komponen di atas, hanya kunci privat yang perlu dilindungi secara ketat. Biasanya untuk melindungi kunci pribadi, digunakan metode pembuatan sertifikat Root CA dan Intermediate CA atau sertifikat perantara.

3. Membuat Root CA

Otoritas sertifikat menggunakan struktur direktori tertentu untuk menyimpan kunci, sertifikat yang ditandatangani, permintaan penandatanganan, dan daftar pencabutan. Struktur direktori ditentukan dalam file konfigurasi OpenSSL, seperti contoh di bawah ini.
root-ca/
    |
    |----certreqs/
    |
    |----certs/
    |
    |----crl/
    |
    |----newcerts/
    |
    |----private/

Kita lanjutkan dengan menjalankan perintah "umask", karena kita membuat kunci pribadi.

Jalankan umask dan buat direktori
root@ns3:~# umask 077
root@ns3:~# mkdir -p /etc/ssl/CAubuntu
root@ns3:~# cd /etc/ssl/CAubuntu
root@ns3:/etc/ssl/CAubuntu# mkdir -p root-ca/{certreqs,certs,crl,newcerts,private}
root@ns3:/etc/ssl/CAubuntu# cd /etc/ssl/CAubuntu/root-ca
Kita buat beberapa file data yang diperlukan untuk melacak sertifikat yang diterbitkan, nomor seri dan pencabutannya.

/etc/ssl/CAubuntu/root-ca
root@ns3:/etc/ssl/CAubuntu/root-ca# touch /etc/ssl/CAubuntu/root-ca/root-ca.index root-ca.cnf
root@ns3:/etc/ssl/CAubuntu/root-ca# echo 00 > /etc/ssl/CAubuntu/root-ca/root-ca.crlnum
Buat file serial, untuk menyimpan nomor seri tambahan berikutnya.Menggunakan nomor seri acak dan bukan nomor seri tambahan adalah praktik keamanan yang disarankan.

/etc/ssl/CAubuntu/root-ca
root@ns3:/etc/ssl/CAubuntu/root-ca# openssl rand -hex 16 > /etc/ssl/CAubuntu/root-ca/root-ca.serial

a. Buat file Konfigurasi Root CA

Konfigurasi OpenSSL untuk otoritas sertifikat root ada di file /etc/ssl/CAubuntu/root-ca/root-ca.cnf.

Script /etc/ssl/CAubuntu/root-ca/root-ca.cnf
# OpenSSL configuration for the Root Certification Authority.

CA_HOME                 = .
RANDFILE                = $ENV::CA_HOME/private/.rnd

[ ca ]
default_ca              = root_ca

[ root_ca ]
dir                     = $ENV::CA_HOME
certs                   = $dir/certs
serial                  = $dir/root-ca.serial
database                = $dir/root-ca.index
new_certs_dir           = $dir/newcerts
certificate             = $dir/root-ca.cert.pem
private_key             = $dir/private/root-ca.key.pem
default_days            = 1826 # 5 years
crl                     = $dir/root-ca.crl
crl_dir                 = $dir/crl
crlnumber               = $dir/root-ca.crlnum
name_opt                = multiline, align
cert_opt                = no_pubkey
copy_extensions         = copy
crl_extensions          = crl_ext
default_crl_days        = 180
default_md              = sha384
preserve                = no
email_in_dn             = no
policy                  = policy
unique_subject          = no

[ policy ]
countryName             = optional
stateOrProvinceName     = optional
localityName            = optional
organizationName        = supplied
organizationalUnitName  = optional
commonName              = supplied

[ req ]
default_bits            = 4096
default_keyfile         = private/root-ca.key.pem
encrypt_key             = yes
default_md              = sha384
string_mask             = utf8only
utf8                    = yes
prompt                  = no
req_extensions          = root-ca_req_ext
distinguished_name      = distinguished_name
subjectAltName          = @subject_alt_name

[ root-ca_req_ext ]
subjectKeyIdentifier    = hash
subjectAltName          = @subject_alt_name

[ distinguished_name ]
organizationName        = example.net
commonName              = example.net Root Certification Authority

[ root-ca_ext ]
basicConstraints        = critical, CA:true
keyUsage                = critical, keyCertSign, cRLSign
nameConstraints         = critical, @name_constraints
subjectKeyIdentifier    = hash
subjectAltName          = @subject_alt_name
authorityKeyIdentifier  = keyid:always
issuerAltName           = issuer:copy

[ intermed-ca_ext ]
basicConstraints        = critical, CA:true, pathlen:0
keyUsage                = critical, keyCertSign, cRLSign
subjectKeyIdentifier    = hash
subjectAltName          = @subject_alt_name
authorityKeyIdentifier  = keyid:always
issuerAltName           = issuer:copy
authorityInfoAccess     = @auth_info_access
crlDistributionPoints   = crl_dist

[ crl_ext ]
authorityKeyIdentifier  = keyid:always
issuerAltName           = issuer:copy

[ subject_alt_name ]
URI                     = http://ca.example.net/
email                   = certmaster@example.net

[ name_constraints ]
permitted;DNS.1         = example.net
permitted;DNS.2         = example.org
permitted;DNS.3         = lan
permitted;DNS.4         = onion
permitted;email.1       = example.net
permitted;email.2       = example.org

[ auth_info_access ]
caIssuers;URI           = http://ca.example.net/certs/example.net_Root_Certification_Authority.cert.pem

[ crl_dist ]
fullname                = URI:http://ca.example.net/crl/example.net_Root_Certification_Authority.crl
Anda pastikan file konfigurasi OpenSSL untuk root CA aktif dengan menjalankan perintah di bawah ini.

Jalankan perintah export
root@ns3:~# cd /etc/ssl/CAubuntu/root-ca
root@ns3:/etc/ssl/CAubuntu/root-ca# export OPENSSL_CONF=./root-ca.cnf

b. Buat kunci pribadi (private)

Perintah berikut membuat kunci EC atau RSA baru yang dilindungi kata sandi dan tambahan permintaan penandatanganan sertifikat untuk root.

Buat kunci pribadi (private)
root@ns3:~# cd /etc/ssl/CAubuntu/root-ca
root@ns3:/etc/ssl/CAubuntu/root-ca# export OPENSSL_CONF=./root-ca.cnf
root@ns3:/etc/ssl/CAubuntu/root-ca# openssl ecparam -genkey -name secp384r1 | openssl ec -aes256 -out /etc/ssl/CAubuntu/root-ca/private/root-ca.key.pem
root@ns3:/etc/ssl/CAubuntu/root-ca# chmod 400 /etc/ssl/CAubuntu/root-ca/private/root-ca.key.pem

c. Hasilkan CSR dari Kunci pribadi

Jika Anda perlu memperbarui sertifikat CA yang ada, Anda juga dapat menggunakan kunci yang sudah ada untuk membuat CSR baru. Perintah berikut membuat permintaan penandatanganan sertifikat untuk root menggunakan kunci yang sudah ada.

Buat file csr (certificate sign request)
root@ns3:/etc/ssl/CAubuntu/root-ca# openssl req -new \
					-key /etc/ssl/CAubuntu/root-ca/private/root-ca.key.pem \
					-out /etc/ssl/CAubuntu/root-ca/certreqs/root-ca.req.pem

d. Menampilkan isi file csr

Anda dapat melihat seluruh isi file csr dengan perintah berikut.

Melihat script file csr
root@ns3:/etc/ssl/CAubuntu/root-ca# openssl req -verify \
					-in /etc/ssl/CAubuntu/root-ca/certreqs/root-ca.req.pem \
					-noout -text -reqopt no_version,no_pubkey,no_sigdump \
					-nameopt multiline

e. Menandatangani Sendiri Sertifikat Root

Jika semua perintah di atas telah anda jalankan dan tak ada masalah, tanda tangani sendiri permintaan sertifikat yang telah anda buat di atas.

Menandatangani sertifikat
root@ns3:/etc/ssl/CAubuntu/root-ca# openssl rand -hex 16 > root-ca.serial
root@ns3:/etc/ssl/CAubuntu/root-ca# openssl ca -selfsign \
					-config /etc/ssl/CAubuntu/root-ca/root-ca.cnf \
					-in /etc/ssl/CAubuntu/root-ca/certreqs/root-ca.req.pem \
					-out /etc/ssl/CAubuntu/root-ca/certs/root-ca.cert.pem \
					-extensions root-ca_ext \
					-startdate `date +%y%m%d000000Z -u -d -1day` \
					-enddate `date +%y%m%d000000Z -u -d +10years+1day`
Tanda tangan sertifikat yang anda buat di atas, akan berlaku selama sepuluh tahun ke depan.

Jika anda ingin melihat isi script dari sertifikat yang telah anda tandatangani sendiri tersebut, jalankan perintah berikut ini.

Melihat script sertifikat yang telah anda tandatangani
root@ns3:/etc/ssl/CAubuntu/root-ca# openssl x509 \
					-in /etc/ssl/CAubuntu/root-ca/certs/root-ca.cert.pem \
					-noout -text -certopt no_version,no_pubkey,no_sigdump \
					-nameopt multiline
Anda dapat memverifikasi sertifikat yang telah anda tandatangani sendiri, apakah valid atau tidak valid.

Validasi sertifikat
root@ns3:/etc/ssl/CAubuntu/root-ca# openssl verify -verbose \
                                        -CAfile /etc/ssl/CAubuntu/root-ca/certs/root-ca.cert.pem \
                                        /etc/ssl/CAubuntu/root-ca/certs/root-ca.cert.pem
/etc/ssl/CAubuntu/root-ca/certs/root-ca.cert.pem: OK

f. Buat file Certificate Revocation List (CRL)

Root CA menerbitkan daftar pencabutan sertifikat secara berkala atau ketika sertifikat telah dicabut. Root CA diharapkan hanya mengeluarkan pencabutan sertifikat yang ditandatangani sendiri atau sertifikat CA Menengah. Jika belum ada pencabutan apa pun, namun klien dan server yang memverifikasi sertifikat kami akan meminta CRL terbaru dari alamat web yang dipublikasikan di sertifikat. Oleh karena itu kita perlu membuat CRL awal, meskipun kosong dari Root CA.

Buat file crl
root@ns3:/etc/ssl/CAubuntu/root-ca# openssl ca -gencrl \
					-config /etc/ssl/CAubuntu/root-ca/root-ca.cnf \
					-out /etc/ssl/CAubuntu/root-ca/crl/root-ca.crl
Untuk membuat certificate revocation list, Anda harus melihat isi script file root-ca.index, gunakan perintah "cat", seperti contoh di bawah ini.

Script /etc/ssl/CAubuntu/root-ca/root-ca.index sebelum revoke
root@ns3:~# cd /etc/ssl/CAubuntu/root-ca
root@ns3:/etc/ssl/CAubuntu/root-ca# cat root-ca.index
V       340603000000Z           42455A8391BB7B24A45400F3BC877D3A        unknown /O=example.net/CN=example.net Root Certification Authority
setelah itu anda buka folder /etc/ssl/CAubuntu/root-ca/newcerts, dan lihat seluruh file yang ada di dalamnya, gunakan perintah "ls".

Lihat isi folder /etc/ssl/CAubuntu/root-ca/newcerts
root@ns3:/etc/ssl/CAubuntu/root-ca# cd /etc/ssl/CAubuntu/root-ca/newcerts
root@ns3:/etc/ssl/CAubuntu/root-ca/newcerts# ls
42455A8391BB7B24A45400F3BC877D3A.pem
Perhatikan script berwarna hijau, ada kesamaan antara kedua file tersebut. File 42455A8391BB7B24A45400F3BC877D3A.pem akan kita jadikan acuan untuk melakukan revocation, seperti contoh di bawah ini.

Cara Revoke certificate
root@ns3:/etc/ssl/CAubuntu/root-ca# openssl ca \
        -config /etc/ssl/CAubuntu/root-ca/root-ca.cnf \
        -revoke /etc/ssl/CAubuntu/root-ca/newcerts/42455A8391BB7B24A45400F3BC877D3A.pem \
        -crl_reason keyCompromise
Agar anda lebih yakin bahwa sertifikat yang anda revoke telah berhasil, silahkan anda buka kembali file /etc/ssl/CAubuntu/root-ca/root-ca.index, dan lihat perbedaannya sebelum dan setelah di revoke

Script /etc/ssl/CAubuntu/root-ca/root-ca.index setelah revoke
root@ns3:~# cd /etc/ssl/CAubuntu/root-ca
root@ns3:/etc/ssl/CAubuntu/root-ca# cat root-ca.index
R	340603000000Z	240602134413Z,keyCompromise	42455A8391BB7B24A45400F3BC877D3A	unknown	/O=example.net/CN=example.net Root Certification Authority
Sampai sini anda masih bingung tidak, kalau sudah paham materi akan kita lanjutkan, atau anda istirahat sejenak hilangkan penat. Tapi karena tutorial ini terlalu panjang, kita sudahi pembahasannya sampai pembuatan sertifikat Root CA. Kita lanjutkan ke artikel selanjutnya di halaman berikutnya dengan judul:
"Belajar Membuat sertifikat SSL di Ubuntu - Panduan Lengkap Membuat Certificate Authority Root CA Intermediate dan Menerbitkan Sertifikat Untuk Server  dan Client".