Membuat Sertifikat OpenSSL Di Ubuntu Untuk Web Server Mail Server VPN Server dan SSH | UNIX LINUX EXPLORE
Edit

Membuat Sertifikat OpenSSL Di Ubuntu Untuk Web Server Mail Server VPN Server dan SSH

Pada artikel ini, kita akan mempelajari cara membuat sertifikat otentikasi tanpa kata sandi. Pembahasan pada artikel ini agak beda, karena kita membangun sebuah otentikasi Certificate Authority (CA) tanpa kata sandi. Karena umumnya tiap sertifikat yang ada pasti mengharuskan penggunanya mengupload file sertfikat ke web broswser merekea seperti Google Chrome. Jadi ingin sangat menyenangkan karena mempermudah pengguna mengakses server, namun pengguna tidak dapat mengakses server utama atau bertindak sebagai super user (user root).

Agar lebih jelas, perhatikan gambar di bawah ini.




Pada contoh pembuatan artikel ini, kita akan membuat sertifikat untuk sebuah perusahaan, sebut saja perusahaan Jasa Expor Impor. Perusahaan tersebut memiliki domain "kursor.my.id". Pada perusahaan tersebut banyak departement yang berbeda, sekarang mari kita lihat struktur direktori dan bicara tentang konfigurasi openssl.

1. Struktur Direktori Sertifikat OpenSSL

Direktori utama untuk meletakkan semua file sertifikat diletakkan di /etc/ssl/CA. Pada direktori utama tersebut terdapat beberapa file, folder dan sub folder yang terdiri dari:
  • RootCA – direktori sertifikat root.
  • Config – berisi file konfigurasi OpenSSL (cnf).
  • PersonIntermediateCA – sertifikat perantara untuk sertifikat pengguna.
  • ServerIntermediateCA – sertifikat perantara untuk sertifikat server.
  • CodeIntermediateCA – sertifikat perantara untuk sertifikat penandatanganan kode.
Direktori tersebut mempunyai sub folder dan file di dalamnya, yang terdiri dari:
  • certs – direktori untuk sertifikat.
  • crl – direktori untuk sertifikat yang dicabut.
  • csr – direktori ini hanya untuk sertifikat perantara (permintaan untuk membuat sertifikat).
  • private – direktori untuk kunci pribadi.
  • index.txt – file database teks sertifikat
  • serial – nomor seri sertifikat berikutnya
  • crlnumber – nomor seri untuk pencabutan sertifikat berikutnya

2. Konfigurasi Sertifikat OpenSSL

Sebelum kita lebih jauh mengkonfigurasi sertifikat, anda buat terlebih dahulu file konfigurasi sertifikat yang di letakkan di /etc/sss/CA/config. Pada direktori tersebut terdapat 4 file konfigurasi dengan skrip yang hampir sama namun beda dalam penempatan/lokasi sertifikat. Baiklah kita langsung saja membuat seluruh direktori dan file yang dibutuhkan untuk membuat sertifikat perusahaan Jasa Expor Impor.

Buat direktori untuk sertifikat
root@ns3:~# mkdir -p /etc/ssl/CA/config
root@ns3:~# mkdir -p /etc/ssl/CA/{RootCA,PersonIntermediateCA,ServerIntermediateCA,CodeIntermediateCA}/{certs,crl,newcerts,private}
root@ns3:~# mkdir -p /etc/ssl/CA/{PersonIntermediateCA,ServerIntermediateCA,CodeIntermediateCA}/csr
Semua direktori tersebut masih kosong, sekarang kita buat beberapa file yang akan kita letakkkan kedalam direktori tersebut.

Buat file untuk sertifikat
root@ns3:~# cd /etc/ssl/CA/config
root@ns3:/etc/ssl/CA/config# touch PersonIntermediateCA.cnf && touch RootCA.cnf && touch ServerIntermediateCA.cnf && touch CodeIntermediateCA.cnf
root@ns3:/etc/ssl/CA/config# touch /etc/ssl/CA/PersonIntermediateCA/index.txt && touch /etc/ssl/CA/ServerIntermediateCA/index.txt
root@ns3:/etc/ssl/CA/config# touch /etc/ssl/CA/CodeIntermediateCA/index.txt && touch /etc/ssl/CA/RootCA/index.txt
Jalankan perintah chmod dengan pilihan 400.

chmod 400
root@ns3:/etc/ssl/CA/config# chmod 400 /etc/ssl/CA//RootCA/private && chmod 400 /etc/ssl/CA/PersonIntermediateCA/private
root@ns3:/etc/ssl/CA/config# chmod 400 /etc/ssl/CA/ServerIntermediateCA/private && chmod 400 /etc/ssl/CA/CodeIntermediateCA/private
Tambahkan no urut serial dan crlnumber
root@ns3:~# echo 1000 > /etc/ssl/CA/RootCA/serial && echo 1A00000000000000 > /etc/ssl/CA/PersonIntermediateCA/serial
root@ns3:~# echo 1B00000000000000 > /etc/ssl/CA/ServerIntermediateCA/serial && echo 1C00000000000000 > /etc/ssl/CA/CodeIntermediateCA/serial
root@ns3:~# echo 1000 > /etc/ssl/CA/RootCA/crlnumber && echo 1FA0000000000000 > /etc/ssl/CA/PersonIntermediateCA/crlnumber
root@ns3:~# echo 1FB0000000000000 > /etc/ssl/CA/ServerIntermediateCA/crlnumber && echo 1FC0000000000000 > /etc/ssl/CA/CodeIntermediateCA/crlnumber
Setelah semua kebutuahn pembuatan sertifikat anda selesaikan, sekarang buat skrip untuk file konfigurasi OpenSSL. Ikuti panduan skrip di bawah ini.

Skrip /etc/ssl/CA/config/CodeIntermediateCA.cnf
[ ca ]
default_ca = CA_default

[ CA_default ]
dir               = /etc/ssl/CA/CodeIntermediateCA
certs             = $dir/certs
private           = $dir/private
crl_dir           = $dir/crl
new_certs_dir     = $dir/newcerts
database          = $dir/index.txt
serial            = $dir/serial
RANDFILE          = $dir/private/.rand
private_key       = $private/CodeIntermediateCA.key.pem
certificate       = $certs/CodeIntermediateCA.cert.pem
crlnumber         = $dir/crlnumber
crl               = $crl_dir/CodeIntermediateCA.crl.pem
crl_extensions    = crl_ext
default_crl_days  = 30
default_md        = sha256
name_opt          = ca_default
cert_opt          = ca_default
default_days      = 365
preserve          = no
policy            = policy_intermediate_code

[ policy_intermediate_code ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
subjectAltName = optional

[ req ]
default_bits        = 2048
distinguished_name  = req_distinguished_name
string_mask         = utf8only
default_md          = sha256
x509_extensions     = root_ca

[ req_distinguished_name ]
countryName                     = Country Name (2 letter code) (C)
countryName_min		= 2
countryName_max		= 2
countryName_default          = ID

stateOrProvinceName             = State or Province Name (S)
stateOrProvinceName_default     = Jawa Barat

localityName                    = Locality Name (L)
localityName_default            = Bekasi

0.organizationName              = Organization Name (O)
0.organizationName_default      = Mediatama

organizationalUnitName          = Organizational Unit Name (OU)
organizationalUnitName_default = Networking

commonName                      = Common Name (CN)
commonName_default          = penaadventure.com

emailAddress                    = Email Address
emailAddress_max		= 60
emailAddress_default          = penaadventure@gmail.com

subjectAltName = Alternative DNS names (comma seperated list)
subjectAltName_default = DNS:www.penaadventure.com

[ root_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true
keyUsage = critical, digitalSignature, cRLSign, keyCertSign

[ intermediate_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true, pathlen:0
keyUsage = critical, digitalSignature, cRLSign, keyCertSign

[ code_cert ]
basicConstraints = CA:FALSE
nsCertType = server
nsComment = "Code Certificate"
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer:always
keyUsage = digitalSignature
extendedKeyUsage = codeSigning, msCodeInd, msCodeCom

[ crl_ext ]
authorityKeyIdentifier=keyid:always

[ ocsp ]
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
keyUsage = critical, digitalSignature
extendedKeyUsage = critical, OCSPSigning 
Skrip /etc/ssl/CA/config/PersonIntermediateCA.cnf
[ ca ]
default_ca = CA_default

[ CA_default ]
dir               = /etc/ssl/CA/PersonIntermediateCA
certs             = $dir/certs
private           = $dir/private
crl_dir           = $dir/crl
new_certs_dir     = $dir/newcerts
database          = $dir/index.txt
serial            = $dir/serial
RANDFILE          = $dir/private/.rand
private_key       = $private/PersonIntermediateCA.key.pem
certificate       = $certs/PersonIntermediateCA.cert.pem
crlnumber         = $dir/crlnumber
crl               = $crl_dir/PersonIntermediateCA.crl.pem
crl_extensions    = crl_ext
default_crl_days  = 30
default_md        = sha256
name_opt          = ca_default
cert_opt          = ca_default
default_days      = 365
preserve          = no
policy            = policy_intermediate_person

[ policy_intermediate_person ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress = supplied
subjectAltName = optional

[ req ]
default_bits        = 2048
distinguished_name  = req_distinguished_name
string_mask         = utf8only
default_md          = sha256
x509_extensions     = root_ca

[ req_distinguished_name ]
countryName                     = Country Name (2 letter code) (C)
countryName_min		= 2
countryName_max		= 2
countryName_default          = ID

stateOrProvinceName             = State or Province Name (S)
stateOrProvinceName_default     = Jawa Barat

localityName                    = Locality Name (L)
localityName_default            = Bekasi

0.organizationName              = Organization Name (O)
0.organizationName_default      = Mediatama

organizationalUnitName          = Organizational Unit Name (OU)
organizationalUnitName_default = Networking

commonName                      = Common Name (CN)
commonName_default          = datainchi.com

emailAddress                    = Email Address
emailAddress_max		= 60
emailAddress_default          = datainchi@gmail.com

subjectAltName = Alternative DNS names (comma seperated list)
subjectAltName_default = DNS:www.datainchi.com

[ root_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true
keyUsage = critical, digitalSignature, cRLSign, keyCertSign

[ intermediate_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true, pathlen:0
keyUsage = critical, digitalSignature, cRLSign, keyCertSign

[ user_cert ]
basicConstraints = CA:FALSE
nsCertType = client, email
nsComment = "Client certificates"
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment 
extendedKeyUsage = clientAuth, emailProtection

[ crl_ext ]
authorityKeyIdentifier=keyid:always

[ ocsp ]
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
keyUsage = critical, digitalSignature
extendedKeyUsage = critical, OCSPSigning
Skrip /etc/ssl/CA/config/RootCA.cnf
[ ca ]
default_ca = CA_default

[ CA_default ]
dir               = /etc/ssl/CA/RootCA
certs             = $dir/certs
private           = $dir/private
crl_dir           = $dir/crl
new_certs_dir     = $dir/newcerts
database          = $dir/index.txt
serial            = $dir/serial
RANDFILE          = $dir/private/.rand
private_key       = $private/RootCA.key.pem
certificate       = $certs/RootCA.cert.pem
crlnumber         = $dir/crlnumber
crl               = $crl_dir/RootCA.crl.pem
crl_extensions    = crl_ext
default_crl_days  = 30
default_md        = sha256
name_opt          = ca_default
cert_opt          = ca_default
default_days      = 365
preserve          = no
policy            = policy_root

[ policy_root ]
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = supplied
commonName = supplied
emailAddress = optional
subjectAltName = optional

[ req ]
default_bits        = 2048
distinguished_name  = req_distinguished_name
string_mask         = utf8only
default_md          = sha256
x509_extensions     = root_ca

[ req_distinguished_name ]
countryName                     = Country Name (2 letter code) (C)
countryName_min		= 2
countryName_max		= 2
countryName_default          = ID

stateOrProvinceName             = State or Province Name (S)
stateOrProvinceName_default     = Jawa Barat

localityName                    = Locality Name (L)
localityName_default            = Bekasi

0.organizationName              = Organization Name (O)
0.organizationName_default      = Mediatama

organizationalUnitName          = Organizational Unit Name (OU)
organizationalUnitName_default = Networking

commonName                      = Common Name (CN)
commonName_default          = inchimediatama.com

emailAddress                    = Email Address
emailAddress_max		= 60
emailAddress_default          = support@CertService.info

subjectAltName = Alternative DNS names (comma seperated list)
subjectAltName_default = DNS:www.inchimediatama.com

[ root_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true
keyUsage = critical, digitalSignature, cRLSign, keyCertSign

[ intermediate_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true, pathlen:0
keyUsage = critical, digitalSignature, cRLSign, keyCertSign

[ crl_ext ]
authorityKeyIdentifier=keyid:always

[ ocsp ]
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
keyUsage = critical, digitalSignature
extendedKeyUsage = critical, OCSPSigning
Skrip /etc/ssl/CA/ServerIntermediateCA/ServerIntermediateCA.cnf
[ ca ]
default_ca = CA_default

[ CA_default ]
dir               = /etc/ssl/CA/ServerIntermediateCA
certs             = $dir/certs
private           = $dir/private
crl_dir           = $dir/crl
new_certs_dir     = $dir/newcerts
database          = $dir/index.txt
serial            = $dir/serial
RANDFILE          = $dir/private/.rand
private_key       = $private/ServerIntermediateCA.key.pem
certificate       = $certs/ServerIntermediateCA.cert.pem
crlnumber         = $dir/crlnumber
crl               = $crl_dir/ServerIntermediateCA.crl.pem
crl_extensions    = crl_ext
default_crl_days  = 30
default_md        = sha256
name_opt          = ca_default
cert_opt          = ca_default
default_days      = 365
preserve          = no
policy            = policy_intermediate_server

[ policy_intermediate_server ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress = supplied
subjectAltName = supplied

[ req ]
default_bits        = 2048
distinguished_name  = req_distinguished_name
string_mask         = utf8only
default_md          = sha256
x509_extensions     = root_ca

[ req_distinguished_name ]
countryName                     = Country Name (2 letter code) (C)
countryName_min		= 2
countryName_max		= 2
countryName_default          = ID

stateOrProvinceName             = State or Province Name (S)
stateOrProvinceName_default     = Jawa Barat

localityName                    = Locality Name (L)
localityName_default            = Bekasi

0.organizationName              = Organization Name (O)
0.organizationName_default      = Mediatama

organizationalUnitName          = Organizational Unit Name (OU)
organizationalUnitName_default = Networking

commonName                      = Common Name (CN)
commonName_default          = kursor.my.id

emailAddress                    = Email Address
emailAddress_max		= 60
emailAddress_default          = kursor@gmail.com

subjectAltName = Alternative DNS names (comma seperated list)
subjectAltName_default = DNS:www.kursor@gmail.com

[ root_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true
keyUsage = critical, digitalSignature, cRLSign, keyCertSign

[ intermediate_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true, pathlen:0
keyUsage = critical, digitalSignature, cRLSign, keyCertSign

[ server_cert ]
basicConstraints = CA:FALSE
nsCertType = server
nsComment = "Server Certificate"
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer:always
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth

[ crl_ext ]
authorityKeyIdentifier=keyid:always

[ ocsp ]
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
keyUsage = critical, digitalSignature
extendedKeyUsage = critical, OCSPSigning

3. Buat kunci pribadi root

Setelah semuanya beres dan file konfigurasi utama telah anda masukkan skrip seperti contoh skrip diatas, kita lanjutkan dengan memulai membuat sertifikat. Pertama yang harus anda kerjakan adalah membuat kunci pribadi untuk sertifikat root.

Buat file /etc/ssl/CA/RootCA/private/RootCA.key.pem
root@ns3:~# openssl genrsa -aes256 -out /etc/ssl/CA/RootCA/private/RootCA.key.pem 4096
root@ns3:~# chmod 400 /root/ca/RootCA/private/RootCA.key.pem
Buat sertifikat root

Buat file /etc/ssl/CA/RootCA/certs/RootCA.cert.pem
root@ns3:~# openssl req -config /etc/ssl/CA/config/RootCA.cnf -key /etc/ssl/CA/RootCA/private/RootCA.key.pem -new -x509 -days 7300 -sha256 -extensions root_ca -out /etc/ssl/CA/RootCA/certs/RootCA.cert.pem
root@ns3:~# chmod 444 /etc/ssl/CA/RootCA/certs/RootCA.cert.pem
Periksa sertifikat yang telah kita buat di atas.

Cek sertifikat
root@ns3:~# openssl x509 -noout -text -in /etc/ssl/CA/RootCA/certs/RootCA.cert.pem

4. Buat sertifikat perantara (intermediate)

Setelah anda selesai membuat sertifkat Root CA, kita lanjutkan dengan membuat sertifkat perantara. Kenaap disebut perantara, karena sertifikat lainnya yang akan dibuat seperti sertifikat untuk server dan klient tidak mengambil kunci dari sertifikat Root, jadi kunci sertifikat Root aman tidak di ganggu gugat. Ketika anda akan membuat sertifikat untuk server dan klient, cukup gunakan kunci dari sertifikat perantara.

Pada artikel ini kita akan membuat 3 sertifikat perantara, yaitu CodeIntermediateCA, PersonIntermediateCA dan ServerIntermediateCA.

a. Sertifikat perantara untuk PersonIntermediateCA

Buat kunci pribadi sertifikat perantara PersonIntermediateCA
root@ns3:~# openssl genrsa -aes256 -out /etc/ssl/CA/PersonIntermediateCA/private/PersonIntermediateCA.key.pem 4096
root@ns3:~# chmod 400 /etc/ssl/CA/PersonIntermediateCA/private/PersonIntermediateCA.key.pem
Buat permintaan untuk pembuatan sertifikat perantara PersonIntermediateCA dengan kucni pribadi /etc/ssl/CA/PersonIntermediateCA/private/PersonIntermediateCA.key.pem.

Permintaan pembuatan sertifikat perantara PersonIntermediateCA
root@ns3:~# openssl req -config /etc/ssl/CA/config/PersonIntermediateCA.cnf -new -sha256 -key /etc/ssl/CA/PersonIntermediateCA/private/PersonIntermediateCA.key.pem -out /etc/ssl/CA/PersonIntermediateCA/csr/PersonIntermediateCA.csr.pem
Buat sertifikat yang ditandatangani untuk  sertifikat perantara PersonIntermediateCA dengan kunci pribadi Root CA yang berasal dari file /etc/ssl/CA/config/RootCA.cnf.

Tandatangani sertifikat perantara PersonIntermediateCA
root@ns3:~# openssl ca -config /etc/ssl/CA/config/RootCA.cnf -extensions intermediate_ca -days 3650 -notext -md sha256 -in /etc/ssl/CA/PersonIntermediateCA/csr/PersonIntermediateCA.csr.pem -out /etc/ssl/CA/PersonIntermediateCA/certs/PersonIntermediateCA.cert.pem
chmod 444
root@ns3:~# chmod 444 /etc/ssl/CA/PersonIntermediateCA/certs/PersonIntermediateCA.cert.pem

b. Sertifikat perantara untuk ServerIntermediateCA

Masih ada 2 lagi sertifikat perantara yang anda buat, tanpa panjang lebar kita langsung aja kerjakan, jalankan perintah di bawah ini untuk memulai konfigurasi sertifikat peratnara ServerIntermediateCA.

Buat kunci pribadi sertifikat perantara ServerIntermediateCA
root@ns3:~# openssl genrsa -aes256 -out /etc/ssl/CA/ServerIntermediateCA/private/ServerIntermediateCA.key.pem 4096
Permintaan pembuatan sertifikat perantara ServerIntermediateCA
root@ns3:~# openssl req -config /etc/ssl/CA/config/ServerIntermediateCA.cnf -new -sha256 -key /etc/ssl/CA/ServerIntermediateCA/private/ServerIntermediateCA.key.pem -out /etc/ssl/CA/ServerIntermediateCA/csr/ServerIntermediateCA.csr.pem
Tandatangani sertifikat perantara ServerIntermediateCA
root@ns3:~# openssl ca -config /etc/ssl/CA/config/RootCA.cnf -extensions intermediate_ca -days 3650 -notext -md sha256 -in /etc/ssl/CA/ServerIntermediateCA/csr/ServerIntermediateCA.csr.pem -out /etc/ssl/CA/ServerIntermediateCA/certs/ServerIntermediateCA.cert.pem

b. Sertifikat perantara untuk CodeIntermediateCA

Istirahatlah anda sejenak, karena artikel belum selesai masih banyak sekali yang harus anda konfigurasi. Pada bagian ini kita akan membuat sertifikat perantara untuk CodeIntermediateCA.

Buat kunci pribadi sertifikat perantara CodeIntermediateCA
root@ns3:~# openssl genrsa -aes256 -out /etc/ssl/CA/CodeIntermediateCA/private/CodeIntermediateCA.key.pem 4096
Permintaan pembuatan sertifikat perantara CodeIntermediateCA
root@ns3:~# openssl req -config /etc/ssl/CA/config/CodeIntermediateCA.cnf -new -sha256 -key /etc/ssl/CA/CodeIntermediateCA/private/CodeIntermediateCA.key.pem -out /etc/ssl/CA/CodeIntermediateCA/csr/CodeIntermediateCA.csr.pem
Tandatangani sertifikat perantara CodeIntermediateCA
root@ns3:~# openssl ca -config /etc/ssl/CA/config/RootCA.cnf -extensions intermediate_ca -days 3650 -notext -md sha256 -in /etc/ssl/CA/CodeIntermediateCA/csr/CodeIntermediateCA.csr.pem -out /etc/ssl/CA/CodeIntermediateCA/certs/CodeIntermediateCA.cert.pem
Jalankan chmod
root@ns3:~# chmod 400 /etc/ssl/CA/ServerIntermediateCA/private/ServerIntermediateCA.key.pem && chmod 444 /etc/ssl/CA/ServerIntermediateCA/certs/ServerIntermediateCA.cert.pem && chmod 400 /etc/ssl/CA/CodeIntermediateCA/private/CodeIntermediateCA.key.pem && chmod 444 /etc/ssl/CA/CodeIntermediateCA/certs/CodeIntermediateCA.cert.pem
Langkah selanjutnya adalah memeriksa validasi keabsahan sertifikat tersebut. Caranya ke 3 sertifikat perantara yang anda buat di atas di validasi dengan sertifikat Root CA. Simak baik baik caranya berikut ini.

Validasi sertifikat
root@ns3:~# openssl verify -CAfile /etc/ssl/CA/RootCA/certs/RootCA.cert.pem /etc/ssl/CA/CodeIntermediateCA/certs/CodeIntermediateCA.cert.pem
/etc/ssl/CA/CodeIntermediateCA/certs/CodeIntermediateCA.cert.pem: OK
root@ns3:~# openssl verify -CAfile /etc/ssl/CA/RootCA/certs/RootCA.cert.pem /etc/ssl/CA/PersonIntermediateCA/certs/PersonIntermediateCA.cert.pem
/etc/ssl/CA/PersonIntermediateCA/certs/PersonIntermediateCA.cert.pem: OK
root@ns3:~# openssl verify -CAfile /etc/ssl/CA/RootCA/certs/RootCA.cert.pem /etc/ssl/CA/ServerIntermediateCA/certs/ServerIntermediateCA.cert.pem
/etc/ssl/CA/ServerIntermediateCA/certs/ServerIntermediateCA.cert.pem: OK

5. Buat rantai sertifikat

Rantai sertifikat sangat berguna sekali rantai sertifikat akan menggabungkan satu atau beberapa sertifikat dalan satu file. Fungsi rantai sertifikat digunakan ketika klien tidak memiliki sertifikat root atau perantara.

Sertifikat Chain
root@ns3:~# cat /etc/ssl/CA/PersonIntermediateCA/certs/PersonIntermediateCA.cert.pem /etc/ssl/CA/RootCA/certs/RootCA.cert.pem > /etc/ssl/CA/PersonIntermediateCA/certs/Root-Person-chain.cert.pem
root@ns3:~# cat /etc/ssl/CA/CodeIntermediateCA/certs/CodeIntermediateCA.cert.pem /etc/ssl/CA/RootCA/certs/RootCA.cert.pem > /etc/ssl/CA/CodeIntermediateCA/certs/Root-Code-chain.cert.pem
root@ns3:~# cat /etc/ssl/CA/ServerIntermediateCA/certs/ServerIntermediateCA.cert.pem /etc/ssl/CA/RootCA/certs/RootCA.cert.pem > /etc/ssl/CA/ServerIntermediateCA/certs/Root-Server-chain.cert.pem
chmod
root@ns3:~# chmod 444 /etc/ssl/CA/PersonIntermediateCA/certs/Root-Person-chain.cert.pem && chmod 444 /etc/ssl/CA/CodeIntermediateCA/certs/Root-Code-chain.cert.pem && chmod 444 /etc/ssl/CA/ServerIntermediateCA/certs/Root-Server-chain.cert.pem

6. Buat sertifikat untuk Server

Untuk pembuatan sertifikat server, gunakan ekstensi server_cert yang ada pada file konfigurasi /etc/ssl/CA/config/ServerIntermediateCA.cnf. Pada pembuatan sertifikat server ini kita tak membutuhkan sertifikat Root CA, tapi cukup gunakan sertifikat perantara dari file /etc/ssl/CA/config/ServerIntermediateCA.cnf. Pada bagian ini akan kami singkat, karena semua skrip nya hampir sama.

Sertifikat Untuk Server
root@ns3:~# openssl genrsa -aes256 -out /etc/ssl/CA/ServerIntermediateCA/private/server.key.pem 2048
root@ns3:~# openssl req -config /etc/ssl/CA/config/ServerIntermediateCA.cnf -key /etc/ssl/CA/ServerIntermediateCA/private/server.key.pem -new -sha256 -out /etc/ssl/CA/ServerIntermediateCA/csr/server.csr.pem
root@ns3:~# openssl ca -config /etc/ssl/CA/config/ServerIntermediateCA.cnf -extensions server_cert -days 375 -notext -md sha256 -in /etc/ssl/CA/ServerIntermediateCA/csr/server.csr.pem -out /etc/ssl/CA/ServerIntermediateCA/certs/server.cert.pem
Agar server dapat di akses tanpa kata sandi, untuk server web hapus kata sandi dari kunci pribadi.

Hapus kunci pribadi Sertifikat Server
root@ns3:~# openssl rsa -in /etc/ssl/CA/ServerIntermediateCA/private/server.key.pem -out /etc/ssl/CA/ServerIntermediateCA/private/server.nopass.pem
chmod
root@ns3:~# chmod 400 /root/ca/ServerIntermediateCA/private/ && chmod 444 /etc/ssl/CA/server/certs/

7. Buat sertifikat untuk Departement (user)

Pada bagian ini kita akan membuat sertifikat untuk tiap departement perusahaan Jasa Expor Impor. Jika ada 10 departement, maka anda harus membuat 10 sertifikat untuk 10 departement tersebut. Untuk pembuatan sertifikat departement (user/klient) kita gunakan ekstensi user_cert yang ada di file konfigurasi /etc/ssl/CA/config/PersonIntermediateCA.cnf.

Agar semua sertifikat untuk tiap departement dapat anda buat dengan sempurna, ganti pilihan di bawah ini pada tiap departement yang akan anda buat sertifikatnya.
  • organizationName
  • organizationalUnitName
  • commonName
  • emailAddress
  • subjectAltName
Jika ke 5 opsi di atas tidak anda ganti, maka jangan harap anda dapat membuat sertifikat untuk 10 departement.

Pada artikel ini, kami hanya memberikan satu contoh pembuatan sertifikat untuk departemen pemeliharaan/perawatan. Perhatikan contoh skrip pembautannya.

Sertifikat Untuk departement perawatan/pemeliharaan
root@ns3:~# openssl genrsa -aes256 -out /etc/ssl/CA/PersonIntermediateCA/private/deptpelihara.key.pem 2048
root@ns3:~# openssl req -config /etc/ssl/CA/config/PersonIntermediateCA.cnf -key /etc/ssl/CA/PersonIntermediateCA/private/deptpelihara.key.pem -new -sha256 -out /etc/ssl/CA/PersonIntermediateCA/csr/deptpelihara.csr.pem
root@ns3:~# openssl ca -config /etc/ssl/CA/config/PersonIntermediateCA.cnf -extensions user_cert -days 375 -notext -md sha256 -in /etc/ssl/CA/PersonIntermediateCA/csr/deptpelihara.csr.pem -out /etc/ssl/CA/PersonIntermediateCA/certs/deptpelihara.cert.pem
chmod
root@ns3:~# chmod 400 /etc/ssl/CA/PersonIntermediateCA/private/ && chmod 444 /etc/ssl/CA/PersonIntermediateCA/certs/

8. Buat sertifikat untuk Code (sertifikat lainnya)

Pada bagian terakhir ini kita akan membuat sertifikat untuk kebutuhan lainnya. Pada artiekl ini kami contohkan pembautan sertifikat untuk mengakses MSWord.

Sertifikat Untuk kebutuhan lain lain
root@ns3:~# openssl genrsa -aes256 -out /etc/ssl/CA/CodeIntermediateCA/private/MSWord2000.key.pem 2048
root@ns3:~# openssl req -config /etc/ssl/CA/config/CodeIntermediateCA.cnf -key /etc/ssl/CA/CodeIntermediateCA/private/MSWord2000.key.pem -new -sha256 -out /etc/ssl/CA/CodeIntermediateCA/csr/MSWord2000.csr.pem
root@ns3:~# openssl ca -config /etc/ssl/CA/config/CodeIntermediateCA.cnf -extensions code_cert -days 375 -notext -md sha256 -in /etc/ssl/CA/CodeIntermediateCA/csr/MSWord2000.csr.pem -out /etc/ssl/CA/CodeIntermediateCA/certs/MSWord2000.cert.pem
chmod
root@ns3:~# chmod 400 /etc/ssl/CA/CodeIntermediateCA/private/ && chmod 444 /etc/ssl/CA/CodeIntermediateCA/certs

9. Cara menggunakan sertifikat di Web Server NGINX

Setelah anda selesai, menyelesaikan pembuatan sertifikat, sekarang kita praktekkan untuk digunakan di web server NGINX. Caranya sangat mudah, buka file konfigurasi NGINX. Pada file /etc/nginx/sites-available/default (sesuaikan dengan konfigurasi NGINX anda), tambahkan skrip di bawah ini.

/etc/nginx/sites-available/default
ssl_certificate /etc/ssl/CA/ServerIntermediateCA/certs/server.cert.pem;
ssl_certificate_key /etc/ssl/CA/ServerIntermediateCA/private/server.nopass.pem;
Pada penulisan artikel ini kami mencoba menjelaskan sedetail mungkin aspek-aspek penting dalam pembuatan sertifikat SSL. Kami memahami bahwa ada banyak artikel seperti itu, tetapi seringkali artikel tersebut tidak lengkap. Oleh karena itu kami mencoba membuat full version normal dalam beberapa bagian. Kami rasa akan ada cukup banyak kekurangannya.