Penjelasan mengenai teori dasar mengenai sertifikat digital diberikan di artikel ini. Di artikel ini akan dibahas berbagai perintah linux yang sering dipakai dalam manajemen sertifikat SSL/TLS yang biasanya banyak digunakan.
Openssl adalah perintah di linux yang digunakan untuk mengelelo sertifikat digital. Perintah ini merupakan perangkat Open Souce, yang digunakan untuk implementasi protokol SSL dan TLS yang digunakan untuk keamanan komunikasi di jaringan komputer. Perintah ini yang menjadi dasar dari berbagai perintah di bawah ini.
Pembuatan kunci privat (private keys)
$ openssl genpkey -algorithm RSA -out kunci_privat.pem
Hasil dari perintah di atas adalah kunci privat bernaman private_key.pem dan algorithm dari kunci privat ini adalah RSA. Ada berbagai macam algoritma yang dapat digunakan di openssl dan RSA merupakan algoritma kunci publik (public keys algorithm).
Pembuatan CSR ( Certificate Signing Request)
Kunci yang digunakan untuk CSR di atas adalah private_key.pem yang sebelumnya dihasilkan dan csr.pem adalah hasil CSR yang diinginkan. Perintah pembuatan CSR tidak memberikan berbagai opsi. Berikan argumen yang diperlukan untuk menghasilkan CSR yang diinginkan.
$ openssl req -new -key kunci_privat.pem-out csr.pem
Pembuatan Seritifikat Self Signed
Setelah menghasilkan CSR di atas, langkah berikutnya adalah menciptakan sertifikat itu sendiri, dan di kasus perintah di bawah menghasilkan sertifikat self signed dan valid hingga 365 hari. Untuk saya sendiri, jika menggunakan Sertifikat Self Signed validitas yang akan saya berikan adalah 3650 hari, tapi itu hanya preferensi saya.
$ openssl req -new -x509 -key kunci_privat.pem -out self_signed_certificate.pem -days 365
Ada satu perintah yang sering saya pribadi gunakan adalah saat saya perlu memastikan apakah kunci pribadi yang saya miliki adalah pasangan dari sertifikat yang saya miliki. Berikut adalah perintahnya:
$ diff <(openssl x509 -in tls.cer -modulus -noout) <(openssl rsa -in tls.key -modulus -noout)
$
Peritnah di atas untuk memeriksa apakah tls.key merupakan kunci dari sertifikat tls.cer. Saat perintah di atas kembali ke prompt, menandakan bahwa tls.cer dan tls.key adalah 1 pasangan. Jika perintah di atas menghasilkan hasil tertentu menandakan bahwa tls.cer dan tls.key bukan pasangan dan berarti mereka tidak dapat digunakan bersama-sama.
Di beberapa kasus dibutuhkan untuk mengubah format dari berbagai sertifikat, saya sendiri belum pernah mengalaminya. Untuk hal itu berikut adalah perintahnnya:
$ openssl x509 -outform der -in certificate.pem -out certificate.der
Perintah di atas untuk mengkonversi dari format .pem menjadi format .der
Selanjutnya adalah perintah-perintah untuk mendapatkan detil dari sebuah sertifikat:
$ openssl x509 -in certificate.pem -text -noout
Hasil perintah di atas memperlihatkan berbagai informasi seperti versi dari X509, nomor seri (serial number), algoritma signature, issuer (organisasi yang mengeluarkan sertifikat), validitas (tanggal sebelum dan tanggal sesudah), Subject Alternative Name (SAN) dll.
Saat sertifikat ini telah diimplementasikan di sebuah sistem ada berbagai cara untuk memastikan bahwa sertifikat berhasi diinstalasi.
- Dengan menggunakan web browser dan buka halaman https://<situs yang sertifikatnya baru diinstalasi>. Saat kita membuka halaman situs itu dan tidak ada pesan “Warning, this site is not secure” pertanda instalasi yang dilakukan berhasil
- Dengan perintah curl dengan situs tujuan blog ini.
$ curl -vvv https://pasirdatar.tech | head -15
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Host pasirdatar.tech:443 was resolved.
* IPv6: (none)
* IPv4: 50.6.160.33
* Trying 50.6.160.33:443...
* Connected to pasirdatar.tech (50.6.160.33) port 443
* ALPN: curl offers h2,http/1.1
* (304) (OUT), TLS handshake, Client hello (1):
} [320 bytes data]
* CAfile: /etc/ssl/cert.pem
* CApath: none
* (304) (IN), TLS handshake, Server hello (2):
{ [122 bytes data]
* (304) (IN), TLS handshake, Unknown (8):
{ [19 bytes data]
* (304) (IN), TLS handshake, Certificate (11):
{ [2888 bytes data]
* (304) (IN), TLS handshake, CERT verify (15):
{ [264 bytes data]
* (304) (IN), TLS handshake, Finished (20):
{ [52 bytes data]
* (304) (OUT), TLS handshake, Finished (20):
} [52 bytes data]
* SSL connection using TLSv1.3 / AEAD-AES256-GCM-SHA384 / [blank] / UNDEF
* ALPN: server accepted h2
* Server certificate:
* subject: CN=bll.jre.temporary.site
* start date: Sep 14 13:31:03 2024 GMT
* expire date: Dec 13 13:31:02 2024 GMT
* subjectAltName: host "pasirdatar.tech" matched cert's "pasirdatar.tech"
* issuer: C=US; O=Let's Encrypt; CN=R10
* SSL certificate verify ok.
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://pasirdatar.tech/
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: pasirdatar.tech]
* [HTTP/2] [1] [:path: /]
* [HTTP/2] [1] [user-agent: curl/8.7.1]
* [HTTP/2] [1] [accept: */*]
> GET / HTTP/2
> Host: pasirdatar.tech
> User-Agent: curl/8.7.1
> Accept: */*
>
* Request completely sent off
< HTTP/2 200
Hasil seperti di atas menandakan bahwa instalasi dari sertifikat berhasil dilakukan. Dari hasil perintah di atas dapat dilihat bahwa CN dari sertifikat ini adalah subjectAlternateName.
- menggunakan perintah openssl
$ openssl s_client -connect pasirdatar.tech:443 | head -15
depth=2 C = US, ST = New Jersey, L = Jersey City, O = The USERTRUST Network, CN = USERTrust RSA Certification Authority
verify return:1
depth=1 C = GB, ST = Greater Manchester, L = Salford, O = Sectigo Limited, CN = Sectigo RSA Domain Validation Secure Server CA
verify return:1
depth=0 CN = *.hostgator.com
verify return:1
CONNECTED(00000005)
write W BLOCK
---
Certificate chain
0 s:/CN=*.hostgator.com
i:/C=GB/ST=Greater Manchester/L=Salford/O=Sectigo Limited/CN=Sectigo RSA Domain Validation Secure Server CA
1 s:/C=GB/ST=Greater Manchester/L=Salford/O=Sectigo Limited/CN=Sectigo RSA Domain Validation Secure Server CA
i:/C=US/ST=New Jersey/L=Jersey City/O=The USERTRUST Network/CN=USERTrust RSA Certification Authority
2 s:/C=US/ST=New Jersey/L=Jersey City/O=The USERTRUST Network/CN=USERTrust RSA Certification Authority
i:/C=GB/ST=Greater Manchester/L=Salford/O=Comodo CA Limited/CN=AAA Certificate Services
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIGNzCCBR+gAwIBAgIQFHICDClH4pLscMTK+5gskDANBgkqhkiG9w0BAQsFADCB
jzELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
Di perintah terakhir ini terlihat informasi sertifikat dari server, di sini tidak seluruh hasil dari perintah openssl itu diberikan karena cukup panjang.