OpenSSL: Tutorial Simple
sumber: http://pki-tutorial.readthedocs.io/en/latest/simple/
Pada kesempatan ini kita akan belajar Simple PKI dengan satu root CA dan satu signing CA
Overview
Asumsinya sebuah organisasi dengan nama Simple Inc, mengggunakan domain simple.org. Organisasi ini menjalan sebuah PKI kecil untuk mengamankan semua email dan traffic intranet-nya.
Untuk membuat PKI,
- Pertama-tama, kita membuat Simple Root CA dengan CA certificate-nya.
- Kita menggunakan root CA untuk membuat Simple Signing CA.
- Setelah CA beroperasi, kita bisa menbuat email-protection certificate untuk pegawai, misalnya, Fred Flintstone.
- Setelah CA beroperasi, kita bisa membuat TLS-server certificate untuk webserver di www.simple.org.
- Terakhir, kita akan melihat format output yang perlu di dukung CA dan melihat isi file yan kita buat.
Semua perintah siap di copy / paste ke terminal (CLI). Semua perintah ini adalah operasi yang akan di lakukan pada sebuah PKI.
Persiapan
To get started, fetch the Simple PKI example files and change into the new directory:
sudo su cd /usr/local/src git clone https://bitbucket.org/stefanholek/pki-example-1 cd pki-example-1
Atau download dari
https://bitbucket.org/stefanholek/pki-example-1/downloads/
mv /home/onno/stefanholek-pki-example-1-afc585fd9f5e.zip /usr/local/src/ apt install unzip unzip stefanholek-pki-example-1-afc585fd9f5e.zip
File Konfigurasi
Kita akan memakai satu file konfigurasi per CA
- Root CA Configuration File - stefanholek-pki-example-1-afc585fd9f5e/etc/root-ca.conf
- Signing CA Configuration File - stefanholek-pki-example-1-afc585fd9f5e/etc/signing-ca.conf
Dan satu file konfigurasi untuk setiap tipe CSR
- Email Certificate Request Configuration File - stefanholek-pki-example-1-afc585fd9f5e/etc/email.conf
- TLS Server Certificate Request Configuration File - stefanholek-pki-example-1-afc585fd9f5e/etc/server.conf
Untuk belajar kita akan menggunakan root
/usr/local/src/stefanholek-pki-example-1-afc585fd9f5e
Create Root CA
Create directories
cd /usr/local/src/stefanholek-pki-example-1-afc585fd9f5e mkdir -p ca/root-ca/private ca/root-ca/db crl certs chmod 700 ca/root-ca/private
- directory ca tempat menyimpan resource CA
- directory crl tempat menyimpan CRL
- directory certs tempat menyimpan certificate user
Create database
cd /usr/local/src/stefanholek-pki-example-1-afc585fd9f5e cp /dev/null ca/root-ca/db/root-ca.db cp /dev/null ca/root-ca/db/root-ca.db.attr echo 01 > ca/root-ca/db/root-ca.crt.srl echo 01 > ca/root-ca/db/root-ca.crl.srl
File database harus ada sebelum perintah openssl ca dapat digunakan.
Create CA request
cd /usr/local/src/stefanholek-pki-example-1-afc585fd9f5e openssl req -new \ -config etc/root-ca.conf \ -out ca/root-ca.csr \ -keyout ca/root-ca/private/root-ca.key
Perintah openssl req -new akan membuat private key dan certificate signing request (CSR) untuk root CA. Anda akan ditanya passphrase untuk memproteksi private key. Perintah openssl req akan mengambil konfigurasi dari bagian [req] dari file konfigurasi.
Untuk belajar password yang digunakan bisa 123456.
Create CA certificate
cd /usr/local/src/stefanholek-pki-example-1-afc585fd9f5e openssl ca -selfsign \ -config etc/root-ca.conf \ -in ca/root-ca.csr \ -out ca/root-ca.crt \ -extensions root_ca_ext
Perintah openssl ca kita dapat meng-issue root CA certificate berdasarkan CSR. Root certificate merupakan self-signed dan akan menjadi titik awal dari semua hubungan trust / kepercayaan di PKI. Perintah openssl ca akan mengambil konfigurasi dari bagian [ca] di file konfigurasi.
Create Signing CA
Create directories
cd /usr/local/src/stefanholek-pki-example-1-afc585fd9f5e mkdir -p ca/signing-ca/private ca/signing-ca/db crl certs chmod 700 ca/signing-ca/private
- Directory ca menyimpan semua sumber daya CA
- Directory crl tempat menyimpan CRL
- Directory certs menyimpan semua user certificate
Create database
cd /usr/local/src/stefanholek-pki-example-1-afc585fd9f5e cp /dev/null ca/signing-ca/db/signing-ca.db cp /dev/null ca/signing-ca/db/signing-ca.db.attr echo 01 > ca/signing-ca/db/signing-ca.crt.srl echo 01 > ca/signing-ca/db/signing-ca.crl.srl
Create CA request
cd /usr/local/src/stefanholek-pki-example-1-afc585fd9f5e openssl req -new \ -config etc/signing-ca.conf \ -out ca/signing-ca.csr \ -keyout ca/signing-ca/private/signing-ca.key
Perintah openssl req -new akan membuat private key dan CSR untuk signing CA. Kita akan ditanyakan password untuk memproteksi private key. Perintah openssl req akan mengambil konfigurasi dari bagian [req] dari file konfigurasi.
Untuk belajar kita bisa menggunakan passphrase 123456
Create CA certificate
cd /usr/local/src/stefanholek-pki-example-1-afc585fd9f5e openssl ca \ -config etc/root-ca.conf \ -in ca/signing-ca.csr \ -out ca/signing-ca.crt \ -extensions signing_ca_ext
Perintah openssl ca akan meng-issue certificate berbasis pada CSR. Perintah tersebut akan mengambil konfigurasi dari bagian [ca] dari file konfigurasi. Perlu di catat:
- root CA yang akan meng-issue signing CA certificate!
- kita attach set extension yang berbeda
Operate Signing CA
Create email request
cd /usr/local/src/stefanholek-pki-example-1-afc585fd9f5e openssl req -new \ -config etc/email.conf \ -out certs/fred.csr \ -keyout certs/fred.key
Perintah openssl req -new akan membuat private key dan CSR untuk email-protection certificate.
Kita menggunakan request configuration file untuk menyiapkan tugas tersebut.
Jika ditanyakan komponen DN berikut, isi dengan
- Domain Component (eg, com) []:org
- Domain Component (eg, company) []:simple
- Domain Component (eg, pki) []:
- Organization Name (eg, company) []:Simple Inc
- Organizational Unit Name (eg, section) []:
- Common Name (eg, full name) []:Fred Flintstone
- Email Address (eg, name@fqdn) []:fred@simple.org
biarkan yang lain kosong
Create email certificate
cd /usr/local/src/stefanholek-pki-example-1-afc585fd9f5e openssl ca \ -config etc/signing-ca.conf \ -in certs/fred.csr \ -out certs/fred.crt \ -extensions email_ext
Kita menggunakan signing CA untuk issue email-protection certificate. Type certificate di definisikan oleh extensions yang di attach. Copy certificate di simpan di arsip certificate dengan nama ca/signing-ca/01.pem (01 sebagai nomor seri certificate dalam hex.)
Create TLS server request
cd /usr/local/src/stefanholek-pki-example-1-afc585fd9f5e SAN=DNS:www.simple.org \ openssl req -new \ -config etc/server.conf \ -out certs/simple.org.csr \ -keyout certs/simple.org.key
Membuat private key dan CSR untuk TLS-server certificate menggunakan request configuration file yang lain. Saat ditanya DN components:
- DC=org
- DC=simple
- O=Simple Inc
- CN=www.simple.org
Catatan:
- subjectAltName (SAN) harus di spesifikasi sebagai environment variable.
- server keys biasanya tidak mempunyai passphrase.
Create TLS server certificate
cd /usr/local/src/stefanholek-pki-example-1-afc585fd9f5e openssl ca \ -config etc/signing-ca.conf \ -in certs/simple.org.csr \ -out certs/simple.org.crt \ -extensions server_ext
Gunakan signing CA untuk issue server certificate. Tipe certificate di definisikan oleh extensions yang di attach. Copy certificate di simplan di arsip certificate di bawah nama ca/signing-ca/02.pem.
Revoke certificate
cd /usr/local/src/stefanholek-pki-example-1-afc585fd9f5e openssl ca \ -config etc/signing-ca.conf \ -revoke ca/signing-ca/01.pem \ -crl_reason superseded
Untuk keadaan tertantu, seperti perubahan certificate atau kehilangan private key, akan membutuhkan pencabutan certificate sebelum tanggal expirenya.
Perintah openssl ca -revoke menandai sebuah cerificate sebagai di cabut di CA database.
Untuk selanjutnya akan mengikutkan dalam CRL yang di isu oleh CA.
Perintah di atas akan mencabut certificate dengan nomor serial 01 (hex).
Create CRL
cd /usr/local/src/stefanholek-pki-example-1-afc585fd9f5e openssl ca -gencrl \ -config etc/signing-ca.conf \ -out crl/signing-ca.crl
Perintah openssl ca -gencrl membuat certificate revocation list (CRL). CRL berisi semua certificate yang statusnya revoked, not-yet-expired dari CA database. CRL baru harus di issue pada interval yang periodik.
Output Format
Create DER certificate
cd /usr/local/src/stefanholek-pki-example-1-afc585fd9f5e openssl x509 \ -in certs/fred.crt \ -out certs/fred.cer \ -outform der
Semua published certificates harus dalam DER format [RFC 2585#section-3].
Create DER CRL
cd /usr/local/src/stefanholek-pki-example-1-afc585fd9f5e openssl crl \ -in crl/signing-ca.crl \ -out crl/signing-ca.crl \ -outform der
Semua published CRL harus dalam DER format [RFC 2585#section-3]
Create PKCS#7 bundle
cd /usr/local/src/stefanholek-pki-example-1-afc585fd9f5e openssl crl2pkcs7 -nocrl \ -certfile ca/signing-ca.crt \ -certfile ca/root-ca.crt \ -out ca/signing-ca-chain.p7c \ -outform der
PKCS#7 digunakan untuk mem-bundel dua atau lebih certificate. Format bisa digunakan untuk CRL tapi tidak digunakan di lapangan / operasional.
Create PKCS#12 bundle
cd /usr/local/src/stefanholek-pki-example-1-afc585fd9f5e openssl pkcs12 -export \ -name "Fred Flintstone" \ -inkey certs/fred.key \ -in certs/fred.crt \ -out certs/fred.p12
PKCS#12 digunakan untuk mem-bundel sebuah certificate dengan private key. Tambahan certificate dapat dilakukan, biasanya certificate yang merupakan mata rantai ke Root CA.
Create PEM bundle
cd /usr/local/src/stefanholek-pki-example-1-afc585fd9f5e cat ca/signing-ca.crt ca/root-ca.crt > \ ca/signing-ca-chain.pem
cd /usr/local/src/stefanholek-pki-example-1-afc585fd9f5e cat certs/fred.key certs/fred.crt > \ certs/fred.pem
PEM bundel dibuat dengan cara meng-concatenate file PEM lainnya. Yang banyak digunakan adalah “cert chain”, “key + cert”, dan “key + cert chain”. PEM bundle didukung oleh OpenSSL dan kebanyakan software pengikutnya (seperti apache mod_ssl dan stunnel).
View Results
View request
cd /usr/local/src/stefanholek-pki-example-1-afc585fd9f5e openssl req \ -in certs/fred.csr \ -noout \ -text
Perintah openssl req dapat digunakan untuk melihat isi dari file CSR . Opsi -noout dan -text akan menghasilkan format yang bisa di baca oleh manusiat.
View certificate
cd /usr/local/src/stefanholek-pki-example-1-afc585fd9f5e openssl x509 \ -in certs/fred.crt \ -noout \ -text
Perintah openssl x509 dapat digunakan untuk menampilkan isi file certificate. Opsi -noout dan -text mempunya fungsi yang sama dengan di atas.
View CRL
cd /usr/local/src/stefanholek-pki-example-1-afc585fd9f5e openssl crl \ -in crl/signing-ca.crl \ -inform der \ -noout \ -text
Perintah openssl crl digunakan untuk melihat isi file CRL. Perhatikan bahwa kita menggunakan -inform der karena kita sudah mengkonversi CRL di step di atas.
View PKCS#7 bundle
cd /usr/local/src/stefanholek-pki-example-1-afc585fd9f5e openssl pkcs7 \ -in ca/signing-ca-chain.p7c \ -inform der \ -noout \ -text \ -print_certs
Perintah openssl pkcs7 dapat digunakan untuk menampilkan isi bundel PKCS#7 .
View PKCS#12 bundle
cd /usr/local/src/stefanholek-pki-example-1-afc585fd9f5e openssl pkcs12 \ -in certs/fred.p12 \ -nodes \ -info
Perintah openssl pkcs12 dapat digunakan untuk menampilkan isi PKCS#12
References
- http://www.openssl.org/docs/apps/req.html
- http://www.openssl.org/docs/apps/ca.html
- http://www.openssl.org/docs/apps/x509.html
- http://www.openssl.org/docs/apps/crl.html
- http://www.openssl.org/docs/apps/crl2pkcs7.html
- http://www.openssl.org/docs/apps/pkcs7.html
- http://www.openssl.org/docs/apps/pkcs12.html