OpenSSL: Ubuntu
sumber: https://help.ubuntu.com/community/OpenSSL
Tentang OpenSSL
Secure Sockets Layer adalah protokol tingkat aplikasi yang dikembangkan oleh Netscape Corporation untuk tujuan mentransmisikan informasi sensitif, seperti detail Kartu Kredit, melalui Internet. SSL bekerja dengan menggunakan kunci pribadi untuk mengenkripsi data yang ditransfer melalui koneksi SSL-enabled, sehingga menggagalkan penyadapan informasi. Penggunaan SSL yang paling populer adalah bersamaan dengan penjelajahan web (menggunakan protokol HTTP), namun banyak aplikasi jaringan dapat memanfaatkan penggunaan SSL. Dengan konvensi, URL yang memerlukan sambungan SSL dimulai dengan https: bukan http :.
OpenSSL adalah penerapan alat SSL yang tangguh dan komersial, dan perpustakaan tujuan umum yang terkait berdasarkan SSLeay, dikembangkan oleh Eric A. Young dan Tim J. Hudson. OpenSSL tersedia sebagai Open Source setara dengan implementasi komersial SSL melalui lisensi bergaya Apache.
Tentang X.509
X.509 adalah spesifikasi untuk sertifikat digital yang diterbitkan oleh International Telecommunications Union - Telecommunication (ITU-T). Ini menentukan informasi dan atribut yang diperlukan untuk identifikasi seseorang atau sistem komputer, dan digunakan untuk pengelolaan yang aman dan distribusi sertifikat yang ditandatangani secara digital melalui jaringan Internet yang aman. OpenSSL paling sering menggunakan sertifikat X.509.
Penggunaan Praktis OpenSSL
Install OpenSSL Toolkit
Bisa menggunakan perintah
apt install openssl
Biasanya sudah terinstall di distribusi Ubuntu
Install OpenSSL Library
Cek libssl yang ada,
apt-cache search libssl | grep SSL apt-cache search libssl
Keluar kira-kira
libssl-dev - Secure Sockets Layer toolkit - development files libssl-doc - Secure Sockets Layer toolkit - development documentation libssl1.0.0 - Secure Sockets Layer toolkit - shared libraries libssl1.0.0-dbg - Secure Sockets Layer toolkit - debug information cl-plus-ssl - Common Lisp interface to OpenSSL libssl-ocaml - OCaml bindings for OpenSSL (runtime) libssl-ocaml-dev - OCaml bindings for OpenSSL libsslcommon2 - enterprise messaging system - common SSL libraries libsslcommon2-dev - enterprise messaging system - common SSL development files
Install misalnya,
locale-gen id_ID.UTF-8 apt install libsslcommon2 libsslcommon2-dev libssl-dev libssl1.0.0 libssl1.0.0-dbg
Juga install ca-certificate
apt install ca-certificates
Jika di perlukan untuk java & mono, bisa di install juga
apt install ca-certificates-java apt install ca-certificates-mono
Install OpenSSL Development Library
Jika dibutuhkan untuk membuat OpenSSL library, kita perlu menginstalasi
apt install libssl-dev
Basic OpenSSL Command
Bagian ini akan membahas perintah OpenSSL dasar. Untuk mengetahui OpenSSL versi yang di instalasi,
openssl version
Untuk melihat sub-command OpenSSL:
openssl help
Untuk mengetahui perintah sub-command, dapat digunakan (misalnya untuk perintah enc),
openssl -h enc
Untuk melihat semua algoritma cipher yang ada:
openssl ciphers -v
Untuk melakukan benchmark kecepatan komputer dengan OpenSSL,
openssl speed
SSL Certificate
Bagian berikut dari panduan ini akan memperkenalkan konsep yang terlibat dalam pembuatan dan penggunaan sertifikat SSL, baik varietas yang ditandatangani sendiri, dan yang ditandatangani oleh otoritas sertifikat yang diakui untuk digunakan dengan aplikasi server yang mendukung SSL, dan penggunaan X. 509 sertifikat dalam aplikasi klien
SSL Certificate untuk menggunaan Server
Setelah anda telah menghasilkan sertifikat SSL yang sesuai dengan X.509, anda dapat memilih untuk menandatangani sertifikat sendiri, dengan membuat Otoritas Sertifikat (Certificate Authority / CA), atau anda dapat memilih untuk memiliki Otoritas Sertifikat yang diakui secara global untuk menandatangani sertifikat. Saat sertifikat ditandatangani, maka sertifikat siap digunakan dengan toolkit OpenSSL, atau library untuk mengaktifkan koneksi SSL terenkripsi ke server, misalnya, Lightweight Directory Access Protoco (LDAP) atau Hyper Text Transport Protocol (HTTP). Bagian panduan ini menjelaskan tentang generasi sertifikat, dan proses penandatanganan untuk sertifikat tanda tangan yang ditandatangani sendiri, dan sertifikat CA yang telah ditandatangani.
Generating dan Signing Self-Signed Certificate
Self-signed Sertifikat memiliki keuntungan besar karena mereka benar-benar bebas untuk menggunakannya, dan dapat dihasilkan, ditandatangani, dan digunakan sesuai kebutuhan. Sertifikat self-signed sangat bagus untuk digunakan di lingkungan laboratorium tertutup atau untuk tujuan pengujian. Salah satu kelemahan menggunakan sertifikat yang ditandatangani sendiri, bagaimanapun, adalah bahwa peringatan biasanya akan dikeluarkan oleh browser Web pengguna, dan aplikasi lainnya, setelah mengakses server SSL-secure yang menggunakan sertifikat yang ditandatangani sendiri. Secara default, aplikasi klien (mis., Firefox) akan menekan peringatan tersebut untuk sertifikat yang ditandatangani hanya dengan menggunakan Otoritas Sertifikat yang diakui secara global dan terpercaya, namun peringatan juga dapat dimatikan dengan mengimpor sertifikat akar server ke aplikasi klien; Demonstrasi yang relevan ditunjukkan nanti dalam panduan ini. Menggunakan sertifikat yang ditandatangani sendiri di lingkungan produksi yang dapat diakses oleh publik tidak disarankan karena adanya masalah kepercayaan implisit yang timbul dari peringatan ini, selain potensi kebingungan pada pengguna.
CATATAN: Anda harus mendapatkan sertifikat yang ditandatangani oleh Otoritas Sertifikat yang diakui untuk membuat situs komersial, mis., Untuk melakukan "e-commerce".
Jika anda telah menginstal toolkit OpenSSL sebelumnya, atau sesuai petunjuk di atas, generasi sertifikat SSL X.509 cukup sederhana. Untuk sertifikat yang ditandatangani sendiri, anda harus terlebih dahulu membuat Otoritas Sertifikat (Certificate Authority / CA) dengan mengikuti langkah-langkah di bawah ini:
Membuat Certificate Authority
Pertama, buat lingkungan kerja awal, misalnya di dalam direktori home anda dengan mengeluarkan perintah berikut dari prompt terminal:
cd mkdir -p myCA/signedcerts mkdir myCA/private cd myCA
Fungsi dari masing-masing directory adalah sebagai berikut,
~/myCA : berisi CA certificate, certificate database, generated certificate, key, dan request ~/myCA/signedcerts : berisi copy dari setiap signed certificate ~/myCA/private : berisi private key
Selanjutnya buat initial certificate database di ~/myCA subdirectory dengan perintah berikut,
cd ~/myCA echo '01' > serial && touch index.txt
Selanjutnya buat caconfig.cnf yang cocok untuk pembuatan CA certificate. Edit,
sudo vi ~/myCA/caconfig.cnf sudo nano ~/myCA/caconfig.cnf
Isi dengan
# My sample caconfig.cnf file. # # Default configuration to use when one is not provided on the command line. # [ ca ] default_ca = local_ca # # # Default location of directories and files needed to generate certificates. # [ local_ca ] dir = /home/<username>/myCA certificate = $dir/cacert.pem database = $dir/index.txt new_certs_dir = $dir/signedcerts private_key = $dir/private/cakey.pem serial = $dir/serial # # # Default expiration and encryption policies for certificates. # default_crl_days = 365 default_days = 1825 default_md = sha1 # policy = local_ca_policy x509_extensions = local_ca_extensions # # # Copy extensions specified in the certificate request # copy_extensions = copy # # # Default policy to use when generating server certificates. The following # fields must be defined in the server certificate. # [ local_ca_policy ] commonName = supplied stateOrProvinceName = supplied countryName = supplied emailAddress = supplied organizationName = supplied organizationalUnitName = supplied # # # x509 extensions to use when generating server certificates. # [ local_ca_extensions ] basicConstraints = CA:false # # # The default root certificate generation policy. # [ req ] default_bits = 2048 default_keyfile = /home/<username>/myCA/private/cakey.pem default_md = sha1 # prompt = no distinguished_name = root_ca_distinguished_name x509_extensions = root_ca_extensions # # # Root Certificate Authority distinguished name. Change these fields to match # your local environment! # [ root_ca_distinguished_name ] commonName = MyOwn Root Certificate Authority stateOrProvinceName = NC countryName = US emailAddress = root@tradeshowhell.com organizationName = Trade Show Hell organizationalUnitName = IT Department # [ root_ca_extensions ] basicConstraints = CA:true
PENTING:
- Edit /home/<username>/ di bawah [ local_ca ] and [ req ] sesuai dengan username anda.
- Ubah commonName, stateOrProvinceName countryName dll di bawah [ root_ca_distinguished_name ] sesuai dengan kondisi anda.
- Untuk lebih jelasnya, baca2
man config
- Setelah selesai simpan di ~/myCA/caconfig.cnf.
Untuk mulai membuat Certificate Authority Root Certificate dan Key, lakukan ini pertama kali:
export OPENSSL_CONF=~/myCA/caconfig.cnf
Buat CA, dengan perintah
openssl req -x509 -newkey rsa:2048 -out cacert.pem -outform PEM -days 1825
You should be prompted for a passphrase, and see output similar to this:
Generating a 2048 bit RSA private key ............................................................................................+++ ...........+++ writing new private key to '/home/onno/myCA/private/cakey.pem' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: -----
Jalan sampai lupa pass phrase yang digunakan! Kita akan membutuhkannya untuk men-generate dan sign server / client certificate!
Proses di atas akan membuat self-signed certificate menggunakan PEM format dan RSA public/private key encryption. Certificate akan valid untuk 1825 hari. Lokasi file yang dihasilkan adalah sebagai berikut,
~/myCA/cacert.pem : CA public certificate ~/myCA/private/cakey.pem : CA private key
Optional Step
Buang semua certificate dan hanya simpan bagian -CERTIFICATE- untuk membuat crt
openssl x509 -in cacert.pem -out cacert.crt
Membuat Self-Signed Server Certificate
Setelah anda memiliki Certificate Authority yang dikonfigurasi, anda dapat menggunakannya untuk menandatangani sertifikat yang ditandatangani sendiri. Sebelum memulai langkah-langkah di bawah ini, anda mungkin ingin mengenkripsi kunci privat sertifikat dengan frasa sandi. Keuntungan mengenkripsi kunci dengan passphrase termasuk perlindungan sertifikat jika dicuri.
Sertifikat tidak dapat digunakan dengan aplikasi berkemampuan SSL tanpa memasukkan frasa sandi setiap kali aplikasi SSL diaktifkan. Kondisi ini, sementara yang paling aman, dapat menimbulkan masalah: Jika server harus dijalankan secara unattended seperti saat komputer restart, maka tidak ada yang akan tersedia untuk memasukkan frasa sandi, dan selanjutnya server tidak akan memulai . Salah satu cara untuk menghilangkan kondisi ini melibatkan trade-off dalam keamanan: Kunci dapat didekripsi, untuk menghapus kebutuhan passphrase; Dengan demikian, aplikasi yang mengaktifkan SSL akan dimulai secara otomatis, tanpa perlu memasukkan frasa sandi.
Untuk benar-benar menghasilkan sertifikat yang ditandatangani sendiri untuk digunakan dengan aplikasi SSL, ikuti proses ini:
Buat server configuration file, dengan mengedit
vi ~/myCA/exampleserver.cnf nano ~/myCA/exampleserver.cnf
Tambahkan content berikut,
# # exampleserver.cnf # [ req ] prompt = no distinguished_name = server_distinguished_name req_extensions = v3_req [ server_distinguished_name ] commonName = tradeshowhell.com stateOrProvinceName = NC countryName = US emailAddress = root@tradeshowhell.com organizationName = My Organization Name organizationalUnitName = Subunit of My Large Organization [ v3_req ] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment subjectAltName = @alt_names [ alt_names ] DNS.0 = tradeshowhell.com DNS.1 = alt.tradeshowhell.com
Pastikan ubah nilai yang ada di bagian server_distinguished_name terutama commonName.
Nilai commonName harus persis sama dengan hostname, atau CNAME mesin yang akan di beri key.
Jika commonName tidak cocok dengan hostname yang dimaksud, maka error host / certificate mismatch akan muncul di aplikasi client saat client berusaha akses ke server.
Setelah file di edit, simpan di ~/myCA/exampleserver.cnf. Buat server certificate, dan key dengan perintah berikut,
export OPENSSL_CONF=~/myCA/exampleserver.cnf
Perhatikan nilai OPENSSL_CONF di ubah ke ~/myCA/exampleserver.cnf. Buat certificate, dan key:
openssl req -newkey rsa:1024 -keyout tempkey.pem -keyform PEM -out tempreq.pem -outform PEM
You should be prompted for a passphrase, and see output similar to this:
Generating a 1024 bit RSA private key ....................................................++++++ ...............................++++++ writing new private key to 'tempkey.pem' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: -----
Jangan sampai lupa passphrase!
Selanjutnya, convert temporary private key ke unencrypted key menggunakan perintah berikut,
openssl rsa < tempkey.pem > server_key.pem
Anda akan ditanya passphrase seperti yang digunakan di atas,
Enter pass phrase: writing RSA key
Jika anda ingin agar key tetap di enkripsi dengan passphrase, silahkan rename temporary key menggunakan perintah berikut,
mv tempkey.pem server_key.pem
PERHATIAN: Jika kita menggunakan server key yang di enkripsi dengan password, password harus di harus dimasukan setiap kali server yang menggunakan key yang terenkripsi ini di jalankan. Ini berarti aplikasi server tidak akan jalan kecuali seseorang, atau sesuatu / ada script yang memasukan password dari key tersebut.
Selanjutnya, kita perlu menanda tangan server certificate dengan Certificate Authority (CA) key menggunakan perintah berikut:
export OPENSSL_CONF=~/myCA/caconfig.cnf
Kita mengubah konfigurasi agar kembali ke ~/myCA/caconfig.cnf karena kita akan berfungsi sebagai CA. Tanda tangan certificate sebagai berikut,
openssl ca -in tempreq.pem -out server_crt.pem
Anda akan ditanyakan passphrase dari CA key, masukan passphrase tersebut, anda di minta untuk mengkonfirmasi informasi yang ada di exampleserver.cnf, dan terakhir konfirmasi untuk menanda tangani certificate. Outputnya kira-kira sebagai berikut,
Using configuration from /home/onno/myCA/caconfig.cnf Enter pass phrase for /home/onno/myCA/private/cakey.pem: Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows commonName :ASN.1 12:'tradeshowhell.com' stateOrProvinceName :ASN.1 12:'NC' countryName :PRINTABLE:'US' emailAddress :IA5STRING:'root@tradeshowhell.com' organizationName :ASN.1 12:'My Organization Name' organizationalUnitName:ASN.1 12:'Subunit of My Large Organization' Certificate is to be certified until Jun 10 01:03:36 2022 GMT (1825 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated
Remove / buang temporary certificate, dan key menggunakan perintah berikut,
cd ~/myCA/ rm -f tempkey.pem rm -f tempreq.pem
Selamat! Anda sekarang sudah mempunyai self-signed server application certificate, dan private key pasangannya:
server_crt.pem : Server application certificate file server_key.pem : Server application key file
Optional Step untuk Certain Server Application
Beberapa aplikasi server, seperti Courier IMAP mail server application membutuhkan unencrypted private key di tambahkan pada server certificate. Ini dapat dilakukan menggunakan perintah,
cat server_key.pem server_crt.pem > hold.pem mv hold.pem server_crt.pem chmod 400 server_crt.pem
Mengubah X.509 Certificate ke PKCS#12 untuk aplikasi Client
Jika anda bermaksud untuk membuat PKCS#12 certificate dari server Root CA X.509 certificate untuk penggunaan client, anda perlu melakukan proses berikut untuk server certificate dan pasangan kunci tersebut, untuk export sebuah client certificate.
Membuat sebuah file berisi kedua-nya certificate dan key dengan perintah berikut,
openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mycert.pem -out mycert.pem
Kemudian, konversikan file kombinasi certificate / key ke PKCS#12 certificate menggunakan perintah,
openssl pkcs12 -export -out mycert.pfx -in mycert.pem -name "Certificate for Whatever"
Anda akan ditanyakan Export password, yang bisa anda isi, atau biarkan kosong.
File mycert.pfx yang dihasilkan sekarang dapat diimpor ke aplikasi seperti Web Browsers, dan klien E-Mail. Karena sertifikat ini mewakili sertifikat Root CA dari server anda, semua sertifikat tingkat server berikutnya yang ditandatangani oleh sertifikat CA juga akan diterima secara otomatis oleh aplikasi klien yang menginstal sertifikat PKCS # 12 ini.
Generating Certificate for Signing by Recognized CA
Untuk menjalankan server produksi yang akan terlibat dalam aktivitas komersial, seperti "e-commerce", diperlukan sertifikat, dan ditandatangani oleh Otoritas Sertifikat (CA) yang diakui seperti VeriSign. Proses untuk menghasilkan permintaan sertifikat, dan mendapatkan sertifikat yang ditandatangani oleh CA yang dikenali bisa menjadi sulit. Anda harus menyelesaikan semua dokumen "yang diperlukan" sebelum membuat permintaan sertifikat, dan memastikan semua informasi yang dibutuhkan akurat.
Dengan asumsi anda tidak menginginkan kunci yang di enkripsi dengan password, masukkan perintah berikut untuk membuat kunci pribadi, dan permintaan sertifikat:
openssl req -new -newkey rsa:1024 -nodes -keyout mykey.pem -out myreq.pem
Jika anda sudah memiliki kunci yang ingin anda gunakan, gunakan perintah berikut ini:
openssl req -new -key mykey.pem -out myreq.pem
Anda mungkin ingin memverifikasi tanda tangan, dan informasi yang terdapat dalam permintaan sertifikat. Verifikasi tanda tangan dengan perintah ini:
openssl req -in myreq.pem -noout -verify -key mykey.pem
Dan verifikasi informasi dengan perintah ini:
openssl req -in myreq.pem -noout -text
Langkah selanjutnya biasanya melibatkan menyisipkan konten file permintaan sertifikat ke dalam formulir pendaftaran CA, dan menunggu sertifikat. Selain itu, anda harus melindungi file kunci, karena akan diminta untuk menggunakan sertifikat yang anda terima dari CA.
Using PKCS#12 Certificates in Client Applications
Bagian panduan ini menjelaskan penggunaan sertifikat PKCS # 12 untuk koneksi SSL dari perspektif klien, dan menunjukkan proses mengimpor sertifikat ke aplikasi Web Browser Firefox, dan beberapa klien E-Mail yang lebih populer.
Pengimporan root certificate ke aplikasi memungkinkan koneksi terenkripsi SSL yang terpercaya ke server darimana sertifikat itu datang, bebas dari pesan yang mengganggu tentang sertifikat yang ditandatangani sendiri, dan seterusnya.
Importing a Certificate into Mozilla Firefox
Import certificate PKCS#12 ke Mozilla Firefox Web Browser sangat sederhana
- From within Firefox, click Edit > Preferences
- Click the Advanced icon
- Click the View Certificates button
- Click the Import button
- Browse to the location of the certificate file, which is typically a .pfx file type
- Highlight the certificate file, and click the Open button
You may be prompted to enter Firefox's Master Password at this point, or to set an initial Master Password. Enter the current, or net password as required, confirm it, and click OK
You will then be prompted to enter the certificate's Export password. If there is no such password attached to the certificate, simply click OK, otherwise enter the password, and click OK A message will appear advising that Firefox has "Successfully restored your security certificate(s) and private key(s)"
Click OK You have successfully imported the server's client PKCS#12 certificate into Firefox
Importing a Certificate into Evolution
Import certificate PKCS#12 ke Evolution E-Mail client sangat sederhana
- From within Evolution, click Edit > Preferences
- Click the Certificates icon
- Click the Import button
- Browse to the location of the certificate file, which is typically a .pfx file type
- Highlight the certificate file, and click the Open button
You may be prompted to enter Evolution's certificate database password at this point, or to set an initial certificate database password. Enter the current, or new password as required, confirm it, and click OK
You will then be prompted to enter the PKCS12 File Password. If there is no such password attached to the certificate, simply click OK, otherwise enter the password, and click OK
You should see the certificate, and its details appear in the Your Certificates section of the Evolution Settings window
Click the Close button You have successfully imported the server's client PKCS#12 certificate into Evolution
Importing a Certificate into Mozilla Thunderbird
Import certificate PKCS#12 ke Mozilla Thunderbird E-Mail client sangat sederhana:
- From within Thunderbird, click Edit > Preferences
- Click the Advanced icon
- Click the Certificates entry in the right pane
- Click the Manage Certificates button
- Click the Import button
- Browse to the location of the certificate file, which is typically a .pfx file type
- Highlight the certificate file, and click the Open button
You may be prompted to enter Thunderbird's Master Password at this point, or to set an initial Master Password. Enter the current, or new password as required, confirm it, and click OK
You will then be prompted to enter the certificate's Export password. If there is no such password attached to the certificate, simply click OK, otherwise enter the password, and click OK A message will appear advising that Thunderbird has "Successfully restored your security certificate(s) and private key(s)"
Click OK You have successfully imported the server's client PKCS#12 certificate into Thunderbird
Import Certificate ke System-Wide Certificate Authority Database
Anda dapat mengimpor Sertifikat CA ke dalam database seluruh sistem otoritas sertifikat yang terpercaya. Aplikasi yang menggunakan database ini secara otomatis akan mempercayai sertifikat yang tersimpan di sini.
1. Copy certificate anda ke system certificate directory. Di CLI, ketik,
$ sudo cp mycert.pem /usr/share/ca-certificates/mycert.crt
2. Edit konfigurasi ca-certificates /etc/ca-certificates.conf. Tambahkan nama file yang anda copy ke /usr/share/ca-certificates ke daftar paling atas, sesudah tanda '#' terakkhir, contoh,
# This file lists certificates that you wish to use or to ignore to be # installed in /etc/ssl/certs. # update-ca-certificates(8) will update /etc/ssl/certs by reading this file. # # This is autogenerated by dpkg-reconfigure ca-certificates. # certificates shoule be installed under /usr/share/ca-certificates # and files with extension '.crt' is recognized as available certs. # # line begins with # is comment. # line begins with ! is certificate filename to be deselected. # mycert.crt brasil.gov.br/brasil.gov.br.crt cacert.org/cacert.org.crt mozilla/ABAecom_=sub.__Am._Bankers_Assn.=_Root_CA.crt [... many additional certificates omitted ...]
Dari pada secara manual mengedit file tersebut, anda dapat menjalankan,
sudo dpkg-reconfigure ca-certificates
3. Update database CA certificates dengan cara mengetik,
$ sudo update-ca-certificates
4. Anda telah berhasil mengimport your certificate anda ke system CA certificates database.
Konfigurasi Apache untuk SSL Support
Silahkan baca2
Resources
Dapat di ketik di CLI
- man config - System manual page for the OpenSSL library configuration files
- man gendsa - System manual page for the gendsa DSA private key generator
- man genrsa - System manual page for the genrsa RSA private key generator
- man openssl - System manual page for the openssl command-line tool
- man rand - System manual page for the rand pseudo-random byte generator utility
- man x509 - System manual page for the x509 certificate display and signing utility