Cara membuat Certificate Authority (CA) pada CentOS 7

Certificate Autority atau CA merupakan sertifikat yang berfungsi untuk menandatangani sertifikat digital yang biasanya diguanakan untuk keperluan SSL web site, mail server, vpn, dll. Untuk membuat sebuah CA kita dapat menggunakan software OpenSSL.

OpenSSL biasanya sudah terinstall dalam sistem operasi linux, kali ini saya akan mencoba membuat CA pada sistem operasi CentOS. Dengan membuat CA kita dapat membuat sertifikat yang bisa digunakan untuk web server HTTPS, mail server dengan TLS, dll. Tugas dari CA adalah menandatangani sertifikat tersebut.

Berikut ini adalah topologi/ilustrasinya :
Terdapat satu server yang memiliki CA, server yang memiliki CA tersebut akan mengeluarkan dan menandatangani sertifikat digital yang kemudian digunakan oleh server lainnya untuk kebutuhan tertentu seperti Web Server (HTTPS), File Server (FTP over TLS), Mail Server, dll.

CA Server

Sekarang kita akan mulai membuat CA pada server ini.
  1. Install OpenSSL pada server ini, atau biasanya CentOS sudah termasuk aplikasi OpenSSL didalamnya.
  2. [root@m1-dz ~]# yum -y install openssl
    
  3. Masuk dalam direktori tempat disimpannya CA beserta sertifikatnya, lalu buat file dibawah ini.
  4. [root@m1-dz ~]# cd /etc/pki/CA
    [root@m1-dz CA]# touch index.txt
    [root@m1-dz CA]# echo '1000' > serial
    
  5. Kita buat private key CA, dan membuat CA.
  6. [root@m1-dz CA]# openssl genrsa -out private/cakey.pem 2048 #membuat private key CA
    Generating RSA private key, 2048 bit long modulus
    ................................+++
    ...................................................................+++
    e is 65537 (0x10001)
    [root@m1-dz CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650
    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) [XX]:ID #Kode negara
    State or Province Name (full name) []:JABAR #provinsi
    Locality Name (eg, city) [Default City]:BEKASI #kota
    Organization Name (eg, company) [Default Company Ltd]:IT #bebas
    Organizational Unit Name (eg, section) []:TKJ #bebas
    Common Name (eg, your name or your server's hostname) []:m1-dz.network.dz #hostname server
    Email Address []:admin@network.dz #email
    
  7. Setelah CA sudah selesai dibuat, kita sekarang dapat membuat sertifikat digital untuk web server, file server, dll.
  8. #WEB SERVER
    [root@m1-dz CA]# openssl genrsa -out private/web-key.key 2048 #Membuat private key
    [root@m1-dz CA]# openssl req -new -key private/web-key.key -out newcerts/web-key.csr #Membuatrequest
    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) [XX]:ID 
    State or Province Name (full name) []:JABAR
    Locality Name (eg, city) [Default City]:BEKASI
    Organization Name (eg, company) [Default Company Ltd]:IT
    Organizational Unit Name (eg, section) []:TKJ
    Common Name (eg, your name or your server's hostname) []:www.network.dz #sesuai dengan domain web server
    Email Address []:admin@network.dz
    
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:
    
    [root@m1-dz CA]# openssl ca -in newcerts/web-key.csr -out newcerts/web-cert.crt #Menandatangani sertifikat dengan CA
    Using configuration from /etc/pki/tls/openssl.cnf
    Check that the request matches the signature
    Signature ok
    Certificate Details:
            Serial Number: 4096 (0x1000)
            Validity
                Not Before: Jun 24 06:45:53 2018 GMT
                Not After : Jun 24 06:45:53 2019 GMT
            Subject:
                countryName               = ID
                stateOrProvinceName       = JABAR
                organizationName          = IT
                organizationalUnitName    = TKJ
                commonName                = www.network.dz
                emailAddress              = admin@network.dz
            X509v3 extensions:
                X509v3 Basic Constraints: 
                    CA:FALSE
                Netscape Comment: 
                    OpenSSL Generated Certificate
                X509v3 Subject Key Identifier: 
                    6B:D5:B7:6A:F3:6C:48:5B:F9:3D:8A:8D:D3:D4:03:02:56:A1:13:CF
                X509v3 Authority Key Identifier: 
                    keyid:D0:87:23:7E:32:39:51:35:9F:01:C7:4F:02:65:2D:4E:57:AF:77:40
    
    Certificate is to be certified until Jun 24 06:45:53 2019 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
    
  9. File-file sertifikat yang telah dibuat harus disalin kedalam server yang membutuhkan sertifikat tersebut, misalnya menggunakan SCP atau copy paste.
  10. [root@m1-dz CA]# scp newcerts/web-cert.crt root@192.168.100.11:/etc/pki/tls/certs/
    The authenticity of host '192.168.100.11 (192.168.100.11)' can't be established.
    ECDSA key fingerprint is SHA256:nYvo3n6q0dAFdLFikwFkRoEfOZU74rT0by5ojaiZZ80.
    ECDSA key fingerprint is MD5:d4:18:13:27:d3:26:06:3a:9a:40:11:80:35:0a:07:2c.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '192.168.100.11' (ECDSA) to the list of known hosts.
    root@192.168.100.11's password: 
    web-cert.crt                                  100% 4592     1.4MB/s   00:00    
    [root@m1-dz CA]# scp private/web-key.key root@192.168.100.11:/etc/pki/tls/private/
    root@192.168.100.11's password: 
    web-key.key                                   100% 1679    55.0KB/s   00:00    
    
    #tulisan bewarna merah merupakan IP Address server yang dituju beserta direktori untuk menyimpan cert/key nya.
    
  11. Lakukan hal yang sama untuk file server, mail server dari langkah ke 4, yang berbeda hanya pada common name, sesuaikan common name dengan hostname + domain dari server yang akan menggunakan sertifikat tersebut.

Import ke Client

Kita import CA kedalam client agar client mempercayai setiap sertifikat yang ditandatangani oleh CA kita.
  1. Export file cacert.pem kedalam komputer client dengan mengcopy paste nya atau menggunakan SCP.
  2. [root@m1-dz CA]# cat cacert.pem 
    -----BEGIN CERTIFICATE-----
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    -----END CERTIFICATE-----
    #copy paste menggunakan notepad kemudian simpan dalam file .crt
    
  3. Kali ini untuk web site, buka salah satu web browser, kali ini saya menggunakan firefox.
  4. Klik Menu > Preferences > Privacy & Security > Certificates > View Certificates, klik Import.
  5. Pilih file CA nya kemudian klik OK.
  6. Centang keduanya lalu klik OK.
  7. Setelah itu maka tidak akan muncul error lagi ketika membuka situs web https.
Sekian Terima kasih, cukup sampai disini postingan saya kali ini.

Referensi






  • NetworkLessons.com
  • Komentar