Daftar Isi
- Alternatif 1: SSL Terpercaya (Berbayar)
- Alternatif 2: SSL Terpercaya (Gratis)
- Alternatif 3: SSL Buat Sendiri (Gratis)
- |-Membuat Pasangan Private Key-Public Key
- |-Membuat Sertifikat sebagai Pembuat Sertifikat Pribadi (seperti Perusahaan SSL)
- |-Meminta Sertifikat dari Pembuat Sertifikat Pribadi
- |-Skrip Instalasi Sertifikat di Windows
- Instalasi/Konfigurasi
- Error Aktivasi SSL Pada Windows (Kasus: Cannot Load mod_ssl.so)
- Antisipasi Akses SSL Menggunakan IP Publik Maupun Lokal
- |-Alternatif 1: Redirect IP ke Domain
- |-Alternatif 2: Jika IP Lokal Tidak Memungkinkan Di Redirect (menggunakan SNI)
- Adaptasi
- Testing
Instalasi/Konfigurasi
Apache 2 (PHP)
- 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)
- 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) - Buat DHParam untuk tambahan keamanan (mungkin tidak bisa digunakan)
userpc@pc:~/# openssl dhparam -out /etc/ssl/dhparam.pem 2048
- 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" - Backup konfigurasi SSL
userpc@pc:~/# cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/default-ssl.conf.bak
- Update firewall
userpc@pc:~/# ufw allow 'Apache Full'
userpc@pc:~/# ufw delete allow 'Apache' - Aktifkan SSL
userpc@pc:~/# a2enmod ssl
userpc@pc:~/# a2enmod headers
userpc@pc:~/# a2enmod rewrite
userpc@pc:~/# a2ensite default-ssl
userpc@pc:~/# a2enconf ssl-params - 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 perintahuserpc@pc:~/# service apache2 restart
- Aktifkan OCSP Stapling (Opsional)
- Tambahkan mekanisme untuk memaksa dari HTTP ke HTTPS
- 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
berisiRewriteEngine 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] - 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:
catatlah DocumentRoot yang tercantum di berkas 000-default.conf - Sesuaikan konfigurasi di
/etc/apache2/sites-enabled/default-ssl.conf
di bagianSSLCertificate
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
- 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).
- Restart Apache
- 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
- Edit
PDDIKTI/webserver/conf/httpd.conf
- Hilangkan Komentar
LoadModule ssl_module mod_ssl.so
- Di dalam <IfModule ssl_module> ubah menjadi
Include conf/extra/httpd-ssl.conf
, catatlah DocumentRoot yang tercantum di situ - Komentari
#Include conf/extra/httpd-vhosts.conf
- 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' />" - 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)
- Buat password, misalnya: katakuncistore
userpc@pc:~/# cd /etc/ssl
userpc@pc:/etc/ssl/# echo "katakuncistore" > /etc/ssl/pkcs12password.info - 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)
- 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" /> - 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.
5 replies on “Mengaktifkan SSL (HTTPS) Pada Web Berbasis Apache dan Open SSL”
[…] Pastikan bahwa komunikasi antar sistem terjadi secara aman, misalnya melalui https, misalnya Mengaktifkan SSL (HTTPS) Pada Web Berbasis Apache dan Open SSL […]
[…] Inspirasi: https://pdsi.unisayogya.ac.id/mengaktifkan-ssl-https-pada-web-berbasis-apache-dan-open-ssl/2/#feeder… […]
[…] Process Monitor untuk melihat lebih dalam permasalahannya (https://pdsi.unisayogya.ac.id/mengaktifkan-ssl-https-pada-web-berbasis-apache-dan-open-ssl/3/#errora…). Filter pada […]
[…] sertifikat SSL yang berada di folder /pathSSL. Belum punya? Baca di sini jika belum […]
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