Categories
Dokumentasi

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

Daftar Isi

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)
    2. Buat DHParam untuk tambahan keamanan (mungkin tidak bisa digunakan)
      userpc@pc:~/# openssl dhparam -out /etc/ssl/dhparam.pem 2048
    3. 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"
    4. Backup konfigurasi SSL
      userpc@pc:~/# cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/default-ssl.conf.bak
    5. Update firewall
      userpc@pc:~/# ufw allow 'Apache Full'
      userpc@pc:~/# ufw delete allow 'Apache'
    6. Aktifkan SSL
      userpc@pc:~/# a2enmod ssl
      userpc@pc:~/# a2enmod headers
      userpc@pc:~/# a2enmod rewrite

      userpc@pc:~/# a2ensite default-ssl
      userpc@pc:~/# a2enconf ssl-params
    7. 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
      berisi
      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
      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
  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}' />"

|-Feeder PDDIKTI (Versi Windows)

Baca juga: Error Aktivasi SSL Pada Windows

  1. Edit PDDIKTI/webserver/conf/httpd.conf
  2. Hilangkan Komentar LoadModule ssl_module mod_ssl.so
  3. Di dalam <IfModule ssl_module> ubah menjadi Include conf/extra/httpd-ssl.conf, catatlah DocumentRoot yang tercantum di situ
  4. Komentari #Include conf/extra/httpd-vhosts.conf
  5. 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' />"
  6. 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.

By basit

Biro Pengembangan Teknologi Dan Sistem Informasi

5 replies on “Mengaktifkan SSL (HTTPS) Pada Web Berbasis Apache dan Open SSL”

Wah artikel nya sangat menarik, banyak informasi bermanfaat yang saya ambil dari artikel ini. Saya baru tau kalau apache bisa diberikan SSL. Terimakasih min atas artikel nya

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.