OpenSSL: Essentials
Introduction
OpenSSL adalah tool CLI serbaguna yang dapat digunakan untuk berbagai macam tugas yang berkaitan dengan Public Key Infrastructure (PKI) dan HTTPS (HTTP over TLS). Panduan gaya cheat sheet ini memberikan referensi cepat untuk perintah OpenSSL yang berguna dalam umum, skenario sehari-hari. Ini termasuk contoh OpenSSL untuk menghasilkan kunci pribadi, permintaan penandatanganan sertifikat, dan konversi format sertifikat. Ini tidak mencakup semua penggunaan OpenSSL.
Cara menggunakan panduan ini:
- Jika Anda tidak terbiasa dengan Certificate Signing Request (CSR), baca bagian pertama.
- Selain bagian pertama, panduan ini ada dalam format cheat sheet sederhana -- cuplikan contoh perintah
- Loncat ke menu yang anda butuhkan
- Kebanyakan perintah yang digunakan adalah satu kalimat. Di expand menjadi banyak kalimat menggunakan simbol \ untuk memudahkan dalam membaca.
Tentang Certificate Signing Request (CSR)
Jika anda ingin mendapatkan sertifikat SSL dari otoritas sertifikat (CA), anda harus membuat Certificate Signing Request (CSR). CSR terdiri dari kunci publik dari pasangan kunci, dan beberapa informasi tambahan. Kedua komponen ini dimasukkan ke dalam sertifikat saat ditandatangani.
Kapan pun anda membuat CSR, anda akan diminta untuk memberikan informasi mengenai sertifikat tersebut. Informasi ini dikenal dengan nama Distinguised Name (DN). Bagian penting di DN adalah Common Name (CN), yang seharusnya merupakan Fully Qualified Domain Name (FQDN) dari host yang ingin anda gunakan dengan sertifikat. Juga memungkinkan untuk melewatkan petunjuk interaktif saat membuat CSR dengan menyampaikan informasi melalui baris perintah atau dari sebuah file..
Parameter lainnya di DN memberikan informasi tambahan tentang bisnis atau organisasi anda. Jika anda membeli sertifikat SSL dari otoritas sertifikat, sering diperlukan agar bidang tambahan ini, seperti "Organisasi", mencerminkan secara akurat rincian organisasi anda.
Berikut adalah contoh dari apa informasi CSR akan terlihat seperti:
--- Country Name (2 letter code) [AU]:US State or Province Name (full name) [Some-State]:New York Locality Name (eg, city) []:Brooklyn Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example Brooklyn Company Organizational Unit Name (eg, section) []:Technology Division Common Name (e.g. server FQDN or YOUR name) []:examplebrooklyn.com Email Address []:
Jika anda ingin secara noninteraktif menjawab permintaan informasi CSR, anda dapat melakukannya dengan menambahkan opsi -subj ke perintah OpenSSL yang meminta informasi CSR. Berikut adalah contoh pilihannya, dengan menggunakan informasi yang sama yang ditampilkan di blok kode di atas:
-subj "/C=US/ST=New York/L=Brooklyn/O=Example Brooklyn Company/CN=examplebrooklyn.com"
Generating CSR
Bakan ini akan membahas tentang perintah OpenSSL yang berhubungan dengan generating CSR (dan private key, jika belum ada). CSR digunakan untuk permohonan certificate SSL dari Certificate Authority (CA).
Jika anda ingin memasukan informasi CSR secara non-interaktif dapat menggunakan opsi -subj
Generate Private Key dan CSR
Gunakan metoda ini jika anda ingin menggunakan HTTPS (HTTP over TLS) untuk mengamankan Apache HTTP atau Nginx web server, dan anda menginginkan untuk menggunakan Certificate Authority (CA) untuk issue SSL certificate. CSR yang dihasilkan dapat dikirim ke CA untuk meminta penerbitan sertifikat SSL yang ditandatangani CA. Jika CA anda mendukung SHA-2, tambahkan opsi -sha256 untuk menandatangani CSR dengan SHA-2.
Perintah berikut akan membuat 2048-bit private key (domain.key) dan CSR (domain.csr) dari nol:
openssl req \ -newkey rsa:2048 -nodes -keyout domain.key \ -out domain.csr
Jawab informasi yang dibutuhkan CSR untuk menyelesaikan proses.
- -newkey rsa:2048 mensyaratkan agar key menggunakan 2048-bit, dan dibuat menggunakan algoritma RSA .
- -nodes mensyaratkan bahwa private key tidak di enkripsi dengan pass phrase.
- -new - tidak di lakukan dalam contoh di atas, mengindikasikan bahwa CSR harus dibuat.
Generate a CSR from an Existing Private Key
Gunakan metoda ini jika anda sudah memiliki private key yang ingin anda gunakan untuk request sebuah certificate dari CA.
Perintah ini akan membuat CSR baru (domain.csr) berbasis pada private key (domain.key) yang sudah ada:
openssl req \ -key domain.key \ -new -out domain.csr
Jawab informasi yang dibutuhkan CSR untuk menyelesaikan proses.
- -key mensyaratkan private key (domain.key) yang ada akan digunakan untuk membuat CSR baru.
- -new mengindikasikan bahwa CSR harus dibuat.
Generate a CSR from an Existing Certificate and Private Key
Gunakan metoda ini jika anda ingin me-renew certificate yang ada tapi anda & CA anda tidak mempunyai CSR yang asli karena satu dan lain hal. Ini pada dasarnya akan memudahkan untuk tidak memasukan ulang informasi CSR, karena dia akan mengekstrak dari certificate yang ada.
Perintah ini pada dasarnya membuat CSR baru (domain.csr) berbasis pada certificate yang ada (domain.crt) dan private key (domain.key):
openssl x509 \ -in domain.crt \ -signkey domain.key \ -x509toreq -out domain.csr
Opsi -x509toreq mengindikasikan kalau kita menggunakan certificate X509 untuk membuat CSR.
Generating SSL Certificates
Jika anda ingin menggunakan sertifikat SSL untuk mendapatkan layanan namun anda tidak memerlukan sertifikat yang ditandatangani oleh CA, solusi yang sah (dan gratis) adalah menandatangani sertifikat anda sendiri.
Jenis sertifikat yang umum yang dapat anda gunakan sendiri adalah sertifikat yang ditandatangani sendiri. Sertifikat yang ditandatangani sendiri adalah sertifikat yang ditandatangani dengan kunci privatnya sendiri. Sertifikat yang ditandatangani sendiri dapat digunakan untuk mengenkripsi data sama seperti sertifikat yang ditandatangani oleh CA, namun pengguna Anda akan ditampilkan peringatan yang mengatakan bahwa sertifikat tersebut tidak dipercaya oleh komputer atau browser mereka. Oleh karena itu, sertifikat yang ditandatangani sendiri hanya boleh digunakan jika anda tidak perlu membuktikan identitas layanan anda kepada penggunanya (misalnya server non-produksi atau non-publik).
Bagian ini mencakup perintah OpenSSL yang terkait dengan pembuatan sertifikat self-signed.
Generate a Self-Signed Certificate
Gunakan metode ini jika anda ingin menggunakan HTTPS (HTTP over TLS) untuk mengamankan server web Apache HTTP atau Nginx anda, dan anda tidak mengharuskan sertifikat anda ditandatangani oleh CA.
Perintah ini akan membuat 2048-bit private key (domain.key) dan self-signed certificate (domain.crt) dari NOL:
openssl req \ -newkey rsa:2048 -nodes -keyout domain.key \ -x509 -days 365 -out domain.crt
Jawab informasi yang dibutuhkan CSR untuk menyelesaikan proses.
- Opsi -x509 memberitahukan req untuk membuat self-signed cerificate.
- Opsi -days 365 mensyaratkan certificate akan valid untuk 365 days.
- Temporary CSR akan dibuat untuk mengumpulkan informasi terkait dengan certificate.
Generate a Self-Signed Certificate from an Existing Private Key
Gunakan metoda ini jika anda sudah mempunyai private key yang ingin digunakan untuk membuat self-signed certificate .
Perintah berikut akan membuat self-signed certificate (domain.crt) dari private key (domain.key) yang ada:
openssl req \ -key domain.key \ -new \ -x509 -days 365 -out domain.crt
Jawab informasi yang dibutuhkan CSR untuk menyelesaikan proses.
- Opsi -x509 memberitahukan req untuk membuat self-signed cerificate.
- Opsi -days 365 mensyaratkan certificate akan valid untuk 365 days.
- Opsi -new mengaktifkan CSR information prompt.
Generate a Self-Signed Certificate from an Existing Private Key and CSR
Gunakan metoda ini jika anda sudah mempunyai private key dan CSR, dan anda ingin membuat self-signed certificate.
Perintah ini membuat self-signed certificate (domain.crt) dari private key (domain.key) dan (domain.csr) yang ada:
openssl x509 \ -signkey domain.key \ -in domain.csr \ -req -days 365 -out domain.crt
- Opsi -days 365 mensyaratkan certificate akan valid untuk 365 days.
View Certificate
File Certificate dan CSR di encode dalam format PEM, yang tidak bisa di baca oleh manusia.
Bagian ini akan membahas perintah OpenSSL yang akan beroperasi dengan PEM-encoded file.
View CSR Entries
Perintah ini memungkinkan kita untuk melihat dan memverifikasi isi dari CSR (domain.csr) dalam bentuk plain text:
openssl req -text -noout -verify -in domain.csr
View Certificate Entries
Perintah ini memungkinkan untuk melihat isi dari certificate (domain.crt) dalam bentuk plain text:
openssl x509 -text -noout -in domain.crt
Verify a Certificate was Signed by a CA
Perintah ini untuk memverifikasi certificate (domain.crt) yang di tanda tangani oleh CA certificate (ca.crt):
openssl verify -verbose -CAFile ca.crt domain.crt
Private Key
Bagian ini akan membahas perintah OpenSSL yang berkaitan dengan pembuatan dan verifikasi private key.
Create a Private Key
Gunakan perintah ini untuk membuat sebuah password-protected, 2048-bit private key (domain.key):
openssl genrsa -des3 -out domain.key 2048
Masukan password jika di tanya, saat menyelesaikan proses.
Verify a Private Key
Gunakan perintah ini untuk mencek apakah sebuah private key (domain.key) adalah valid key:
openssl rsa -check -in domain.key
Jika private key anda di enkripsi, anda akan ditanyakan pass phrase. Jika sukses, key yang tidak di enkripsi akan di keluarkan pada terminal.
Verify a Private Key Matches a Certificate and CSR
Gunakan perintah ini untuk mem-verifikasi apakah sebuah private key (domain.key) cocok dengan certificate (domain.crt) dan CSR (domain.csr) sebuah domain:
openssl rsa -noout -modulus -in domain.key | openssl md5 openssl x509 -noout -modulus -in domain.crt | openssl md5 openssl req -noout -modulus -in domain.csr | openssl md5
Jika output masing-masing perintah ini sama, maka kemungkinan besar private key, certificate, dan CSR saling terkait / berhubungan.
Encrypt a Private Key
Perintah ini akan mengambil unencrypted private key (unencrypted.key) dan mengeluarkan encrypted private key (encrypted.key):
openssl rsa -des3 \ -in unencrypted.key \ -out encrypted.key
Masukan pass phrase yang anda inginkan untuk meng-encrypt private key tersebut.
Decrypt a Private Key
Ini akan mengambil encrypted private key (encrypted.key) dan mengeluarkan decrypted private key (decrypted.key):
openssl rsa \ -in encrypted.key \ -out decrypted.key
Masukan pass phrase untuk encrypted key saat ditanyakan.
Convert Certificate Format
Semua sertifikat yang telah kita kerjakan adalah sertifikat X.509 yang dikodekan ASCII. Ada berbagai jenis pengkodean dan wadah sertifikat lainnya; Beberapa aplikasi lebih memilih format tertentu daripada yang lain. Selain itu, banyak format ini dapat berisi beberapa item, seperti sertifikat kunci pribadi, sertifikat, dan CA, dalam satu file.
OpenSSL dapat digunakan untuk mengkonversi sertifikat ke dan dari berbagai format ini. Bagian ini akan mencakup beberapa kemungkinan konversi.
Convert PEM ke DER
Gunakan perintah berikut jika anda ingin convert a PEM-encoded certificate (domain.crt) ke DER-encoded certificate (domain.der), sebuah format binary:
openssl x509 \ -in domain.crt \ -outform der -out domain.der
Format DER biasanya digunakan di Java.
Convert DER ke PEM
Gunakan perinntah ini untuk convert a DER-encoded certificate (domain.der) ke PEM-encoded certificate (domain.crt):
openssl x509 \ -inform der -in domain.der \ -out domain.crt
Convert PEM to PKCS7
Gunakan perintah ini jika anda ingin menambahkan PEM certificates (domain.crt dan ca-chain.crt) ke file PKCS7 (domain.p7b):
openssl crl2pkcs7 -nocrl \ -certfile domain.crt \ -certfile ca-chain.crt \ -out domain.p7b
Catatan bahwa anda bisa menggunakan satu atau lebih opsi -certfile untuk memberitahukan certificate mana yang akan ditambahkan ke file PKCS7 .
File PKCS7, juga di kenal sebagai P7B, biasanya digunakan di Java Keystores dan Microsoft IIS (Windows). Ini adalah file ASCII yang berisi certificate dan CA certificate.
Convert PKCS7 ke PEM
Gunakan perintah ini jika kita ingin convert PKCS7 file (domain.p7b) ke PEM file:
openssl pkcs7 \ -in domain.p7b \ -print_certs -out domain.crt
Perlu di catat jika PKCS7 file anda mempunyai banyak item dalamnya (misalnya certificate dan CA intermediate certificate), maka PEM file yang dibuat akan berisi semua item tersebut.
Convert PEM ke PKCS12
Gunakan perintah ini jika anda ingin mengambil private key (domain.key) dan sebuah certificate (domain.crt), dan menggabungkannya menjadi PKCS12 file (domain.pfx):
openssl pkcs12 \ -inkey domain.key \ -in domain.crt \ -export -out domain.pfx
Anda akan di tanyakan untuk export password, yang mana dapat anda biarkan kosong. Perlu di catat bahwa anda dapat menambahkan rantai certificate ke PKCS12 file dengan cara menyambungkan semua certificate ini menjadi sebuah PEM file (domain.crt).
PKCS12 files, juga dikenal sebagai PFX file, biasanya digunakan untuk import dan export certificate chain di Micrsoft IIS (Windows).
Convert PKCS12 ke PEM
Gunakan perintah ini jika anda ingin convert PKCS12 file (domain.pfx) dan mengkonversikan-nya ke PEM format (domain.combined.crt):
openssl pkcs12 \ -in domain.pfx \ -nodes -out domain.combined.crt
Perlu di catat bahwa PKCS12 file mempunyai banyak item di dalamnya (seperti certificate dan private key), PEM file yang dibuat akan berisi semua item tersebut di dalamnya.
OpenSSL Version
Perintah versi openssl dapat digunakan untuk memeriksa versi yang anda jalankan. Versi OpenSSL yang anda jalankan, dan opsi yang dikompilasi dengan mempengaruhi kemampuan (dan terkadang opsi CLI) yang tersedia untuk anda.
Perintah berikut menampilkan versi OpenSSL yang anda jalankan, dan semua opsi yang dikompilasi dengan:
openssl version -a
Panduan ini ditulis menggunakan biner OpenSSL dengan rincian sebagai berikut (output dari perintah sebelumnya):
OpenSSL 1.0.2g-fips 1 Mar 2016 built on: reproducible build, date unspecified platform: debian-amd64 options: bn(64,64) rc4(16x,int) des(idx,cisc,16,int) blowfish(idx) compiler: cc -I. -I.. -I../include -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64 -DL_ENDIAN -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wa,--noexecstack -Wall -DMD32_REG_T=int -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM OPENSSLDIR: "/usr/lib/ssl"