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

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

2024/06/27
Artikel ini merupakan kelanjutan dari artikel sebelumnya dengan judul "Belajar OpenSSL dan Ubuntu - Panduan Lengkap Membuat Certificate Authority Root CA Intermediate dan Menerbitkan Sertifikat Untuk Server  dan Client". Pada artikel ini kita akan mempelajari cara membuat sertifikat Intermediate CA.

1. Membuat Sertifikat Intermediate CA

a. Struktur Direktori dan File

Otoritas sertifikat menggunakan struktur direktori khusus untuk menyimpan kunci, sertifikat yang ditandatangani, permintaan, dan daftar pencabutan. Struktur direktori ditentukan dalam file konfigurasi OpenSSL, perhatikan gambar di bawah ini.



Sebagai langkah awal, kita akan membuat direktori dan beberapa file yang dibutuhkan untuk membuat sertifikat intermediate.

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

Buat beberapa file
root@ns3:/etc/ssl/CAubuntu/intermed-ca# touch intermed-ca.index intermed-ca.cnf
root@ns3:/etc/ssl/CAubuntu/intermed-ca# echo 00 > intermed-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.

Buat file serial
root@ns3:/etc/ssl/CAubuntu/intermed-ca# openssl rand -hex 16 > intermed-ca.serial
root@ns3:/etc/ssl/CAubuntu/intermed-ca# openssl rand -out /etc/ssl/CAubuntu/intermed-ca/private/.rnd 2048

b. Konfigurasi OpenSSL

Konfigurasi untuk otoritas sertifikat perantara ada di file /etc/ssl/CAubuntu/intermed-ca/intermed-ca.cnf. Konfigurasi lengkap dapat anda lihat seperti script di bawah ini.

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

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

[ new_oids ]
tsa_policy1 = 1.2.3.4.1
tsa_policy2 = 1.2.3.4.5.6
tsa_policy3 = 1.2.3.4.5.7

[ ca ]
default_ca              = intermed_ca

[ intermed_ca ]
dir                     = $ENV::CA_HOME
certs                   = $dir/certs
serial                  = $dir/intermed-ca.serial
database                = $dir/intermed-ca.index
new_certs_dir           = $dir/newcerts
certificate             = $dir/intermed-ca.cert.pem
private_key             = $dir/private/intermed-ca.key.pem
default_days            = 396 # 1 year + 31 days
crl                     = $dir/crl/intermed-ca.crl
crl_dir                 = $dir/crl
crlnumber               = $dir/intermed-ca.crlnum
name_opt                = multiline, align
cert_opt                = no_pubkey
copy_extensions         = copy
crl_extensions          = crl_ext
default_crl_days        = 30
default_md              = sha384
preserve                = no
email_in_dn             = no
policy                  = policy
unique_subject          = no

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

[ user_policy ]
countryName             = supplied
stateOrProvinceName     = optional
localityName            = supplied
organizationName        = optional
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = supplied

[ req ]
default_bits            = 3072
default_keyfile         = private/intermed-ca.key
encrypt_key             = yes
default_md              = sha384
string_mask             = utf8only
utf8                    = yes
prompt                  = no
req_extensions          = req_ext
distinguished_name      = distinguished_name
subjectAltName          = subject_alt_name

[ req_ext ]
subjectKeyIdentifier    = hash
subjectAltName          = @subject_alt_name

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

[ server_ext ]
keyUsage                = critical, digitalSignature, keyEncipherment
extendedKeyUsage        = critical, serverAuth, clientAuth
subjectKeyIdentifier    = hash
authorityKeyIdentifier  = keyid:always
issuerAltName           = issuer:copy
authorityInfoAccess     = @auth_info_access
crlDistributionPoints   = crl_dist

[ client_ext ]
keyUsage                = critical, digitalSignature
extendedKeyUsage        = critical, clientAuth
subjectKeyIdentifier    = hash
authorityKeyIdentifier  = keyid:always
issuerAltName           = issuer:copy
authorityInfoAccess     = @auth_info_access
crlDistributionPoints   = crl_dist

[ user_ext ]
keyUsage                = critical, digitalSignature
extendedKeyUsage        = critical, clientAuth, emailProtection
subjectKeyIdentifier    = hash
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

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

[ crl_dist ]
fullname                = URI:http://ca.example.net/crl/example.net_Intermediate_Certification_Authority.crl
Setelah anda menyalin script file intermed-ca.cnf, jalankan perintah export untuk mengalihkan konfigurasi OpenSSL ke Intermediate CA.

Alihkan konfigurasi ke Intermediate CA
root@ns3:/etc/ssl/CAubuntu/intermed-ca# export OPENSSL_CONF=./intermed-ca.cnf

c. Membuat kunci baru dan file CSR

Sekali lagi, Anda dapat memilih antara kunci EC dan RSA. Kunci pribadi RSA dari sertifikat penandatanganan perantara harus memiliki kekuatan 3072 bit. Anda buat permintaan Penandatanganan Sertifikat (CSR) baru untuk otoritas penandatanganan perantara.

Buat kunci private dan file CSR
root@ns3:/etc/ssl/CAubuntu/intermed-ca# export OPENSSL_CONF=/etc/ssl/CAubuntu/intermed-ca/intermed-ca.cnf
root@ns3:/etc/ssl/CAubuntu/intermed-ca# openssl ecparam -genkey -name secp384r1 | openssl ec -aes256 -out /etc/ssl/CAubuntu/intermed-ca/private/intermed-ca.key.pem
root@ns3:/etc/ssl/CAubuntu/intermed-ca# openssl req -new -key /etc/ssl/CAubuntu/intermed-ca/private/intermed-ca.key.pem -out /etc/ssl/CAubuntu/intermed-ca/certreqs/intermed-ca.req.pem
root@ns3:/etc/ssl/CAubuntu/intermed-ca# chmod 400 /etc/ssl/CAubuntu/intermed-ca/private/intermed-ca.key.pem
Anda dapat melihat isi file CSR dengan perintah berikut.

Lihat isi file CSR
root@ns3:/etc/ssl/CAubuntu/intermed-ca# openssl req  -verify -in /etc/ssl/CAubuntu/intermed-ca/certreqs/intermed-ca.req.pem \
					-noout -text -reqopt no_version,no_pubkey,no_sigdump \
					-nameopt multiline
Jika semuanya tampak baik-baik saja, salin file CSR ke Root CA untuk ditandatangani nanti.

Salin file CSR ke root CA
root@ns3:/etc/ssl/CAubuntu/intermed-ca# cp -R /etc/ssl/CAubuntu/intermed-ca/certreqs/intermed-ca.req.pem /etc/ssl/CAubuntu/root-ca/certreqs/

d. Tanda tangani sertifikat Intermediate dengan Root CA

Untuk menandatangani sertifikat intermediate, anda harus menubah direktori kerja Anda ke tempat Root CA menyimpan file-filenya.

Ubah direktori ke Root CA
root@ns3:/etc/ssl/CAubuntu/root-ca# cd /etc/ssl/CAubuntu/root-ca
Alihkan konfigurasi OpenSSL ke direktori root CA.

Jalankan perintah export di direktori Root CA
root@ns3:/etc/ssl/CAubuntu/root-ca# export OPENSSL_CONF=/etc/ssl/CAubuntu/root-ca/root-ca.cnf
Tanda tangani sertifikat intermediate CSR dengan kunci Root CA untuk 5 tahun ke depan menggunakan ekstensi intermediate

Tanda tangani sertifikat intermediate CSR
root@ns3:/etc/ssl/CAubuntu/root-ca# openssl rand -hex 16 > root-ca.serial
root@ns3:/etc/ssl/CAubuntu/root-ca# openssl ca -in /etc/ssl/CAubuntu/root-ca/certreqs/intermed-ca.req.pem \
				    -out /etc/ssl/CAubuntu/intermed-ca/certs/intermed-ca.cert.pem \
				    -extensions intermed-ca_ext \
				    -startdate `date +%y%m%d000000Z -u -d -1day` \
				    -enddate `date +%y%m%d000000Z -u -d +5years+1day`
Anda dapat melihat isi script sertifikat yang ditandatangani dengan perintah berikut.

Melihat sertifikat intermediate CSR yang di tandatangani
root@ns3:/etc/ssl/CAubuntu/root-ca# openssl x509 -in /etc/ssl/CAubuntu/intermed-ca/certs/intermed-ca.cert.pem \
				    -noout -text -certopt no_version,no_pubkey,no_sigdump \
				    -nameopt multiline
Anda juga dapat memverifikasi apakah sertifikat tersebut valid atau tidak dengan perintah berikut.

Memverifikasi 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/intermed-ca/certs/intermed-ca.cert.pem
/etc/ssl/CAubuntu/intermed-ca/certs/intermed-ca.cert.pem: OK

e. Membuat Intermediate Revocation List (CRL)

Intermediate CA akan menerbitkan Daftar Pencabutan Sertifikat secara berkala atau ketika sertifikat telah dicabut. Intermediate CA diharapkan menerbitkan pencabutan sertifikat server atau klien apa pun yang telah diterbitkan olehnya. 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 Intermediate CA.

Untuk membuat intermediate revocation list, anda harus mengubah direktori kerja Anda ke tempat Intermediate CA menyimpan file-filenya.

Ubah direktori ke intermediate CA
root@ns3:/etc/ssl/CAubuntu/root-ca# cd /etc/ssl/CAubuntu/intermed-ca
Alihkan konfigurasi OpenSSL kembali ke Intermediate CA.

Jalankan perintah export
root@ns3:/etc/ssl/CAubuntu/intermed-ca# export OPENSSL_CONF=/etc/ssl/CAubuntu/intermed-ca/intermed-ca.cnf
Buat daftar pencabutan sertifikat Intermediate CA (CRL).

Buat CRL
root@ns3:/etc/ssl/CAubuntu/intermed-ca# openssl ca -gencrl -out /etc/ssl/CAubuntu/intermed-ca/crl/intermed-ca.crl
setelah itu, anda dapat membuat certificate revocation list, tapi sebelumnya 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
V	290609000000Z		469848D05D15B1ED7CAAEA2BDFAB628B	unknown	/O=example.net/CN=example.net Intermediate Certification Authority
Perhatikan script file yang berwarna abu-abu. 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
469848D05D15B1ED7CAAEA2BDFAB628B.pem
Perhatikan script berwarna abu-abu, ada kesamaan antara kedua file tersebut. File 469848D05D15B1ED7CAAEA2BDFAB628B.pem akan kita jadikan acuan untuk melakukan revocation, seperti contoh di bawah ini.

Revoke certificate
root@ns3:~# cd /etc/ssl/CAubuntu/root-ca
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/469848D05D15B1ED7CAAEA2BDFAB628B.pem \
        -crl_reason keyCompromise

2. Membuat Sertifikat Untuk Server

a. Buat struktur direktori dan file
Setelah anda berhasil membuat sertifikat Root CA dan Intermediate CA (sertifikat perantara), anda dapat melanjutkan dengan membuat sertifikat untuk server. Langkah awal adalah membuat susunan direktori dan file untuk sertifikat server, seperti contoh di bawah ini.

Membuat struktur direktori sertifikat server
root@ns3:~# umask 077
root@ns3:~# mkdir -p /etc/ssl/CAubuntu/server
root@ns3:~# mkdir -p /etc/ssl/CAubuntu/server/{certreqs,certs,crl,newcerts,private}
Buat file serial dan jalankan perintah export
root@ns3:~# cd /etc/ssl/CAubuntu/server
root@ns3:/etc/ssl/CAubuntu/server# touch server-ca.index openssl-server.cnf \
                                        && echo 00 > server-ca.crlnum \
                                        && openssl rand -hex 16 > server-ca.serial
root@ns3:/etc/ssl/CAubuntu/server# export OPENSSL_CONF=./openssl-server.cnf
root@ns3:/etc/ssl/CAubuntu/server# export CN=datainchi.com

b. Buat file utama konfigurasi OpenSSL

Konfigurasi untuk otoritas sertifikat server ada di file /etc/ssl/CAubuntu/server/openssl-server.cnf. Script file utama untuk sertifikat server dapat anda lihat seperti contoh di bawah ini.

Script /etc/ssl/CAubuntu/intermed-ca/intermed-ca.cnf
#
# OpenSSL configuration for generation of server certificate requests.
# Environment variable '$CN' **MUST** be defined or else OpenSSL aborts.

CN                          = $ENV::CN
HOME                        = .
RANDFILE                    = $ENV::HOME/.rnd
oid_section                 = new_oids

#[ new_oids ]
#id-on-xmppAddr              = 1.3.6.1.5.5.7.8.5
#id-on-dnsSRV                = 1.3.6.1.5.5.7.8.7

[ new_oids ]
tsa_policy1 = 1.2.3.4.1
tsa_policy2 = 1.2.3.4.5.6
tsa_policy3 = 1.2.3.4.5.7

[ req ]
default_bits                = 3072
default_keyfile             = ${HOME}/private/${CN}.key.pem
encrypt_key                 = no
default_md                  = sha256
req_extensions              = req_extensions
prompt                      = no
distinguished_name          = req_distinguished_name

[ req_extensions ]
keyUsage                    = digitalSignature, keyEncipherment
extendedKeyUsage            = serverAuth, clientAuth
subjectKeyIdentifier        = hash
subjectAltName              = @subj_alt_names

[ req_distinguished_name ]
commonName                  = ${CN}

[ subj_alt_names ]
DNS.0                       = ${CN}
DNS.1                       = *.${CN}
otherName.0                 = id-on-xmppAddr;FORMAT:UTF8,UTF8:${CN}
otherName.1                 = id-on-dnsSRV;IA5STRING:_xmpp-client.${CN}
otherName.2                 = id-on-dnsSRV;IA5STRING:_xmpp-server.${CN}

c. Membuat kunci sertifikat server

Pembuatan kunci utama untuk sertifikat server harus anda kerjakan pertama kali, ikut contoh script di bawah ini.

Buat kunci sertifikat server
root@ns3:~# cd /etc/ssl/CAubuntu/server
root@ns3:/etc/ssl/CAubuntu/server# export OPENSSL_CONF=./openssl-server.cnf
root@ns3:/etc/ssl/CAubuntu/server# export CN=datainchi.com
root@ns3:/etc/ssl/CAubuntu/server# openssl req -new -out /etc/ssl/CAubuntu/server/certreqs/${CN}.req.pem

d. Tanda tangani sertifikat server

Tanda tangani CSR server dengan intermediate key (kunci perantara) dengan masa berlaku selama 2 tahun menggunakan ekstensi server yang ada di file /etc/ssl/CAubuntu/intermed-ca/intermed-ca.cnf.

Tanda tangani sertifikat server
root@ns3:/etc/ssl/CAubuntu/server# cd /etc/ssl/CAubuntu/intermed-ca
root@ns3:/etc/ssl/CAubuntu/intermed-ca# openssl rand -hex 16 > intermed-ca.serial
root@ns3:/etc/ssl/CAubuntu/intermed-ca# openssl ca \
    -config /etc/ssl/CAubuntu/intermed-ca/intermed-ca.cnf \
    -in /etc/ssl/CAubuntu/intermed-ca/certreqs/intermed-ca.req.pem \
    -out /etc/ssl/CAubuntu/server/certs/www.datainchi.com.cert.pem \
    -extensions server_ext
Anda juga dapat menandatangani permintaan sertifikat untuk tiap perangkat klien, kita akan tanda tangani CSR server dengan kunci perantara untuk 2 tahun ke depan menggunakan ekstensi klien.

Tanda tangani perangkat client
root@ns3:/etc/ssl/CAubuntu/intermed-ca# openssl rand -hex 16 > intermed-ca.serial
root@ns3:/etc/ssl/CAubuntu/intermed-ca# openssl ca \
    -config /etc/ssl/CAubuntu/intermed-ca/intermed-ca.cnf \
    -in /etc/ssl/CAubuntu/intermed-ca/certreqs/intermed-ca.req.pem \
    -out /etc/ssl/CAubuntu/server/certs/HPnokia.datainchi.com.cert.pem \
    -extensions client_ext
Pada sertifikat server ini anda juga bisa melakukan perintah revoke, caranya sama dengan revoke pada sertifikat intermediate. Setelah anda selesai membaca artikel ini, anda dapat menggunakan sertifikat SSL untuk keperluan situs web, ssh atau lainnya.