OpenSSL: Membuat RootCA di Ubuntu
sumber: https://networklessons.com/uncategorized/openssl-certification-authority-ca-ubuntu-server/
Overview
OpenSSL adalah perpustakaan open-source gratis yang dapat Anda gunakan untuk sertifikat digital. Salah satu hal yang dapat Anda lakukan adalah membangun CA Anda sendiri (Certificate Authority).
Selain situs web dan HTTPS, ada beberapa aplikasi / layanan lain yang bisa menggunakan sertifikat digital. Sebagai contoh:
- VPNs: di samping menggunakan kunci pra-berbagi anda dapat menggunakan sertifikat digital untuk otentikasi.
- Wireless: WPA 2 enterprise menggunakan sertifikat digital untuk otentikasi klien dan / atau otentikasi server menggunakan PEAP atau EAP-TLS.
Daripada membayar perusahaan seperti Verisign untuk semua sertifikat digital Anda. Ini bisa berguna untuk membangun CA Anda sendiri untuk beberapa aplikasi anda. Dalam pelajaran ini, Anda akan belajar bagaimana membuat CA anda sendiri.
Prerequisites
Sebelum mengkonfigurasi OpenSSL, kita perlu mengkonfigurasi secara benar,
- hostname
- FQDN secara
- waktu (time)
- tanggal (date)
- timezone adalah benar.
hostname & FQDN
Cek hostname
hostname
Contoh Output:
refserver
Cek FQDN:
hostname -f
Contoh Output yang perlu di benarkan
refserver
Perbaiki FQDN
vi /etc/hosts
Tambahkan pada kalimat, misalnya,
192.168.0.100 refserver
Menjadi
192.168.0.100 refserver refserver.onnocenter.or.id
Restart mesin
shutdown -r now
Verifikasi hostname & FQDN lagi
hostname
Output:
refserver
Cek FQDN
hostname -f
Output:
refserver.onnocenter.or.id
time
Instalasi
sudo locale-gen id_ID.UTF-8 apt install ntpdate
Sinkronkan waktu
ntpdate id.pool.ntp.org
Sinkronkan waktu secara periodik
apt install ntp
Secara default Ubuntu server akan menggunakan NTP server pool berikut
cat /etc/ntp.conf | grep ubuntu
pool 0.ubuntu.pool.ntp.org iburst pool 1.ubuntu.pool.ntp.org iburst pool 2.ubuntu.pool.ntp.org iburst pool 3.ubuntu.pool.ntp.org iburst pool ntp.ubuntu.com
Kita dapat memverifikasi server mana yang saat ini digunakan menggunakan perintah,
ntpq -p
remote refid st t when poll reach delay offset jitter ============================================================================== 0.ubuntu.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000 1.ubuntu.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000 2.ubuntu.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000 3.ubuntu.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000 ntp.ubuntu.com .POOL. 16 p - 64 0 0.000 0.000 0.000 #ntp.uii.net.id 103.1.106.69 2 u 21 64 3 13.424 -0.628 1.944 #mirror2.wowrack 118.143.17.82 2 u 18 64 3 3.371 -33.589 1.009 +182.253.66.202 103.31.225.225 3 u 17 64 3 17.023 -3.330 1.233 -resolv1.axarva. 203.160.128.66 2 u 18 64 3 3.756 -4.204 1.294 +182.253.66.203 203.89.31.13 3 u 13 64 3 18.064 -4.059 1.210 -119.82.243.189 118.143.17.82 2 u 18 64 3 16.169 -2.724 1.366 +203.114.224.31 203.114.224.252 3 u 17 64 3 16.154 -3.313 0.817 #203.114.225.252 203.160.128.66 2 u 16 64 3 15.646 -4.964 1.326 -ns5.datautama.n 203.160.128.66 2 u 16 64 3 16.146 -2.133 1.266 -202.65.114.202 203.160.128.66 2 u 14 64 3 11.969 -0.768 0.573 -45.114.118.90 103.20.91.62 3 u 14 64 3 4.283 -3.204 1.246 *ns1.matrixgloba 203.123.48.219 2 u 15 64 3 3.266 -2.688 0.788 +suro.ubaya.ac.i 203.160.128.66 2 u 14 64 3 17.985 -4.148 1.142 #golem.canonical 17.253.34.125 2 u 18 64 3 272.523 26.441 1.351
Konfigurasi OpenSSL
Edit konfigurasi OpenSSL,
vi /usr/lib/ssl/openssl.cnf
Carilah bagian berikut ini:
[ CA_default ] dir = ./demoCA
Ubah, menjadi
[ CA_default ] dir = /root/ca
Folder "/root/ca" menjadi tempat menyimpan kunci pribadi dan sertifikat dari CA yang kita buat.
Bagian [policy_match]
[ policy_match ] countryName = match stateOrProvinceName = match organizationName = match organizationalUnitName = optional commonName = supplied emailAddress = optional
Untuk lingkungan percobaan isa dibuat lebih relax, menjadi misalnya,
[ policy_match ] countryName = match stateOrProvinceName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional
Hanya nama negara saja yang harus cocok
Root CA
Membuat private key & root CA certificate. Ini adalah identitas CA.
Lakukan,
sudo su mkdir -p /root/ca cd /root/ca mkdir -p newcerts certs crl private requests touch index.txt echo '1234' > serial
CA pertama yang akan di tanda tangan adalah no '1234'.
Buat private key
cd /root/ca openssl genrsa -aes256 -out private/cakey.pem 4096
Output:
Generating RSA private key, 4096 bit long modulus ..++ ..................++ e is 65537 (0x10001) Enter pass phrase for private/cakey.pem: Verifying - Enter pass phrase for private/cakey.pem:
Masukan password & INGAT! Jangan sampai LUPA! untuk belajar, pakai password 123456 saja.
Private key adalah 4096 bit dengan enkripsi AES 256 bit, di simpan dalam folder /root/ca/private dengan nama "cakey.pem". Jangan sampai hilang, jangan sampai pindah tangan. Simpan file ini dengan aman, selamanya!
Buat CA Certificate
openssl req -new -x509 -key /root/ca/private/cakey.pem -out cacert.pem -days 3650 -set_serial 0
Output:
Enter pass phrase for /root/ca/private/cakey.pem: 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) [AU]:ID State or Province Name (full name) [Some-State]:DKI Locality Name (eg, city) []:Jakarta Organization Name (eg, company) [Internet Widgits Pty Ltd]:XecureIT Organizational Unit Name (eg, section) []:RND Common Name (e.g. server FQDN or YOUR name) []:refserver.onnocenter.or.id Email Address []:onno@indo.net.id
Root CA Certificate akan di simpan di /root/ca dengan nama "cacert.pem" dan berlaku selama 10 tahun.
Root CA Certificate di sebarkan di Internet, untuk di Import ke Preference Broweser (Firefox dll), agar browser mempercayai certificate yang dibuat oleh RootCA kita.
Membuat Certificate
Root CA kita sekarang sudah bisa aktif dan bisa operasional.
Skenario NORMAL:
- Semua situs web / perangkat yang membutuhkan certificate (untuk https dll), bisa membuat CSR (Certificate Signing Request).
- CSR ini dibuat oleh perangkat, di tanda tangan menggunakan private key perangkat.
- CA akan menanda tangani CSR, dan membuat certificate digital untuk web / perangkat tersebut.
Alternatif lain (untuk ujicoba saja),
- CA dapat mengatas namakan perangkat / web tersebut.
- CA membuatkan private key untuk perangkat / web tersebut.
- CA membuatkan CSR untuk perangkat / web tersebut.
- CA akan menanda tangai CSR untuk perangkat tersebut.
- CA akan memberikan private key dan certificate digital ke perangkat.
Untuk ujicoba bisa menggunakan alternatif ke dua yang tidak pusing. Lakukan berikut ini,
Membuat private key testserver
cd /root/ca/requests/ openssl genrsa -aes256 -out testserverkey.pem 2048
Output:
Generating RSA private key, 2048 bit long modulus .+++ ..................................................+++ e is 65537 (0x10001) Enter pass phrase for testserverkey.pem: Verifying - Enter pass phrase for testserverkey.pem:
Untuk belajar, password 123456 saja. Private key-nya adalah 2048 bit dan menggunakan enkripsi AES 256 bit. File "testserverkey.pem"
Membuat CSR testserver
cd /root/ca/requests openssl req -new -key testserverkey.pem -out testserver.csr
Output:
Enter pass phrase for testserverkey.pem: 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) [AU]:ID State or Province Name (full name) [Some-State]:JABAR Locality Name (eg, city) []:Bandung Organization Name (eg, company) [Internet Widgits Pty Ltd]:OnnoCenter Organizational Unit Name (eg, section) []:RND Common Name (e.g. server FQDN or YOUR name) []:korban.com Email Address []:onno@korban.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:123456 An optional company name []:korban.com
Tanda tangani CSR request tersebut,
cd /root/ca/requests openssl ca -in testserver.csr -out testserver.pem
Output:
Using configuration from /usr/lib/ssl/openssl.cnf Enter pass phrase for /root/ca/private/cakey.pem: Check that the request matches the signature Signature ok Certificate Details: Serial Number: 4660 (0x1234) Validity Not Before: Jun 15 23:30:08 2017 GMT Not After : Jun 15 23:30:08 2018 GMT Subject: countryName = ID stateOrProvinceName = JABAR organizationName = OnnoCenter organizationalUnitName = RND commonName = korban.com emailAddress = onno@korban.com X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: A5:A9:35:D3:C5:0E:DF:9B:2A:3B:91:B4:0C:73:AD:49:AF:DB:26:66 X509v3 Authority Key Identifier: keyid:8F:31:0F:72:8D:92:5B:6B:21:17:2A:CD:A2:15:1A:A0:D4:CB:E5:65 Certificate is to be certified until Jun 15 23:30:08 2018 GMT (365 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
Selesai, sekarang pindahkan file,
cd /root/ca/request rm testserver.csr mv testserverkey.pem /root/ca/private/ mv testserver.pem /root/ca/certs/
Certificate "testserver.pem" dan private key "testserverkey.pem" bsa di instalasi di web server anda.
Security
Melindungi CA anda penting. Siapa pun yang memiliki akses ke kunci pribadi CA akan dapat membuat sertifikat yang bisa dipercaya.
Ubah permission,
# chmod -R 600 /root/ca
Dalam contoh ini, kami menggunakan root CA untuk menandatangani sertifikat server web imajiner secara langsung. Ini bagus untuk lingkungan laboratorium tapi untuk jaringan produksi, anda harus menggunakan CA perantara.
Intermediate CA, server lain yang menanda tangan certificate a/n root CA.
Root CA menandatangani sertifikat CA perantara. Anda kemudian dapat mengambil root CA offline yang mengurangi kemungkinan ada orang yang mendapatkan private key root anda.
Verifikasi
Kami membuat beberapa private key dan menghasilkan beberapa sertifikat. Mari kita lihat lebih dekat beberapa pekerjaan kita.
Ini adalah file index.txt:
cat /root/ca/index.txt
Output:
V 180615233008Z 1234 unknown /C=ID/ST=JABAR/O=OnnoCenter/OU=RND/CN=korban.com/emailAddress=onno@korban.com
Cek serial,
cat /root/ca/serial
Output:
1235
Kalau mau iseng, bisa melihat isi file PEM yang dibuat OpenSSL :) ...
Di Sisi Server Penerima Certificate
Kirim 2 file pem di atas, copy ke
/etc/apache2/ssl/testserverkey.pem (private key) /etc/apache2/ssl/testserver.pem (server certificate)
Edit
vi /etc/apache2/sites-available/default-ssl.conf
Ubah
<IfModule mod_ssl.c> <VirtualHost _default_:443> ServerAdmin onno@indo.net.id ServerName korban.com:443 ServerAlias www.korban.com:443 DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/apache2/ssl/testserver.pem SSLCertificateKeyFile /etc/apache2/ssl/testserverkey.pem <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown </VirtualHost> </IfModule>
Aktifkan & Restart Apache
sudo a2enmod ssl sudo service apache2 restart
Di sisi client / user yang akan mengakses
Perlu update security Firefox (browser yang digunakan)
Preferences > Advanced > Certificates > View Certificates > Import
Upload file Root CA Certificate
cacert.pem
Referensi