Mengaktifkan SSL (HTTPS) Pada Web Berbasis Apache dan Open SSL

Perhatian!!
Mungkin tampilan akan berbeda tergantung di mana membeli sertifikat dan mungkin juga ada perubahan tampilan dari penyedia sertifikat. Konfigurasi ini dilakukan pada server Ubuntu.

Alternatif 1: SSL Terpercaya (Berbayar)

Membuat CSR

(sumber: https://www.sslshopper.com/article-most-common-openssl-commands.html, terakhir diakses 8 Jan 2020)

userpc@pc:~/# mkdir /etc/ssl
userpc@pc:~/# cd /etc/ssl
userpc@pc:/etc/ssl# openssl req -new -nodes -out /etc/ssl/CSRfile.csr -newkey rsa:4096 -keyout /etc/ssl/private.key
jika ada pertanyaan tentang password, tekan enter saja, tidak perlu diisi

Request Sertifikat

  1. Salin teks CSR yang sudah dibuat apa adanya ke kotak yang tersedia

    salin-csr
    salin-csr
  2. Isi informasi administratif, kemudian tekan tombol lanjut

    isi-info
    isi-info
  3. Pilih salah satu metode validasi, misalnya validasi email

    validasi
    validasi
  4. Buka email validasi, salin kode, kemudian klik link validasi yang ada di email tersebut

    email-confirm
    email-confirm
  5. Masukkan/tempel kode untuk melakukan verifikasi

    verifikasi
    verifikasi
  6. Unduh sertifikat

    unduh-sertifikat
    unduh-sertifikat
  7. Untuk kasus ini, UNISA mendapatkan 4 sertifikat, yaitu ChainCA2.crt, ChainCA1.crt, RootCA.crt, dan domain.crt. Sertifikat chain dan root tersebut dinamakan sertifikat Intermediate.
  8. Buka teks editor biasa (notepad atau gedit misalnya), kemudian salin ChainCA2.crt, ChainCA1.crt dan RootCA.crt ke dalam dokumen baru dan disimpan dengan nama *.ca-bundle, misalnya intermediate.ca-bundle.

    membuat-cabundle
    membuat-cabundle
  9. Salin domain.crt dan intermediate.ca-bundle ke folder /etc/ssl
    userpc@pc:~/Download# cp domain.crt /etc/ssl/domain.crt
    userpc@pc:~/Download# cp intermediate.ca-bundle /etc/ssl/intermediate.ca-bundle

Alternatif 2: SSL Terpercaya (Gratis)

Penting! Siapkan alamat email terlebih dahulu dan port 80/443 dapat diakses dari internet

  1. Buka web https://certbot.eff.org/, kemudian pilih instruksi untuk mendapatkan Certbot

    pilih instruksi mendapatkan certbot
    pilih instruksi mendapatkan certbot
  2. Pilih jenis server dan sistem operasi

    pilih jenis server dan sistem operasi
    pilih jenis server dan sistem operasi
  3. Ikuti instuksi untuk menginstal Certibot, nanti akan bertemu pilihan mau mendapatkan sertifikat plus konfigurasi otomatis atau cuma dapatkan sertifikat saja. Untuk server yang lebih dari 1 sertifikat sebaiknya pilih cuma dapatkan sertifikat saja.

Alternatif 3: SSL Buat Sendiri (Gratis)

(sumber: https://medium.com/@tbusser/creating-a-browser-trusted-self-signed-ssl-certificate-2709ce43fd15, terakhir diakses 11 Jan 2020)

Membuat Sertifikat sebagai Pembuat Sertifikat Pribadi (seperti Perusahaan SSL)

Perhatian! Langkah ini hanya dilakukan sekali saja. Untuk permintaan-permintaan sertifikat tinggal menggunakan rootCA yang sudah ada.

  1. Buat password yang akan digunakan untuk membuat kunci, misalnya: katasandiperusahaaanku
    userpc@pc:~/# mkdir /etc/ssl/perusahaanSSLpribadi
    userpc@pc:~/# cd /etc/ssl/perusahaanSSLpribadi
    userpc@pc:/etc/ssl/perusahaanSSLpribadi# echo “katasandiperusahaaanku” > /etc/ssl/perusahaanSSLpribadi/password.info
  2. Buat sertifikat Intermediate
    userpc@pc:/etc/ssl/perusahaanSSLpribadi# openssl genrsa -des3 -passout pass:$(cat /etc/ssl/perusahaanSSLpribadi/password.info) -out /etc/ssl/perusahaanSSLpribadi/rootCAAman.key 4096
    userpc@pc:/etc/ssl/perusahaanSSLpribadi# openssl req -x509 -new -nodes -passin pass:$(cat /etc/ssl/perusahaanSSLpribadi/password.info) -key /etc/ssl/perusahaanSSLpribadi/rootCAAman.key -sha256 -days 18250 -out /etc/ssl/perusahaanSSLpribadi/rootCAAman.pem
    userpc@pc:/etc/ssl/perusahaanSSLpribadi# cp /etc/ssl/perusahaanSSLpribadi/rootCAAman.pem /etc/ssl/perusahaanSSLpribadi/intermediate.ca-bundle
    Contoh isian CA:
    Country Name (2 letter code) [AU]:ID
    State or Province Name (full name) [Some-State]:Indonesia
    Locality Name (eg, city) []:Indonesia
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:Keamanan SSL Pribadi
    Organizational Unit Name (eg, section) []:SSL
    Common Name (e.g. server FQDN or YOUR name) []:Keamanan SSL Pribadi
    Email Address []:
  3. Distribusikan rootCAAman.pem agar dapat diimpor ke Otoritas Terpercaya
    memasukkan otoritas SSL pribadi
    memasukkan otoritas SSL pribadi

    aman meskipun sertifikat tidak dikenal secara internal oleh aplikasi
    aman meskipun sertifikat tidak dikenal secara internal oleh aplikasi

Meminta Sertifikat dari Pembuat Sertifikat Pribadi

Perhatian! Tentukan folder yang berbeda untuk membuat setiap sertifikat yang berbeda

  1. Membuat CSR (misalnya folder ifi)
    jika ada pertanyaan tentang password, tekan enter saja, tidak perlu diisi
    jika ada pertanyaan CN (Common Name), diisi dengan alamat webnya, misalnya *.domain1.dev
    userpc@pc:~/# mkdir /etc/ssl/ifi/
    userpc@pc:~/# cd /etc/ssl/ifi/
    userpc@pc:/etc/ssl/ifi# openssl req -new -nodes -out /etc/ssl/ifi/CSRfile.csr -newkey rsa:4096 -keyout /etc/ssl/ifi/private.key

    Contoh isian CA:
    Country Name (2 letter code) [AU]:ID
    State or Province Name (full name) [Some-State]:Indonesia
    Locality Name (eg, city) []:Indonesia
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:Ikatan Fisioterapi Indonesia
    Organizational Unit Name (eg, section) []:Fisioterapi
    Common Name (e.g. server FQDN or YOUR name) []:*.ifi
    Email Address []:p****i@yahoo.com
    Please enter the following ‘extra’ attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:IFI
  2. Mempersiapkan setting (misalnya sertifikat untuk domain1.dev dan ip 192.168.5.2, tambahkan localhost jika diperlukan)
    userpc@pc:/etc/ssl/ifi# nano /etc/ssl/ifi/v3.ext
    authorityKeyIdentifier=keyid,issuer
    basicConstraints=CA:FALSE
    keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
    subjectAltName = @alt_names
    [alt_names]
    DNS.1 = domain1.dev
    DNS.2 = *.domain1.dev
    IP.1 = 192.168.5.2
    #localhost
    IP.2 = 127.0.0.1
  3. Membuat Sertifikat SSL dan Intermediate dari CSR
    userpc@pc:/etc/ssl/ifi# openssl x509 -req -in /etc/ssl/ifi/CSRfile.csr -CA /etc/ssl/perusahaanSSLpribadi/rootCAAman.pem -passin pass:$(cat /etc/ssl/perusahaanSSLpribadi/password.info) -CAkey /etc/ssl/perusahaanSSLpribadi/rootCAAman.key -out /etc/ssl/ifi/domain.crt -days 36500 -sha256 -extfile /etc/ssl/ifi/v3.ext
  4. Salin Berkas Intermediate
    userpc@pc:/etc/ssl/ifi# cp /etc/ssl/perusahaanSSLpribadi/intermediate.ca-bundle /etc/ssl/ifi/intermediate.ca-bundle && cp /etc/ssl/perusahaanSSLpribadi/rootCAAman.srl /etc/ssl/ifi/rootCAAman.srl

Instalasi/Konfigurasi

Apache 2 (PHP)

  1. Aktifkan HTTPS (sumber: https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-apache-in-ubuntu-16-04, terakhir diakses 11 Jan 2020)
    1. Aktifkan OCSP Stapling (Opsional)
      Perhatian! OCSP Stapling membutuhkan koneksi internet untuk validasi sertifikat, sehingga tidak cocok untuk sistem yang membutuhkan blokir internet, misalnya Computer Based Test (CBT)

      1. Buat DHParam untuk tambahan keamanan (mungkin tidak bisa digunakan)
        userpc@pc:~/# openssl dhparam -out /etc/ssl/dhparam.pem 2048
      2. Buat config
        userpc@pc:~/# nano /etc/apache2/conf-available/ssl-params.conf, kemudian ketik konfigurasi di bawah ini
        # from https://cipherli.st/
        # and https://raymii.org/s/tutorials/Strong_SSL_Security_On_Apache2.htmlSSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
        SSLProtocol All -SSLv2 -SSLv3
        SSLHonorCipherOrder On
        # Disable preloading HSTS for now. You can use the commented out header line that includes
        # the “preload” directive if you understand the implications.
        #Header always set Strict-Transport-Security “max-age=63072000; includeSubdomains; preload”
        Header always set Strict-Transport-Security “max-age=63072000; includeSubdomains”
        Header always set X-Frame-Options DENY
        Header always set X-Content-Type-Options nosniff
        SSLCompression off
        SSLSessionTickets Off
        SSLUseStapling on
        SSLStaplingCache “shmcb:logs/stapling-cache(150000)”
        SSLOpenSSLConfCmd DHParameters “/etc/ssl/dhparam.pem”
    2. Backup konfigurasi SSL
      userpc@pc:~/# cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/default-ssl.conf.bak
    3. Update firewall
      userpc@pc:~/# ufw allow ‘Apache Full’
      userpc@pc:~/# ufw delete allow ‘Apache’
    4. Aktifkan SSL
      userpc@pc:~/# a2enmod ssl
      userpc@pc:~/# a2enmod headers
      userpc@pc:~/# a2enmod rewrite
      userpc@pc:~/# a2ensite default-ssl
      userpc@pc:~/# a2enconf ssl-params
    5. Tes konfigurasi SSL
      userpc@pc:~/# apache2ctl configtest
      jika terdapat pesan error, perbaiki errornya (hapus di mana konfigurasi tidak bisa digunakan)
      userpc@pc:~/# nano /etc/apache2/conf-enabled/ssl-params.conf
      jika Syntax OK, maka bisa dilanjutkan dengan perintah
      userpc@pc:~/# service apache2 restart
  2. Tambahkan mekanisme untuk memaksa dari HTTP ke HTTPS
    1. Buat berkas konfigurasi untuk redirect (sesuai kebutuhan). Berkas ini seperti .htaccess, tetapi bukan .htaccess. Jika .htaccess akan diakses terus (dibaca di disk) ketika halaman dibuka, informasi lebih lanjut mengenai .htaccess dapat dibaca di sini (terakhir diakses 16 Jan 2020).
      userpc@pc:~/# nano /var/www/virtualhostrule.conf
      RewriteEngine On
      #Alamat yang tidak dipaksa ke HTTPS
      RewriteCond %{HTTP_HOST} !sampel.domain.com [OR]
      RewriteCond %{HTTP_HOST} !contoh.domain.com [OR]
      #semua ke HTTPS
      RewriteCond %{HTTPS} off
      RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    2. Tambahkan Include di /etc/apache2/sites-enabled/000-default.conf di dalam <VirtualHost *:80> serta di /etc/apache2/sites-enabled/default-ssl.conf di dalam <VirtualHost _default:443>, seperti contoh di bawah ini:
      include rule
      include rule

      catatlah DocumentRoot yang tercantum di berkas 000-default.conf

  3. Sesuaikan konfigurasi di /etc/apache2/sites-enabled/default-ssl.conf di bagian SSLCertificate
    SSLCertificateFile /etc/ssl/domain.crt
    SSLCertificateKeyFile /etc/ssl/private.key
    SSLCACertificateFile /etc/ssl/intermediate.ca-bundle
    samakan DocumentRoot dengan yang tercantum di berkas 000-default.conf
  4. Restart Apache
  5. Coba akses menggunakan HTTP dengan port HTTPS, misal http://www.domain.com. Apabila muncul pesan kesalahan dengan kode 400 (Bad Request), maka tambahkan di /etc/apache2/sites-enabled/000-default.conf baris berikut:
    #untuk error kode 400 (Bad Request)
    ErrorDocument 400 “<meta http-equiv = ‘refresh’ content = ‘0; url = https://%{HTTP_HOST}’ />”

Feeder PDDIKTI (Versi Windows)

Baca juga: Error Aktivasi SSL Pada Windows

  1. Edit PDDIKTI/webserver/conf/httpd.conf

    1. Hilangkan Komentar LoadModule ssl_module mod_ssl.so
    2. Di dalam <IfModule ssl_module> ubah menjadi Include conf/extra/httpd-ssl.conf, catatlah DocumentRoot yang tercantum di situ
    3. Komentari #Include conf/extra/httpd-vhosts.conf
    4. Tambahkan baris untuk memaksa ke HTTPS
      RewriteEngine On
      # IP Publik
      RewriteCond %{HTTP_HOST} ^123\.456\.789\.1$ [OR]
      #Atau IP Lokal
      RewriteCond %{HTTP_HOST} ^192\.168\.1\.1$ [OR]
      #semua ke HTTPS
      RewriteCond %{HTTPS} off
      RewriteRule ^(.*)$ https://feeder.domain.ac.id [L,R=301]
      #untuk error kode 400 (Bad Request)
      ErrorDocument 400 “<meta http-equiv = ‘refresh’ content = ‘0; url = https://feeder.domain.ac.id’ />”
  2. Edit PDDIKTI/webserver/conf/extra/httpd-ssl.conf sesuai keinginan, misalnya:
    Listen 443
    SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4
    SSLProxyCipherSuite HIGH:MEDIUM:!MD5:!RC4
    SSLHonorCipherOrder on
    SSLProtocol all -SSLv3
    SSLProxyProtocol all -SSLv3
    SSLPassPhraseDialog builtinSSLSessionCacheTimeout 300
    <VirtualHost *:443>
    #sama dengan yang ada di httpd.conf
    DocumentRoot “C:/Program Files/PDDIKTI/dataweb”
    RewriteEngine On
    # IP Publik
    RewriteCond %{HTTP_HOST} ^123\.456\.789\.1$ [OR]
    #Atau IP Lokal
    RewriteCond %{HTTP_HOST} ^192\.168\.1\.1$ [OR]
    #semua ke HTTPS
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://feeder.domain.ac.id [L,R=301]
    SSLEngine on
    SSLCertificateFile “c:/ssl/domain.crt
    SSLCertificateKeyFile “c:/ssl/private.key
    SSLCertificateChainFile “c:/ssl/intermediate.ca-bundle
    <FilesMatch “\.(cgi|shtml|phtml|php)$”>
    SSLOptions +StdEnvVars
    </FilesMatch>
    BrowserMatch “MSIE [2-5]” \
    nokeepalive ssl-unclean-shutdown \
    downgrade-1.0 force-response-1.0
    CustomLog “C:\Program Files\PDDIKTI\webserver\logsssl_request.log” \
    “%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \”%r\” %b”
    </VirtualHost>

Tomcat (Java)

(sumber: https://tomcat.apache.org/tomcat-8.0-doc/ssl-howto.html dan https://www.ssls.com/knowledgebase/how-to-install-an-ssl-certificate-on-a-tomcat-server/, terakhir diakses 8 Jan 2020)

  1. Buat password, misalnya: katakuncistore
    userpc@pc:~/# cd /etc/ssl
    userpc@pc:/etc/ssl/# echo “katakuncistore” > /etc/ssl/pkcs12password.info
  2. Ekspor sertifikatnya ke bentuk lain yang bisa digunakan oleh Tomcat
    userpc@pc:/etc/ssl# openssl pkcs12 -export -out tomcatcert.pfx -inkey private.key -in domain.crt -certfile intermediate.ca-bundle -password pass:$(cat /etc/ssl/pkcs12password.info)
  3. Sesuaikan konfigurasi di /etc/tomcatx/server.xml
    <Connector port=”8443″ protocol=”org.apache.coyote.http11.Http11NioProtocol”
    maxThreads=”150″ SSLEnabled=”true” scheme=”https” secure=”true”
    keystoreFile=”/etc/ssl/tomcatcert.pfx” keystorePass=”katakuncistore” keystoreType=”PKCS12″
    clientAuth=”false” sslProtocol=”TLS” />
  4. Memaksa untuk menggunakan HTTPS (sumber: https://stackoverflow.com/questions/45994711/how-to-enforce-https-with-tomcat, terakhir diakses 11 Jan 2020), yaitu dengan menambah teks pada web.xml (satu folder dengan server.xml) di dalam <web-app>:
    <!– memaksa HTTPS –>
    <security-constraint>
    <web-resource-collection>
    <web-resource-name>Protected Context</web-resource-name>
    <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
    <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
    </security-constraint>

Catatan:

Ada juga yang menggunakan metode lain untuk SSL di Tomcat, seperti yang ada pada https://support.comodoca.com/Com_KnowledgeDetailPageSectigo?Id=kA01N000000zFR5, https://tomcat.apache.org/tomcat-8.0-doc/ssl-howto.html dan situs lainnya.

Error Aktivasi SSL Pada Windows (Kasus: Cannot Load mod_ssl.so)

trace error
trace error
  1. Buka berkas error, biasanya ada di folder logs.
  2. Kemudian cari di berkas error tersebut perintah untuk menjalankan server apache.
  3. Kemudian jalankan perintah tersebut di Command Prompt, beri tanda petik (“) untuk yang ada spasinya, misal Program Files, sehingga menjadi seperti ini: “C:\\Program Files\\PDDIKTI\\webserver\\bin\\httpd.exe” -d “C:/Program Files/PDDIKTI/webserver” -f “C:\\Program Files\\PDDIKTI\\webserver\\conf\\httpd.conf”. Untuk kasus ini, muncul pesan Cannot load mod_ssl.so. Di beberapa forum online terdapat cara untuk mengganti berkas dll, misalnya https://serverfault.com/questions/477706/apache-ssl-on-64-bit-windows-not-a-valid-win32-application (terakhir diakses 17 Jan 2020), mungkin bisa dicoba. Namun, untuk kasus ini coba kita lacak dengan elegan.
  4. Masih dari alamat forum di atas, terdapat langkah untuk menggunakan perangkat lunak Process Monitor untuk melacak proses yang terjadi di Windows (unduh di: https://docs.microsoft.com/en-us/sysinternals/downloads/procmon, terakhir diakses 17 Jan 2020). Buka perangkat lunak Process Monitor tersebut, setelah terbuka langsung jalankan kembali perintah untuk menghidupkan apache tadi. Setelah keluar pesan kesalahannya, maka buka perangkat lunak Process Monitor kemudian pilih menu File > Capture Event atau tekan Ctrl + E, yang tadinya tercentang menjadi tidak tercentang. Kemudian pilih menu Filter. Pada jendela Process Monitor Filter, pilih Process Name is httpd.exe, kemudian tekan OK. Carilah info terkait dengan kesalahannya, misalnya untuk kasus ini carilah info yang terkait dengan mod_ssl.so.stop dan filtering process monitor
    stop dan filtering process monitor
  5. Untuk kasus ini, pada Result ada tulisan NO SUCH FILE, berarti berkas tidak ada. Setelah kita lihat, di Path tertulis C:\Program Files\PDDIKTI\webserver\mod_ssl.so. Setelah dicek, ternyata memang berkas itu tidak ada, adanya di C:\Program Files\PDDIKTI\webserver\modules\mod_ssl.so. Sehingga solusi untuk kasus ini adalah menyalin C:\Program Files\PDDIKTI\webserver\modules\mod_ssl.so ke C:\Program Files\PDDIKTI\webserver\mod_ssl.so.

Antisipasi Akses SSL Menggunakan IP Publik Maupun Lokal

Alternatif 1: Redirect IP ke Domain

(sumber: https://www.digitalocean.com/community/questions/redirect-ip-to-domain-name, terakhir diakses 16 Jan 2020)

  1. Buat berkas konfigurasi untuk redirect (sesuai kebutuhan)
    userpc@pc:~/# nano /var/www/virtualhostrule.conf

    1. Contoh 1
      #Berkas ini dipanggil oleh Apache2 di dalam Virtual Host (mirip .htaccess)
      #Jangan dihapus
      RewriteEngine On
      #IP Publik
      RewriteCond %{HTTP_HOST} ^123\.456\.789\.1$ [OR]
      #Atau IP Lokal
      RewriteCond %{HTTP_HOST} ^192\.168\.1\.1$ [OR]
      #Atau Domain Lokal
      RewriteCond %{HTTP_HOST} ^domain\.lokal$ [OR]
      #Atau HTTP (meskipun portnya sudah HTTPS)
      RewriteCond %{HTTPS} off
      #di redirect
      RewriteRule ^(.*)$ https://www.domain.com [L,R=301]
    2. Contoh 2
      #Berkas ini dipanggil oleh Apache2 di dalam Virtual Host (mirip .htaccess)
      #Jangan dihapus
      RewriteEngine On
      #folder tertentu dari lokal
      RewriteCond %{HTTP_HOST} ^domain\.lokal$
      RewriteCond %{REQUEST_URI} foldertertentu
      RewriteRule ^(.*)$ https://local-www.domain.com/foldertertentu [L,R=301]
      RewriteCond %{HTTP_HOST} ^192\.168\.1\.1$
      RewriteCond %{REQUEST_URI} foldertertentu
      RewriteRule ^(.*)$ https://local-www.domain.com/foldertertentu [L,R=301]
      #IP Lokal
      RewriteCond %{HTTP_HOST} ^192\.168\.1\.1$ [OR]
      RewriteCond %{HTTP_HOST} ^domain\.lokal$
      RewriteRule ^(.*)$ https://local-www.domain.com [L,R=301]
      #IP Publik
      RewriteCond %{HTTP_HOST} ^123\.456\.789\.1$
      RewriteCond %{HTTPS} off
      RewriteRule ^(.*)$ https://www.domain.com [L,R=301]
  2. Tambahkan Include di /etc/apache2/sites-enabled/000-default.conf di dalam <VirtualHost *:80> serta di /etc/apache2/sites-enabled/default-ssl.conf di dalam <VirtualHost _default:443>, seperti contoh di bawah ini:

    include rule
    include rule
  3. Restart Apache
  4. Coba akses menggunakan HTTP dengan port HTTPS, misal http://www.domain.com. Apabila muncul pesan kesalahan dengan kode 400 (Bad Request), maka tambahkan di /etc/apache2/sites-enabled/000-default.conf baris berikut:
    #untuk error kode 400 (Bad Request)
    ErrorDocument 400 “<meta http-equiv = ‘refresh’ content = ‘0; url = https://%{HTTP_HOST}’ />”

Alternatif 2: Jika IP Lokal Tidak Memungkinkan Di Redirect (menggunakan SNI)

(sumber: https://www.digicert.com/ssl-support/apache-multiple-ssl-certificates-using-sni.htm, terakhir diakses 16 Jan 2020)

  1. Lakukan: SSL Buat Sendiri, misalnya IP Lokal 192.168.1.1, maka alamat itu dimasukkan ke dalam v3.ext sehingga akan seperti ini:
    authorityKeyIdentifier=keyid,issuer
    basicConstraints=CA:FALSE
    keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
    subjectAltName = @alt_names
    [alt_names]
    IP.1 = 192.168.1.1
    #localhost
    IP.2 = 127.0.0.1
  2. Buat folder baru di /etc/ssl, misalnya folder SSLip
    userpc@pc:~/# mkdir /etc/ssl/SSLip
    salin domain.crt, private.key dan intermediate.ca-bundle ke folder SSLip tersebut
  3. Tambahkan Virtual Host di /etc/apache2/sites-enabled/default-ssl.conf, di atas Virtual Host yang sudah ada
    <VirtualHost 192.168.1.1:443>
    ServerName www.domain1.com
    #DocumentRoot disamakan dengan yang awal
    DocumentRoot /var/www/html/
    SSLEngine on
    SSLCertificateFile /etc/ssl/SSLip/domain.crt
    SSLCertificateKeyFile /etc/ssl/SSLip/private.key
    SSLCACertificateFile /etc/ssl/SSLip/intermediate.ca-bundle
    </VirtualHost>
    #Virtual Host Awal
    <VirtualHost _default_:443>
    ServerName www.domain2.com

Jika server tidak mendukung SNI, maka bisa menggunakan 2 port yang berbeda untuk lokal dan publik, misalnya: port 443 dan 8443, sehingga akan seperti ini:
Listen 443
Listen 8443
<VirtualHost 192.168.1.1:443>

</VirtualHost>
<VirtualHost 192.168.1.1:8443>

</VirtualHost>

Adaptasi

Moodle

  1. Pada config.php, edit $CFG->wwwroot menjadi seperti ini:
    //adaptasi dengan http atau https, agar tidak ada mixed http dengan https
    $http = ‘http’ . ((isset($_SERVER[‘HTTPS’]) && $_SERVER[‘HTTPS’] == ‘on’) ? ‘s’ : ”) . ‘://’;
    //alamat jika
    tidak dikenal
    $defaultaddress = $http.’172.16.100.101′;
    //alamat saat ini
    $currentaddress = $http.$_SERVER[“SERVER_NAME”];
    //alias dari alamat moodle
    $allowedaddresses = array($http.’172.16.100.101′, $http.’49.128.176.214′, $http.’local.elearning.unisayogya.ac.id’, $http.’elearning.unisayogya.ac.id’);
    //contoh jika ada yang pasti http
    //$allowedaddresses = array($http.’172.16.100.101′, ‘http://49.128.176.214′, $http.’local.elearning.unisayogya.ac.id’, $http.’elearning.unisayogya.ac.id’);
    //set $CFG->wwwroot
    if (in_array($currentaddress, $allowedaddresses)) $CFG->wwwroot = $currentaddress; else $CFG->wwwroot = $defaultaddress;
  2. Pada default_ssl.conf atau httpd-ssl.conf:
    Header always set X-Frame-Options DENY diganti dengan Header always set X-Frame-Options SAMEORIGIN

Code Igniter

Pada config.php, edit $config[‘base-url’] menjadi seperti ini:

$http = ‘http’ . ((isset($_SERVER[‘HTTPS’]) && $_SERVER[‘HTTPS’] == ‘on’) ? ‘s’ : ”) . ‘://’;
$newurl = str_replace(“index.php”,””, $_SERVER[‘SCRIPT_NAME’]);
$config[‘base_url’] = “$http” . $_SERVER[‘SERVER_NAME’] . “” . $newurl;

Testing

Untuk melakukan pengecekan dapat dilakukan secara online (mudah dibaca), misalnya melalui situs https://www.sslshopper.com/ssl-checker.html, https://www.ssllabs.com/ssltest, atau situs lainnya. Situs-situs tersebut dapat dicari melalui mesin pencarian online dengan kata kunci “SLL Checker Online”. Di bawah ini adalah contoh sertifkat yang valid (kiri) dan yang tidak valid (kanan).

broken root
broken root

Alternatif penyebab tidak valid:

  1. Cek apakah sertifikat kadaluarsa
  2. Cek apakah salah membuat ca-bundle, baik karena urutan salah atau salah menggabungkan sertifikat-sertifikat intermediate (chain dan root)
  3. Cek apakah salah setting di server (misalnya salah menunjuk berkas ca-bundle)
  4. Cek apakah sertifikat intermediate yang dikirim oleh penyedia SSL bermasalah (dapat ditanyakan ke penyedia SSL) → Ini adalah penyebab untuk kasus di atas (sebelah kanan)

Konsekuensi:

  1. Jika sertifikat Domain tidak valid, maka status di koneksi manapun akan bersifat not secure.
  2. Jika hanya sertifikat Domain valid, maka status di browser (mozilla, chrome, dsb) akan bersifat secure.
  3. Jika sertifikat Intermediate ada yang tidak valid, maka status di browser (mozilla, chrome, dsb) akan bersifat secure, tetapi untuk aplikasi lain bernilai not secure, bahkan ada yang menolak untuk melanjutkan proses, misalnya keluar pesan kesalahan pada aplikasi Android: “Error 1101: Unable to ger a response with the specified URL”

    web tidak aman mengakibatkan error di aplikasi
    web tidak aman mengakibatkan error di aplikasi
  4. Jika sertifikat Intermediate valid, maka status di semua aplikasi, termasuk browser (mozilla, chrome, dsb) akan bersifat secure.

Solusi:

  1. Cari informasi hierarki dari sertifikat Intermediate di mesin pencarian, misalnya dengan kata kunci Sectigo Chain Hierarchy and Intermediate Roots, atau dengan kata sejenis, dan misalnya ditemukan alamat https://support.sectigo.com/IS_KnowledgeDetailPageFaq?Id=kA01N000000rgSZ
    Didapat, misalnya:
    Trust Chain Path A:
    AddTrust External CA Root [Root]
    USERTrust RSA Certification Authority (Intermediate) [Intermediate 2]
    Sectigo RSA DV/OV/EV Secure Server CA [Intermediate 1]
    End Entity [Leaf Certificate]
    Trust Chain Path B:
    USERTrust RSA Certification Authority (Root CA) [Root]
    Sectigo RSA DV/OV/EV Secure Server CA [Intermediate 1]
    End Entity [Leaf Certificate]
  2. Bandingkan hierarki tersebut dengan hasil testing di atas dan dengan ca-bundle.
    mencari kesalahan
    mencari kesalahan

    Untuk kasus ini ditemukan bahwa terjadi tidak valid di bagian ke-tiga dari ca-bundle, maka hapus bagian ke-tiga tersebut

  3. Cari informasi link ke sertifikat Intermediate yang ada di halaman informasi hiearki sertifikat Intermediate di atas

    link ke sertifikat intermediate
    link ke sertifikat intermediate
  4. Pilih sesuai dengan paket yang dibeli, untuk kasus ini adalah Domain Validation, coba satu per satu

    pilih sertifikat sesuai pembelian
    pilih sertifikat sesuai pembelian
  5. Salin ke berkas /etc/ssl/intermediate.ca-bundle untuk menggantikan yang dihapus tadi, kemudian restart apache2 dengan perintah service apache2 restart
  6. Lakukan testing lagi, jika gagal, maka coba langkah 4 dan 5 di atas, sampai berhasil. Jika berhasil dan digunakan juga di Tomcat, maka ekspor kembali sertifikatnya ke bentuk lain yang bisa digunakan oleh Tomcat (PKCS12).
    akhirnya sertifikat intermediate valid di server apache2
    akhirnya sertifikat intermediate valid di server apache2

    akhirnya sertifikat intermediate valid di server tomcat
    akhirnya sertifikat intermediate valid di server tomcat

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.