Panduan Membuat Otoritas Sertifikat OpenSSL - Sertifikat CA Root dan Intermediate di Linux | UNIX LINUX EXPLORE
Edit

Panduan Membuat Otoritas Sertifikat OpenSSL - Sertifikat CA Root dan Intermediate di Linux

2024/06/10
Pada artikel ini kita akan belajar bagaimana membangun infrastruktur PKI dua tingkat (Root dan Intermediate CA) berdasarkan OpenSSL di sistem operasi Ubuntu. Sebelum kita lebih jauh membahas isi artikel ini, perhatikan skema infrastruktur PKI (Root dan Intermediate CA) di bawah ini.



Materi yang akan kita pelajari pada artikel ini meliputi:
  1. Pembuatan sertifikat Akar CA (rootCA).
  2. Pembuatan sertifikat CA perantara (intermediateCA).
  3. Pembuatan Responden OCSP (intermediateCA), dan
  4. Sertifikat untuk Web server (webCA)

1. Otoritas Sertifikat Root (rootCA)

a. Direktori dan struktur file

Pembuatan direktori dan struktur file adalah langkah awal yang harus anda kerjakan. Direktori ini akan kita gunakan untuk menyimpan file CA, sertifikat, dan kunci pribadi.

Buat direktori untuk rootCA
root@ns3:~# mkdir -p /etc/ssl/CA_Linux
root@ns3:~# mkdir -p /etc/ssl/CA_Linux/rootCA/{certs,crl,newcerts,private,csr}
root@ns3:~# cd /etc/ssl/CA_Linux/rootCA
root@ns3:/etc/ssl/CA_Linux/rootCA#
Keterangan susunan direktori:
  1. certs : Direktori ini berisi sertifikat yang dibuat dan ditandatangani oleh CA.
  2. crl : Direktori untuk daftar pencabutan sertifikat (CRL), berisi daftar pencabutan sertifikat yang dihasilkan oleh CA.
  3. newcerts : Direktori ini menyimpan salinan setiap sertifikat yang ditandatangani oleh CA, dengan nomor seri sertifikat sebagai nama file.
  4. private : Direktori ini berisi kunci privat untuk CA, termasuk kunci privat CA akar dan CA perantara. Kunci ini digunakan untuk menandatangani sertifikat dan CRL.
  5. csr : Direktori ini menyimpan salinan setiap permintaan sertifikat.
Selain membuat direktori, anda juga harus membuat struktur file dan tetapkan nilai awal untuk beberapa file, seperti contoh di bawah ini.

Buat file dan nilai awalnya
root@ns3:/etc/ssl/rootCA_Linux# touch index && touch serial && touch crlnumber && touch root-CA-Linux.cnf
root@ns3:/etc/ssl/rootCA_Linux# openssl rand -hex 20 > serial
root@ns3:/etc/ssl/rootCA_Linux# echo 00 > crlnumber
Keterangan susunan file:
  1. indeks : Digunakan untuk melacak sertifikat yang diterbitkan.
  2. serial : Digunakan untuk melacak nomor seri terakhir yang digunakan untuk menerbitkan sertifikat. Penting agar dua sertifikat dengan nomor seri yang sama tidak pernah diterbitkan dari CA yang sama.
  3. crlnumber : Berisi nomor CRL saat ini. Nomor CRL adalah bilangan bulat unik yang bertambah setiap kali daftar pencabutan sertifikat (CRL) baru dibuat. Hal ini membantu melacak CRL terbaru yang dikeluarkan oleh CA dan memastikan bahwa CRL diterbitkan dalam urutan yang benar.
b. Konfigurasi OpenSSL

File konfigurasi adalah file OpenSSL yang memiliki ekstensi *.cnf. File ini berisi script untuk mengatur sertifikat. Pada sertifikat rootCA, file konfigurasi berada di /etc/ssl/rootCA_Linux/root-CA-Linux.cnf.

Script /etc/ssl/rootCA_Linux/root-CA-Linux.cnf
[ ca ]
default_ca = CA_default

[ CA_default ]
dir               = /etc/ssl/rootCA_Linux
certs             = $dir/certs
crl_dir           = $dir/crl
new_certs_dir     = $dir/newcerts
database          = $dir/index
serial            = $dir/serial
RANDFILE          = $dir/private/.rand
private_key       = $dir/private/rca.key
certificate       = $dir/certs/rca.crt
crlnumber         = $dir/crlnumber
crl               = $dir/crl/rca.crl
crl_extensions    = crl_ext
default_crl_days  = 182
default_md        = sha256
name_opt          = ca_default
cert_opt          = ca_default
default_days      = 3650
default_md        = sha256
preserve          = no
unique_subject    = no
policy            = policy_strict

[ policy_strict ]
countryName             = optional
stateOrProvinceName     = optional
organizationName        = optional
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional

[ req ]
default_bits        = 2048
distinguished_name  = req_distinguished_name
string_mask         = utf8only
default_md          = sha256
default_keyfile     = private/rca.key
x509_extensions     = v3_ca

[ req_distinguished_name ]
countryName                     = Country Name (2 letter code)
stateOrProvinceName             = State or Province Name (full name)
localityName                    = Locality Name (eg, city)
organizationName                = Organization Name (eg, company)
organizationalUnitName          = Organizational Unit Name (eg, section)
commonName                      = Common Name (eg, your name or your server hostname)
commonName_default		= datainchi.com
emailAddress                    = Email Address
emailAddress_default		= datainchi@gmail.com

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

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

[ crl_ext ]
authorityKeyIdentifier   = keyid:always,issuer

[ crldp1_section ]
fullname                 = URI:http://ca.example.com/rca.crl

c. Membuat kunci pribadi Root CA

Buat kunci pribadi RSA untuk root CA menggunakan algoritma enkripsi AES-256 dan kata sandi yang kuat.

Buat kunci pribadi rootCA dengan password
root@ns3:/etc/ssl/CA_Linux/rootCA# openssl genrsa -aes256 -out /etc/ssl/CA_Linux/rootCA/private/rca.key 4096
Bila anda malas mengetik password ketika membuat kunci pribadi rootCA, anda dapat menggunakan parameter -passout pass:1234 untuk menentukan kata sandi yang diinginkan saat membuat kunci pribadi, di mana 1234 adalah kata sandi yang telah kita tentukan

Buat kunci pribadi rootCA dengan password tanpa mengetik password
root@ns3:/etc/ssl/CA_Linux/rootCA# openssl genrsa -aes256 \
				   -passout pass:1234 \
				   -out /etc/ssl/CA_Linux/rootCA/private/CA-tanpa-ketik-password.key 4096
Jika Anda perlu/ingin menghapus kata sandi dari kunci pribadi RSA, Anda dapat melakukannya seperti contoh di bawah ini.

Hapus password dari kunci pribadi rootCA
root@ns3:/etc/ssl/CA_Linux/rootCA# cp -R private/rca.key private/rca.key.orig
root@ns3:/etc/ssl/CA_Linux/rootCA# openssl rsa -in private/rca.key.orig -passin pass:1234 -out private/rca.key
writing RSA key
root@ns3:/etc/ssl/CA_Linux/rootCA# rm private/rca.key.orig
Atau, jika anda tak ingin menggunakan password ketika membuat kunci pribadi rootCA, jalankan perintah berikut ini.

Buat kunci pribadi rootCA TANPA password
root@ns3:/etc/ssl/CA_Linux/rootCA# openssl genrsa -out /etc/ssl/CA_Linux/rootCA/private/rcaNOpass.key 4096
Demi keamanan, anda harus membatasi akses ke kunci pribadi dari rootCA.

chmod
root@ns3:/etc/ssl/CA_Linux/rootCA# chmod 400 private/rca.key

d. Membuat Sertifikat Root CA

Buat sertifikat untuk root CA (saat membuat, Anda harus memasukkan kata sandi untuk kunci pribadi) yang anda buat pada contoh di atas.

Buat sertifikat rootCA
root@ns3:/etc/ssl/CA_Linux/rootCA# openssl req -config root-CA-Linux.cnf \
				   -key /etc/ssl/CA_Linux/rootCA/private/rca.key \
				   -new -x509 -days 7300 -rand_serial -sha256 \
				   -extensions v3_ca -out /etc/ssl/CA_Linux/rootCA/certs/rca.crt
Enter pass phrase for /etc/ssl/CA_Linux/rootCA/private/rca.key: 1234
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) []:ID
State or Province Name (full name) []:Jawa Barat
Locality Name (eg, city) []:Bekasi
Organization Name (eg, company) []:Mediatama
Organizational Unit Name (eg, section) []:Networking
Common Name (eg, your name or your server hostname) [datainchi.com]:
Email Address [datainchi@gmail.com]:
root@ns3:/etc/ssl/CA_Linux/rootCA# 
CATATAN:
Saat menggunakan utilitas req, Anda harus menentukan file konfigurasi yang akan digunakan dengan opsi –config, jika tidak, sistem Ubuntu akan menggunakan file konfigurasi default OpenSSL, yaitu /etc/ssl/openssl.cnf.

anda dapat memeriksa sertifikat root dan menampilkan informasi tentang sertifikat tersebut.

Periksa sertifikat
root@ns3:/etc/ssl/CA_Linux/rootCA# openssl x509 -noout -text -in certs/rca.crt -certopt no_version,no_pubkey,no_sigdump

e. Pencabutan sertifikat (CRL)

rootCA harus menerbitkan daftar pencabutan sertifikat secara berkala atau setelah sertifikat dicabut. Meskipun belum ada pencabutan apa pun, klien dan server yang memvalidasi sertifikat yang diterbitkan akan meminta CRL yang diperbarui di sertifikat. Oleh karena itu, kita perlu membuat CRL awal, meskipun kosong, untuk root CA.

Buat file crl
root@ns3:/etc/ssl/CA_Linux/rootCA# openssl ca -config root-CA-Linux.cnf -gencrl -out crl/rca.crl
Menampilkan informasi tentang daftar pencabutan:
root@ns3:/etc/ssl/CA_Linux/rootCA# openssl crl -in crl/rca.crl -text -noout

2. Otoritas Sertifikat Intermediate

a. Direktori dan struktur file

Sama dengan pembuatan sertifikat rootCA, sebelum kita mulai membuat sertifikat perantara, anda harus buat struktur direktori untuk menyimpan file CA, sertifikat, dan kunci pribadi.

Buat direktori untuk sertifikat perantara (intermediate)
root@ns3:~# mkdir -p /etc/ssl/CA_Linux/intermediateCA/{certs,crl,newcerts,private,csr}
root@ns3:~# cd /etc/ssl/CA_Linux/intermediateCA
Setelah itu, anda buat struktur file dan tetapkan nilai awal untuk beberapa di file.

Buat file dan nilainya
root@ns3:/etc/ssl/CA_Linux/intermediateCA# touch index && touch serial && touch crlnumber && touch perantara.cnf
root@ns3:/etc/ssl/CA_Linux/intermediateCA# openssl rand -hex 20 > serial && echo 00 > crlnumber

b. Konfigurasi Intermediate OpenSSL

File konfigurasi untuk sertifikat perantara terletak di /etc/ssl/CA_Linux/intermediateCA/perantara.cnf.

Script /etc/ssl/CA_Linux/intermediateCA/perantara.cnf
[ ca ]
default_ca = CA_default

[ CA_default ]
dir               = /etc/ssl/CA_Linux/intermediateCA
certs             = $dir/certs
crl_dir           = $dir/crl
new_certs_dir     = $dir/newcerts
database          = $dir/index
serial            = $dir/serial
RANDFILE          = $dir/private/.rand
private_key       = $dir/private/ica.key
certificate       = $dir/certs/ica.crt
crlnumber         = $dir/crlnumber
crl               = $dir/crl/ica.crl
crl_extensions    = crl_ext
default_crl_days  = 30
default_md        = sha256
name_opt          = ca_default
cert_opt          = ca_default
default_days      = 3650
default_md        = sha256
preserve          = no
unique_subject    = no
policy            = policy_strict

[ policy_strict ]
countryName                = optional
stateOrProvinceName        = optional
organizationName           = optional
organizationalUnitName     = optional
commonName                 = supplied
emailAddress               = optional

[ policy_anything ]
countryName                = optional
stateOrProvinceName        = optional
localityName               = optional
organizationName           = optional
organizationalUnitName     = optional
givenName                  = optional
commonName                 = supplied
emailAddress               = optional
title                      = optional

[ req ]
default_bits        = 2048
distinguished_name  = req_distinguished_name
string_mask         = utf8only
default_md          = sha256
default_keyfile     = private/ica.key
req_extensions      = req_ext
x509_extensions     = v3_intermediate_ca

[ req_distinguished_name ]
countryName                     = Country Name (2 letter code)
stateOrProvinceName             = State or Province Name (full name)
localityName                    = Locality Name (eg, city)
organizationName                = Organization Name (eg, company)
organizationalUnitName          = Organizational Unit Name (eg, section)
commonName                      = Common Name (eg, your name or your server hostname)
commonName_default              = kursor.my.id
emailAddress                    = Email Address
emailAddress_default            = kursor@gmail.com

[ req_ext ]
basicConstraints         = critical, CA:true
keyUsage                 = critical, digitalSignature, cRLSign, keyCertSign

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

[ crl_ext ]
authorityKeyIdentifier   = keyid:always

[ crldp1_section ]
fullname                 = URI:http://ca.example.com/ica.crl

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

c. Membuat kunci pribadi sertifikat Intermediate CA

Pada bagian ini, anda harus membuat kunci pribadi RSA untuk CA perantara dengan menggunakan algoritma enkripsi AES-256 dan kata sandi yang kuat untuk keamanan.

Buat kunci pribadi sertifikat perantara
root@ns3:~# cd /etc/ssl/CA_Linux/intermediateCA
root@ns3:/etc/ssl/CA_Linux/intermediateCA# openssl genrsa -aes256 -out private/ica.key 4096

d. Membuat Permintaan Sertifikat Intermediate CA

Kemudian lanjutkan dengan membuat permintaan untuk membuat sertifikat (CSR - permintaan penandatanganan sertifikat) untuk CA perantara (saat membuat, Anda harus memasukkan kata sandi untuk kunci pribadi).

Buat permintaan penandatanganan sertifikat
root@ns3:/etc/ssl/CA_Linux/intermediateCA# openssl req -config perantara.cnf -new -sha256 -key private/ica.key -out csr/ica.csr
Enter pass phrase for private/ica.key: 1234
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) []:ID
State or Province Name (full name) []:Jawa Barat
Locality Name (eg, city) []:Bekasi
Organization Name (eg, company) []:Mediatama
Organizational Unit Name (eg, section) []:Networking
Common Name (eg, your name or your server hostname) [kursor.my.id]:
Email Address [kursor@gmail.com]:
root@ns3:/etc/ssl/CA_Linux/intermediateCA#
Menampilkan informasi permintaan sertifikat yang telah di tandatangani
root@ns3:/etc/ssl/CA_Linux/intermediateCA# openssl req -in csr/ica.csr -noout -text -reqopt no_version,no_pubkey,no_sigdump

e. Membuat Sertifikat Intermediate CA

Untuk membuat sertifikat perantara, kami menggunakan root CA dengan ekstensi v3_intermediate_ca. Sertifikat perantara harus berlaku untuk jangka waktu yang lebih pendek daripada sertifikat root.

Kita akan melakukan transfer file permintaan (csr) yang dibuat ke direktori /etc/ssl/CA_Linux/rootCA/csr ke server rootCA dan buat sertifikat yang valid selama 10 tahun (saat membuat, Anda harus memasukkan kata sandi untuk kunci pribadi).

Buat sertifikat intermediate CA dengan file konfigurasi OpenSSL rootCA
root@ns3:/etc/ssl/CA_Linux/intermediateCA# openssl ca -config /etc/ssl/CA_Linux/rootCA/root-CA-Linux.cnf \
					   -extensions v3_intermediate_ca \
					   -days 3650 -rand_serial -notext \
					   -in /etc/ssl/CA_Linux/intermediateCA/csr/ica.csr \
					   -out /etc/ssl/CA_Linux/intermediateCA/certs/ica.crt
Coba sekarang anda periksa sertifikat yang diterbitkan untuk CA perantara dan tampilkan juga informasi tentang sertifikat tersebut.

Menampilkan informasi sertifikat perantara (intermediate CA)
root@ns3:/etc/ssl/CA_Linux/intermediateCA# openssl x509 -noout -text -in certs/ica.crt -certopt no_version,no_pubkey,no_sigdump
Anda juga dapat memeriksa keaslian sertifikat yang diterbitkan menggunakan sertifikat root sebagai perbandingannya.

Periksa keaslian sertifikat intermediate CA
root@ns3:/etc/ssl/CA_Linux/intermediateCA# openssl verify \
					  -CAfile /etc/ssl/CA_Linux/rootCA/certs/rca.crt \
					   /etc/ssl/CA_Linux/intermediateCA/certs/ica.crt
/etc/ssl/CA_Linux/intermediateCA/certs/ica.crt: OK

f. Buat sertifikat Full Chain

File rantai sertifikat (sertifikat full chain), diperlukan bagi aplikasi untuk mengautentikasi sertifikat yang ditandatangani oleh CA perantara. Aplikasi perlu memeriksa validitas CA perantara. Pada bagian ini kita akan membuat rantai sertifikat yang berisi CA perantara dan CA root untuk memverifikasi rantai kepercayaan.

Buat sertifikat Full Chain (dari sertifikat rootCa dan sertifikat Intermediate CA)
root@ns3:/etc/ssl/CA_Linux/intermediateCA# cat /etc/ssl/CA_Linux/intermediateCA/certs/ica.crt \
					  /etc/ssl/CA_Linux/rootCA/certs/rca.crt > /etc/ssl/CA_Linux/intermediateCA/certs/ca-chain.crt
Setelah anda selesai membuat sertifikat full chain, periksa keaslian rantai sertifikat dengan menggunakan sertifikat root.

Periksa keaslian rantai sertifikat
root@ns3:/etc/ssl/CA_Linux/intermediateCA# openssl verify -CAfile /etc/ssl/CA_Linux/rootCA/certs/rca.crt \
/etc/ssl/CA_Linux/intermediateCA/certs/ca-chain.crt
/etc/ssl/CA_Linux/intermediateCA/certs/ca-chain.crt: OK

g. Pencabutan sertifikat (CRL)

Seperti halnya rootCA, CA perantara juga harus menerbitkan CRL secara berkala atau setelah sertifikat dicabut. Sekarang kita akan buat CRL kosong awal untuk CA perantara (intermediate).

Buat crl intermediate CA
root@ns3:/etc/ssl/CA_Linux/intermediateCA# openssl ca -config /etc/ssl/CA_Linux/intermediateCA/perantara.cnf \
					                                   -gencrl -out /etc/ssl/CA_Linux/intermediateCA/crl/ica.crl

3. Membuat OCSP Responder

OSCP atau Online Certificate Status Protocol memungkinkan pemohon menentukan status pencabutan sertifikat langsung dari file indeks dan mengembalikan hasilnya.

Untuk membuat OSCP Responder, anda harus membuat kunci pribadi RSA tanpa kata sandi untuk OCSP.

Buat kunci pribadi OSCP
root@ns3:/etc/ssl/CA_Linux/intermediateCA# openssl genrsa -out /etc/ssl/CA_Linux/intermediateCA/private/ocsp.datainchi.com.key 4096
Setelah itu lanjutkan dengan membuat permintaan pembuatan sertifikat (CSR) untuk OCSP.

Buat permintaan pembuatan sertifikat untuk OSCP
root@ns3:/etc/ssl/CA_Linux/intermediateCA# openssl req -config /etc/ssl/CA_Linux/intermediateCA/perantara.cnf \
                                                                           -new -sha256 \
                                                                           -key /etc/ssl/CA_Linux/intermediateCA/private/ocsp.datainchi.com.key \ 
                                                                           -out /etc/ssl/CA_Linux/intermediateCA/csr/ocsp.datainchi.com.com.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) []:ID
State or Province Name (full name) []:Jawa Barat
Locality Name (eg, city) []:Bekasi
Organization Name (eg, company) []:Mediatama
Organizational Unit Name (eg, section) []:Networking
Common Name (eg, your name or your server hostname) [kursor.my.id]:
Email Address [kursor@gmail.com]:
Poin pentingnya adalah Nama Umum harus berupa nama domain yang sepenuhnya memenuhi syarat, misalnya ocsp.example.com. Nama domain harus mengarah ke server dengan responder OCSP. Dalam kasus kami, responden OCSP terletak di server CA perantara (intermidiateCA).

Langkah selanjutnya adalah, anda harus menandatangani sertifikat CSR OSCP dengan CA perantara, seperti contoh skrip di bawah ini.

Tanda tangani sertifikat csr OSCP
root@ns3:/etc/ssl/CA_Linux/intermediateCA# openssl ca -config /etc/ssl/CA_Linux/intermediateCA/perantara.cnf \
					-extensions ocsp -days 375 -rand_serial -notext \
					-in /etc/ssl/CA_Linux/intermediateCA/csr/ocsp.datainchi.com.com.csr \
					-out /etc/ssl/CA_Linux/intermediateCA/certs/ocsp.datainchi.com.crt

4. Membuat Sertifikat Server

Pada bagian ini, akan kami jelaskan cara membuat sertifikat server untuk Web server Apache. Dalam pembuatan sertifikat untuk server apache, disarankan untuk membuat file konfigurasi OpenSSL terpisah yang menjelaskan sertifikat yang akan diterbitkan. Di bawah ini adalah contoh skrip file konfigurasi OpenSSL "/etc/ssl/CA_Linux/server/server.cnf".

Sebelum anda mengetikkan script file konfigurasi OpenSSL, jalankan terlebih dahulu perintah untuk membuat struktur direktori sertifikat server seperti contoh di bawah ini.

Buat Struktur direktori sertifikat server
root@ns3:~# mkdir -p /etc/ssl/CA_Linux/server/{certs,crl,newcerts,private,csr}
root@ns3:~# touch /etc/ssl/CA_Linux/server/server.cnf
Script /etc/ssl/CA_Linux/server/server.cnf
[ req ]
default_bits        = 2048
default_md          = sha256
string_mask         = utf8only
x509_extensions     = req_ext
distinguished_name  = req_distinguished_name
prompt = no

[ req_distinguished_name ]
C   = ID
O   = Mediatama
CN  = ca.datainchi.com

# Common paramets
# C   = Country Name (2 letter code) - AE
# ST  = State or Province Name (full name) - Emirate of Dubai
# L   = Locality Name (eg, city) - Dubai
# O   = Organization Name - NORD RIM
# OU  = Organizational Unit Name (eg, section) - IT
# CN  = Common Name (eg, your name or your server\'s hostname)

[ req_ext ]
basicConstraints        = CA:FALSE
subjectKeyIdentifier    = hash
authorityKeyIdentifier  = keyid,issuer
authorityInfoAccess     = caIssuers;URI:http://ca.datainchi.com/ca_chain.crt,OCSP;URI:http://ocsp.datainchi.com
keyUsage                = digitalSignature, keyEncipherment
extendedKeyUsage        = serverAuth, clientAuth
subjectAltName          = @alt_names
crlDistributionPoints   = crldp1_section

[ crldp1_section ]
fullname = URI:http://ca.datainchi.com/ica.crl

[alt_names]
DNS.1 = ca.datainchi.com
IP.1 = 192.168.5.3

a. Membuat kunci pribadi sertifikat server

Langkah selanjutnya adalah membuat kunci pribadi sertifikat server tanpa menggunakan password. Seperti contoh di bawah ini.

Buat kunci pribadi sertifikat server
root@ns3:~# cd /etc/ssl/CA_Linux/server
root@ns3:/etc/ssl/CA_Linux/server# openssl genrsa -out private/ca.datainchi.com.key 4096

b. Buat permintaan pembuatan sertifikat (CSR) untuk sertifikat server

Setelah anda memiliki kinci pribadi, kemudian anda lanjutkan dengan membuat permintaan sertifikat untuk sertifikat server.

Buat permintaan pembuatan sertifikat server
root@ns3:/etc/ssl/CA_Linux/server# openssl req -new -key /etc/ssl/CA_Linux/server/private/ca.datainchi.com.key \
					-out /etc/ssl/CA_Linux/server/csr/ca.datainchi.com.csr -sha256 \
					-config /etc/ssl/CA_Linux/server/server.cnf -extensions req_ext

c. Tanda tangani sertifikat csr (server) dengan CA perantara (intermediate CA)

Sertifikat csr yang anda buat di atas harus anda tangani dengan sertifikat intermediate CA, lakukan dengan perintah di bawah ini.

Tanda tangani sertifikat server
root@ns3:/etc/ssl/CA_Linux/server# openssl ca -batch -config /etc/ssl/CA_Linux/intermediateCA/perantara.cnf \
					-extfile /etc/ssl/CA_Linux/server/server.cnf \
					-extensions req_ext -days 3650 -rand_serial -notext \
					-in /etc/ssl/CA_Linux/server/csr/ca.datainchi.com.csr \
					-out /etc/ssl/CA_Linux/server/certs/ca.datainchi.com.crt

d. Periksa sertifikat yang telah di tanda tangani

Anda dapat melakukan pemeriksaan sertifikat yang telah anda buat di atas dan anda juga dapat menampilkan informasi tentang sertifikat tersebut.

Periksa sertifikat server
root@ns3:/etc/ssl/CA_Linux/server# openssl x509 -noout -text \
					-in /etc/ssl/CA_Linux/server/certs/ca.datainchi.com.crt \
					-certopt no_version,no_pubkey,no_sigdump

e. Pencabutan sertifikat

Pada bagian ini kita akan praktekkan cara mencabut sertifikat.

Alasan pencabutan/pembatalan sertifikat disebabkan oleh beberapa hal, diantaranya;
  1. unspecified Penyebabnya tidak diketahui.
  2. keyCompromise Kompromi kunci.
  3. CACompromise Kompromi CA.
  4. affiliationChanged Nama pengguna atau informasi lain dalam sertifikat telah diubah, tetapi tidak ada alasan untuk percaya bahwa kunci pribadi telah disusupi.
  5. superseded Sertifikat telah diganti dengan yang lain, namun tidak ada alasan untuk percaya bahwa kunci privat telah disusupi.
  6. cessationOfOperation Sertifikat tidak lagi diperlukan untuk tujuan penerbitannya, namun tidak ada alasan untuk percaya bahwa kunci privat telah disusupi.
  7. certificateHold Sertifikat telah ditangguhkan.
  8. removeFromCRL Kode layanan untuk perpanjangan sertifikat yang sebelumnya ditangguhkan. (Versi CryptoProCA20)
Revoke sertifikat
root@ns3:/etc/ssl/CA_Linux/server# openssl ca -config /etc/ssl/CA_Linux/intermediateCA/perantara.cnf \
					-revoke /etc/ssl/CA_Linux/server/certs/ca.datainchi.com.crt \
					-crl_reason cessationOfOperation
Using configuration from /etc/ssl/CA_Linux/intermediateCA/perantara.cnf
Enter pass phrase for /etc/ssl/CA_Linux/intermediateCA/private/ica.key:
Revoking Certificate 586C3915857505E15190CC115303EC362EC5F52A.
Database updated
Setelah sertifikat anda cabut, maak anda harus membuat ulang file CRL.

Buat crl baru
root@ns3:/etc/ssl/CA_Linux/server# openssl ca -config /etc/ssl/CA_Linux/intermediateCA/perantara.cnf \
					-gencrl -out /etc/ssl/CA_Linux/intermediateCA/crl/ica.crl
Using configuration from /etc/ssl/CA_Linux/intermediateCA/perantara.cnf
Enter pass phrase for /etc/ssl/CA_Linux/intermediateCA/private/ica.key:
Setelah anda melakukan pencabutan sertifikat dan membuat crl baru, anda dapat menampilkan informasi tentang daftar pencabutan.

Menampilkan informasi daftar pencabutan
root@ns3:/etc/ssl/CA_Linux/server# openssl crl -in /etc/ssl/CA_Linux/intermediateCA/crl/ica.crl -text -noout
Kami melihat bahwa sertifikat yang dicabut ditampilkan dalam daftar pencabutan yang dihasilkan (CRL). Jangan lupa untuk mempostingnya di web server setiap kali Anda membuat daftar pencabutan baru (CRL). Anda juga dapat memeriksa status sertifikat yang dicabut menggunakan responden OCSP dengan menjalankan perintah.

Periksa status sertifikat
root@ns3:/etc/ssl/CA_Linux/server# openssl ocsp -CAfile /etc/ssl/CA_Linux/intermediateCA/certs/ca-chain.crt \
                                                            -url http://192.168.5.3:80 \
                                                            -resp_text -issuer /etc/ssl/CA_Linux/intermediateCA/certs/ica.crt \
                                                            -cert /etc/ssl/CA_Linux/intermediateCA/certs/ocsp.datainchi.com.crt
Dalam respon terhadap permintaan tersebut, kita melihat bahwa status sertifikat telah dicabut, alasan dan tanggal pencabutan sertifikat juga terlihat.


https://sysos.ru/archives/668