Difference between revisions of "OpenSSL: Membuat RootCA di Ubuntu"

From OnnoWiki
Jump to navigation Jump to search
 
(26 intermediate revisions by the same user not shown)
Line 12: Line 12:
 
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.
 
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.
  
==Configuration==
+
==Prerequisites==
  
In my examples, I will use a Ubuntu server, the configuration of openSSL will be similar though on other distributions like CentOS.
+
Sebelum mengkonfigurasi OpenSSL, kita perlu mengkonfigurasi secara benar,
  
 +
* hostname
 +
* FQDN secara
 +
* waktu (time)
 +
* tanggal (date)
 +
* timezone adalah benar.
  
==Prerequisites==
+
===hostname & FQDN===
 +
 
 +
Cek hostname
  
Sebelum mengkonfigurasi OpenSSL, kita akan mengkonfigurasi hostname/FQDN secara benar, dan memastikan waktu (time), tanggal (date) dan timezone adalah benar.
+
hostname
  
Melihat hostname
+
Contoh Output:
  
  vmware@ca:~$ hostname
+
  refserver
ca
 
  
 
Cek FQDN:
 
Cek FQDN:
  
  vmware@ca:~$ hostname -f
+
  hostname -f
ca
+
 
 +
Contoh Output yang perlu di benarkan
  
Ubah FQDN; anda perlu mengedit file berikut:
+
refserver
  
$ sudo vi /etc/hosts
+
Perbaiki FQDN
  
Ubah kalimat
+
vi /etc/hosts
  
  127.0.1.1      ca
+
Tambahkan pada kalimat, misalnya,
 +
 
 +
  192.168.0.100  refserver
  
 
Menjadi
 
Menjadi
  
  127.0.1.1      ca.networklessons.local ca
+
  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:
  
Verifikasi hostname dan FQDN lagi
+
refserver.onnocenter.or.id
  
vmware@ca:~$ hostname
+
===time===
ca
 
  
vmware@ca:~$ hostname -f
+
Instalasi
ca.networklessons.local
 
  
hostname dan FQDN sekarang harusnya ok.
+
sudo locale-gen id_ID.UTF-8
 +
apt install ntpdate
  
Kita dapat mengkonfigurasi time/date secara manual, akan tetap akan lebih baik jika menggunakan NTP. Kita dapat mensinkronkan waktu menggunakan perintah berikut
+
Sinkronkan waktu
  
  sudo apt install ntpdate
+
  ntpdate id.pool.ntp.org
sudo ntpdate pool.ntp.org
 
11 Jun 09:33:31 ntpdate[12902]: adjust time server 202.65.114.202 offset 0.002268 sec
 
  
Akan lebih baik kalau kita bisa mensinkronkan secara periodik. Install NTP,
+
Sinkronkan waktu secara periodik
  
  $ sudo apt-get install ntp
+
  apt install ntp
  
 
Secara default Ubuntu server akan menggunakan NTP server pool berikut
 
Secara default Ubuntu server akan menggunakan NTP server pool berikut
  
  $ cat /etc/ntp.conf | grep ubuntu
+
  cat /etc/ntp.conf | grep ubuntu
  
 
  pool 0.ubuntu.pool.ntp.org iburst
 
  pool 0.ubuntu.pool.ntp.org iburst
Line 75: Line 99:
 
Kita dapat memverifikasi server mana yang saat ini digunakan menggunakan perintah,
 
Kita dapat memverifikasi server mana yang saat ini digunakan menggunakan perintah,
  
  $ ntpq -p
+
  ntpq -p
  
 
       remote          refid      st t when poll reach  delay  offset  jitter
 
       remote          refid      st t when poll reach  delay  offset  jitter
Line 84: Line 108:
 
   3.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.ubuntu.com  .POOL.          16 p    -  64    0    0.000    0.000  0.000
  -mirror2.wowrack 203.160.128.66  2 u  53   64   7   3.331   -1.427   1.697
+
  #ntp.uii.net.id  103.1.106.69    2 u  21   64    3   13.424   -0.628   1.944
  -resolv1.axarva. 203.160.128.66  2 u  55   64    7   3.598  -2.668   1.771
+
  #mirror2.wowrack 118.143.17.82    2 u  18   64    3   3.371  -33.589   1.009
  -ntp.nap.net.id 203.160.128.59   3 u  59   64   7   3.247    2.212   1.688
+
  +182.253.66.202 103.31.225.225   3 u  17   64    3   17.023  -3.330   1.233
  #180.250.246.110 118.189.138.5    2 u  53   64    7   6.753  -10.279   2.178
+
  -resolv1.axarva. 203.160.128.66  2 u  18   64    3   3.756  -4.204   1.294
  -182.253.66.205 103.31.224.224  3 u  58   64    7   16.226   -1.938   1.456
+
  +182.253.66.203 203.89.31.13    3 u  13   64    3   18.064   -4.059   1.210
  #ntp.uii.net.id 103.1.106.69    2 u  55   64    7   13.195    0.281   1.953
+
  -119.82.243.189 118.143.17.82    2 u  18   64    3   16.169  -2.724   1.366
  -ns2.jkt.datauta 203.160.128.66  2 55   64   7   3.406   -3.792   2.003
+
  +203.114.224.31  203.114.224.252  3 17   64    3   16.154   -3.313   0.817
  +ntp.lipi.go.id  203.160.128.66  2 u  52   64    7   10.542   -0.725   1.642
+
  #203.114.225.252 203.160.128.66  2 u  16   64    3   15.646   -4.964   1.326
  #mail.lumajangka 103.5.51.210    3 56   64    7   16.442   -6.979   1.647
+
  -ns5.datautama.n 203.160.128.66  2 16   64    3   16.146   -2.133   1.266
  -182.253.66.203 203.89.31.13    3 59   64    7   19.566   -3.122   2.984
+
  -202.65.114.202 203.160.128.66  2 14   64    3   11.969   -0.768   0.573
  *203.160.128.132 203.160.128.66  2 59   64    7   9.063   -0.988   1.615
+
  -45.114.118.90  103.20.91.62    3 14   64    3   4.283   -3.204   1.246
  -suro.ubaya.ac.i 203.160.128.66   2 u  56   64    7  15.362   -3.050   2.038
+
  *ns1.matrixgloba 203.123.48.219   2 u  15   64    3    3.266   -2.688   0.788
  +203.114.224.31  203.114.224.252  3 60   64    7   15.204   -3.430   2.117
+
  +suro.ubaya.ac.i 203.160.128.66  2 14   64    3   17.985   -4.148   1.142
  #alphyn.canonica 132.246.11.231  2 u  60   64    7 267.479    5.842   1.658
+
  #golem.canonical 17.253.34.125    2 u  18   64    3 272.523  26.441   1.351
  
Server kita sudah di konfigurasi dengan baik.
 
  
 
==Konfigurasi OpenSSL==
 
==Konfigurasi OpenSSL==
  
OpenSSL menggunakan file konfigurasi yang mudah dibaca. Ada beberapa hal yang akan kita ubah di dalamnya:
+
Edit konfigurasi OpenSSL,
  
 
  vi /usr/lib/ssl/openssl.cnf
 
  vi /usr/lib/ssl/openssl.cnf
Line 110: Line 133:
  
 
  [ CA_default ]
 
  [ CA_default ]
 
 
  dir = ./demoCA
 
  dir = ./demoCA
  
Dan ubahlah, jadi seperti berikut ini:
+
Ubah, menjadi
  
  [ CA_default ]                                                                                
+
  [ CA_default ]                                                                                
                                                                                               
 
 
  dir            = /root/ca
 
  dir            = /root/ca
  
Folder "/ root / ca" adalah tempat kami menyimpan kunci pribadi dan sertifikat kami.
+
Folder "/root/ca" menjadi tempat menyimpan kunci pribadi dan sertifikat dari CA yang kita buat.
  
Anda mungkin juga ingin melihat kebijakan default:
+
Bagian [policy_match]
  
 
  [ policy_match ]
 
  [ policy_match ]
  countryName = match
+
  countryName             = match
  stateOrProvinceName = match
+
  stateOrProvinceName     = match
  organizationName = match
+
  organizationName       = match
  organizationalUnitName = optional
+
  organizationalUnitName = optional
  commonName = supplied
+
  commonName             = supplied
  emailAddress = optional
+
  emailAddress           = optional
  
Beberapa bidang seperti negara, negara bagian / provinsi, dan organisasi harus sesuai. Jika anda membangun CA anda untuk lingkungan laboratorium seperti saya, maka anda mungkin ingin mengubah beberapa nilai berikut:
+
Untuk lingkungan percobaan isa dibuat lebih relax, menjadi misalnya,
  
 
  [ policy_match ]
 
  [ policy_match ]
 
  countryName            = match
 
  countryName            = match
  stateOrProvinceName    = optional
+
  stateOrProvinceName    = '''optional'''
  organizationName        = optional
+
  organizationName        = '''optional'''
 
  organizationalUnitName  = optional
 
  organizationalUnitName  = optional
 
  commonName              = supplied
 
  commonName              = supplied
 
  emailAddress            = optional
 
  emailAddress            = optional
  
Saya telah mengubahnya sehingga hanya nama negara yang harus dicocokkan.
+
Hanya nama negara saja yang harus cocok
  
 
==Root CA==
 
==Root CA==
  
Hal pertama yang harus kita lakukan adalah membuat root CA. Ini terdiri dari kunci pribadi dan root certificate. Kedua item ini adalah "identitas" CA kita.
+
Membuat private key & root CA certificate. Ini adalah identitas CA.
 
 
Mari beralih ke pengguna root:
 
 
 
$ sudo su
 
 
 
Kami akan membuat folder baru yang menyimpan semua kunci dan sertifikat:
 
 
 
# mkdir /root/ca
 
 
 
Di folder baru ini kita harus membuat beberapa sub-folder tambahan:
 
 
 
# cd /root/ca
 
# mkdir newcerts certs crl private requests
 
  
Kami juga membutuhkan dua file. Yang pertama disebut "index.txt". Di sinilah OpenSSL melacak semua sertifikat yang ditandatangani:
+
Lakukan,
  
  # touch index.txt
+
  sudo su
 +
mkdir -p /root/ca
 +
cd /root/ca
 +
mkdir -p newcerts certs crl private requests
 +
touch index.txt
 +
echo '1234' > serial
  
File kedua disebut "serial". Setiap sertifikat yang ditandatangani akan memiliki nomor seri. Saya akan mulai dengan nomor 1234:
+
CA pertama yang akan di tanda tangan adalah no '1234'.
  
# echo '1234' > serial
+
===Buat private key===
  
Semua folder dan file ada di tempat. Mari buat private key root:
+
cd /root/ca
 +
openssl genrsa -aes256 -out private/cakey.pem 4096
  
# openssl genrsa -aes256 -out private/cakey.pem 4096
+
Output:
  
 
  Generating RSA private key, 4096 bit long modulus
 
  Generating RSA private key, 4096 bit long modulus
Line 179: Line 193:
 
  Verifying - Enter pass phrase for private/cakey.pem:
 
  Verifying - Enter pass phrase for private/cakey.pem:
  
Kunci privat root yang saya hasilkan adalah 4096 bit dan menggunakan enkripsi AES 256 bit. Ini disimpan dalam folder private menggunakan nama file "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!
  
Siapa pun yang memiliki private key root akan dapat membuat sertifikat yang bisa dipercaya. Simpan file ini dengan aman!
+
===Buat CA Certificate===
  
Sekarang kita bisa menggunakan root private key untuk membuat sertifikat root:
+
openssl req -new -x509 -key /root/ca/private/cakey.pem -out cacert.pem -days 3650 -set_serial 0
  
# 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:
 
  Enter pass phrase for /root/ca/private/cakey.pem:
Line 195: Line 211:
 
  If you enter '.', the field will be left blank.
 
  If you enter '.', the field will be left blank.
 
  -----
 
  -----
  Country Name (2 letter code) [AU]:NL
+
  Country Name (2 letter code) [AU]:'''ID'''
  State or Province Name (full name) [Some-State]:North-Brabant
+
  State or Province Name (full name) [Some-State]:'''DKI'''
  Locality Name (eg, city) []:Tilburg
+
  Locality Name (eg, city) []:'''Jakarta'''
  Organization Name (eg, company) [Internet Widgits Pty Ltd]:Networklessons
+
  Organization Name (eg, company) [Internet Widgits Pty Ltd]:'''XecureIT'''
  Organizational Unit Name (eg, section) []:
+
  Organizational Unit Name (eg, section) []:'''RND'''
  Common Name (e.g. server FQDN or YOUR name) []:CA.networklessons.local
+
  Common Name (e.g. server FQDN or YOUR name) []:'''refserver.onnocenter.or.id'''
  Email Address []:admin@networklessons.local
+
  Email Address []:'''onno@indo.net.id'''
  
Sertifikat root akan disimpan sebagai nama file "cacert.pem" dan berlaku selama 10 tahun.
+
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==
 
==Membuat Certificate==
  
Root CA kita sekarang aktif dan berjalan. Biasanya saat anda ingin memasang sertifikat pada perangkat (server web misalnya), maka perangkat akan menghasilkan CSR (Certificate Signing Request). CSR ini dibuat dengan menggunakan private key perangkat.
+
Root CA kita sekarang sudah bisa aktif dan bisa operasional.
  
Di CA kami, kami kemudian dapat menandatangani CSR dan membuat sertifikat digital untuk perangkat tersebut.
+
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.
  
Pilihan lainnya adalah kita bisa melakukan segala hal di CA kita. Kita bisa menghasilkan private key,  CSR dan kemudian menandatangani sertifikat ... semuanya "atas nama" perangkat.
 
  
Itulah yang akan saya lakukan dalam contoh ini; Ini adalah cara yang bagus untuk menguji apakah CA anda bekerja seperti yang diharapkan.
+
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.
  
Saya akan membuat kunci privat, CSR dan sertifikat untuk "server web imajiner".
+
Untuk ujicoba bisa menggunakan alternatif ke dua yang tidak pusing. Lakukan berikut ini,
  
Mari gunakan folder requests untuk ini:
+
Membuat private key testserver
  
  # cd /root/ca/requests/
+
  cd /root/ca/requests/
 +
openssl genrsa -aes256 -out testserverkey.pem 2048
  
Pertama, kita harus menghasilkan private key:
+
Output:
 
 
# openssl genrsa -aes256 -out some_serverkey.pem 2048
 
  
 
  Generating RSA private key, 2048 bit long modulus
 
  Generating RSA private key, 2048 bit long modulus
  ..............................+++
+
  .+++
....+++
+
..................................................+++
 
  e is 65537 (0x10001)
 
  e is 65537 (0x10001)
  Enter pass phrase for some_server.pem:
+
  Enter pass phrase for testserverkey.pem:
  Verifying - Enter pass phrase for some_server.pem:
+
  Verifying - Enter pass phrase for testserverkey.pem:
  
Private key-nya adalah 2048 bit dan menggunakan enkripsi AES 256 bit. Dengan private key, kita bisa membuat CSR:
+
Untuk belajar, password 123456 saja.
 +
Private key-nya adalah 2048 bit dan menggunakan enkripsi AES 256 bit. File "testserverkey.pem"
  
root@ca:~/ca/requests# openssl req -new -key some_serverkey.pem -out some_server.csr
+
Membuat CSR testserver
  
  Enter pass phrase for some_serverkey.pem:
+
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
 
  You are about to be asked to enter information that will be incorporated
 
  into your certificate request.
 
  into your certificate request.
Line 244: Line 274:
 
  If you enter '.', the field will be left blank.
 
  If you enter '.', the field will be left blank.
 
  -----
 
  -----
  Country Name (2 letter code) [AU]:NL
+
  Country Name (2 letter code) [AU]:'''ID'''
  State or Province Name (full name) [Some-State]:North-Brabant
+
  State or Province Name (full name) [Some-State]:'''JABAR'''
  Locality Name (eg, city) []:Tilburg
+
  Locality Name (eg, city) []:'''Bandung'''
  Organization Name (eg, company) [Internet Widgits Pty Ltd]:Networklessons
+
  Organization Name (eg, company) [Internet Widgits Pty Ltd]:'''OnnoCenter'''
  Organizational Unit Name (eg, section) []:
+
  Organizational Unit Name (eg, section) []:'''RND'''
  Common Name (e.g. server FQDN or YOUR name) []:some_server.networklessons.local
+
  Common Name (e.g. server FQDN or YOUR name) []:'''korban.com'''
  Email Address []:admin@networklessons.local
+
  Email Address []:'''onno@korban.com'''
 
   
 
   
 
  Please enter the following 'extra' attributes
 
  Please enter the following 'extra' attributes
 
  to be sent with your certificate request
 
  to be sent with your certificate request
  A challenge password []:
+
  A challenge password []:'''123456'''
  An optional company name []:
+
  An optional company name []:'''korban.com'''
  
Sekarang kita bisa menandatangani CSR yang baru saja kita buat:
 
  
  # openssl ca -in some_server.csr -out some_server.pem
+
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
 
  Using configuration from /usr/lib/ssl/openssl.cnf
Line 268: Line 302:
 
         Serial Number: 4660 (0x1234)
 
         Serial Number: 4660 (0x1234)
 
         Validity
 
         Validity
             Not Before: Apr  1 09:08:59 2016 GMT
+
             Not Before: Jun 15 23:30:08 2017 GMT
             Not After : Apr  1 09:08:59 2017 GMT
+
             Not After : Jun 15 23:30:08 2018 GMT
 
         Subject:
 
         Subject:
             countryName              = NL
+
             countryName              = ID
             stateOrProvinceName      = North-Brabant
+
             stateOrProvinceName      = JABAR
             organizationName          = Networklessons
+
             organizationName          = OnnoCenter
             commonName                = some_server.networklessons.local
+
            organizationalUnitName    = RND
             emailAddress              = admin@networklessons.local
+
             commonName                = korban.com
 +
             emailAddress              = onno@korban.com
 
         X509v3 extensions:
 
         X509v3 extensions:
 
             X509v3 Basic Constraints:  
 
             X509v3 Basic Constraints:  
Line 282: Line 317:
 
                 OpenSSL Generated Certificate
 
                 OpenSSL Generated Certificate
 
             X509v3 Subject Key Identifier:  
 
             X509v3 Subject Key Identifier:  
                 57:A7:7A:41:3E:3F:B3:EE:0D:CF:46:D0:A7:A5:9B:46:92:D1:F0:AD
+
                 A5:A9:35:D3:C5:0E:DF:9B:2A:3B:91:B4:0C:73:AD:49:AF:DB:26:66
 
             X509v3 Authority Key Identifier:  
 
             X509v3 Authority Key Identifier:  
                 keyid:1B:38:B6:9F:82:46:72:5A:04:07:76:C2:DA:A5:5D:EB:95:83:81:30
+
                 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 Apr  1 09:08:59 2017 GMT (365 days)
+
  Certificate is to be certified until Jun 15 23:30:08 2018 GMT (365 days)
 
  Sign the certificate? [y/n]:y
 
  Sign the certificate? [y/n]:y
 
 
 
   
 
   
 
  1 out of 1 certificate requests certified, commit? [y/n]y
 
  1 out of 1 certificate requests certified, commit? [y/n]y
Line 294: Line 328:
 
  Data Base Updated
 
  Data Base Updated
  
Itu saja yang perlu dilakukan. File "some_server.pem" adalah sertifikat digital yang ditandatangani untuk server web kami. Jika anda mau,  anda dapat menghapus CSR, pindahkan kunci pribadi ke folder "private", dan pindahkan sertifikat baru ke folder "certs":
 
  
  # rm some_server.csr
+
Selesai, sekarang pindahkan file,
  # mv some_serverkey.pem /root/ca/private/
+
 
  # mv some_server.pem /root/ca/certs/
+
cd /root/ca/request
 +
  rm testserver.csr
 +
  mv testserverkey.pem /root/ca/private/
 +
  mv testserver.pem /root/ca/certs/
  
Sertifikat "some_server.pem" sekarang dapat diinstal di server web anda.
+
Certificate "testserver.pem" dan private key "testserverkey.pem" bsa di instalasi di web server anda.
  
 
==Security==
 
==Security==
  
Protecting your CA is important. Anyone that has access to the private key of the CA will be able to create trusted certificates.
+
Melindungi CA anda penting. Siapa pun yang memiliki akses ke kunci pribadi CA akan dapat membuat sertifikat yang bisa dipercaya.
  
One of the things you should do is reducing the permissions on the entire /root/ca folder so that only our root user can access it:
+
Ubah permission,
  
 
  # chmod -R 600 /root/ca
 
  # chmod -R 600 /root/ca
  
In this example, we used the root CA to sign the certificate of an imaginary web server directly. This is fine for a lab environment but for a production network, you should use an intermediate 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.
  
==The intermediate CA is another server that signs certificates on behalf of the root CA.==
+
==Intermediate CA, server lain yang menanda tangan certificate a/n root CA.==
  
The root CA signs the certificate of the intermediate CA. You can then take the root CA offline which reduces the chance of anyone getting their hands on your root private key.
+
Root CA menandatangani sertifikat CA perantara. Anda kemudian dapat mengambil root CA offline yang mengurangi kemungkinan ada orang yang mendapatkan private key root anda.
  
==Verification==
+
==Verifikasi==
  
We created some private keys and generated some certificates. Let’s take a closer look at some of our work.
+
Kami membuat beberapa private key dan menghasilkan beberapa sertifikat. Mari kita lihat lebih dekat beberapa pekerjaan kita.
  
Here’s the index.txt file:
+
Ini adalah file index.txt:
  
  # cat /root/ca/index.txt
+
  cat /root/ca/index.txt
V      170401090859Z          1234    unknown /C=NL/ST=North-Brabant/O=Networklessons/CN=some_server.networklessons.local/emailAddress=admin@networklessons.local
 
  
Above you can see the certificate that we created for our web server. It also shows the serial number that I stored in the serial file. The next certificate that we sign will get another number:
+
Output:
  
  # cat /root/ca/serial
+
  V 180615233008Z 1234 unknown /C=ID/ST=JABAR/O=OnnoCenter/OU=RND/CN=korban.com/emailAddress=onno@korban.com
1235
 
  
Let’s take a closer look at the certificates. We can verify them with OpenSSL, but it might be nice to see them on your computer. I’ll use a Windows computer for this.
 
  
Windows doesn’t recognize the .PEM file extension so you might want to rename your certificates to .CRT.
+
Cek serial,
  
Here’s the root certificate:
+
cat /root/ca/serial
  
OpenSSL Root Certificate
+
Output:
  
Above you can see the name of our root CA and the validity (10 years). If we want to trust certificates that are signed by our root CA, then we’ll have to install this certificate. Here’s how:
+
1235
 
 
OpenSSL install root certificate
 
  
Hit the Install Certificate button and you will see this wizard:
+
Kalau mau iseng, bisa melihat isi file PEM yang dibuat OpenSSL :) ...
  
openssl user or machine
+
==Di Sisi Server Penerima Certificate==
  
It’s up to you if you want to install it for your current user or the entire computer. Click Next to continue:
+
Kirim 2 file pem di atas, copy ke
  
openssl trusted root certificate store
+
/etc/apache2/ssl/testserverkey.pem (private key)
 +
/etc/apache2/ssl/testserver.pem (server certificate)
  
Make sure you select the Trusted Root Certification Authorities store and click Next and Finish:
+
Edit
  
openssl finish install root certificate
+
vi /etc/apache2/sites-available/default-ssl.conf
  
Windows will give you one more big security warning, click Yes to continue:
+
Ubah
  
openssl root certificate security warning
+
<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>
  
The root certificate is now installed and trusted. Now open the certificate that we assigned to “some server”:
 
  
openssl server certificate trusted
+
Aktifkan & Restart Apache
  
Above you can see that it was issued by our root CA, it’s valid for one year. When you look at the certification path then you can see that Windows trusts the certificate:
+
sudo a2enmod ssl
 +
sudo service apache2 restart
  
openssl server certification path
+
==Di sisi client / user yang akan mengakses==
  
This is looking good. If a web server would present this certificate to your computer, then it will trust it from now on.
+
Perlu update security Firefox (browser yang digunakan)
  
   
+
  Preferences > Advanced > Certificates > View Certificates > Import
Conclusion
 
  
You have now learned how to build your own CA using OpenSSL and are ready to sign certificates for your servers, routers, firewalls, clients or any other devices that you have.
+
Upload file Root CA Certificate
  
I hope you enjoyed this lesson, if you have any questions feel free to ask!
+
cacert.pem
  
 +
==Referensi==
  
 +
* https://networklessons.com/uncategorized/openssl-certification-authority-ca-ubuntu-server/
  
  
 +
==Pranala Menarik==
  
 
+
* [[OpenSSL: Install EasyRSA Certificate Authority CA]]
 
 
==Referensi==
 
 
 
* https://networklessons.com/uncategorized/openssl-certification-authority-ca-ubuntu-server/
 

Latest revision as of 10:02, 7 September 2022

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


Pranala Menarik