Ovaj dokument opisuje kako omogućiti HTTPS (SSL/TLS) na XAMPP-u za siguran razvoj i testiranje aplikacije.
- ✅ Šifriranje: Svi podaci između browsera i servera su šifrirani
- ✅ Secure Cookies: Kolačići se mogu označiti kao "Secure" (šalju se samo preko HTTPS)
- ✅ Browser Trust: Moderne funkcije zahtijevaju HTTPS (Geolocation, Camera, etc.)
- ✅ Production Ready: Testiranje u uvjetima sličnim produkciji
Otvori Command Prompt kao Administrator:
cd C:\xampp\apache
makecert.batOdgovori na pitanja:
- Country Name:
HR - State:
Zagreb - Locality:
Zagreb - Organization Name:
Hotel Management - Organizational Unit:
Development - Common Name:
localhost - Email:
admin@localhost
Otvori: C:\xampp\apache\conf\httpd.conf
Pronađi i odkomentiraj (makni # na početku):
LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf
LoadModule socache_shmcb_module modules/mod_socache_shmcb.soOtvori: C:\xampp\apache\conf\extra\httpd-ssl.conf
Pronađi i promijeni:
<VirtualHost _default_:443>
DocumentRoot "C:/xampp/htdocs/hotel_managment"
ServerName localhost:443
ServerAdmin admin@localhost
SSLEngine on
SSLCertificateFile "conf/ssl.crt/server.crt"
SSLCertificateKeyFile "conf/ssl.key/server.key"
<Directory "C:/xampp/htdocs/hotel_managment">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Require all granted
</Directory>
</VirtualHost>- Otvori XAMPP Control Panel
- Klikni Stop na Apache
- Pričekaj da se potpuno zaustavi
- Klikni Start na Apache
Otvori browser i pristup:
https://localhost/hotel_managment/
Očekivano upozorenje: Browser će prikazati "Your connection is not private" jer je certifikat self-signed.
Klikni: Advanced → Proceed to localhost (unsafe)
cd C:\xampp\apache
mkdir conf\ssl.crt
mkdir conf\ssl.key
"C:\xampp\apache\bin\openssl.exe" genrsa -out conf\ssl.key\server.key 2048"C:\xampp\apache\bin\openssl.exe" req -new -key conf\ssl.key\server.key -out server.csr"C:\xampp\apache\bin\openssl.exe" x509 -req -days 365 -in server.csr -signkey conf\ssl.key\server.key -out conf\ssl.crt\server.crtAko želiš da svi HTTP zahtjevi automatski preusmjere na HTTPS, već imaš .htaccess koji to radi:
# .htaccess u hotel_managment/
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]Za localhost development, možeš onemogućiti redirecte komentiranjem:
# RewriteCond %{HTTPS} off
# RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]Već konfigurirano u .htaccess:
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"Ovo govori browseru da uvijek koristi HTTPS za ovu domenu.
cd /opt/lampp/apache
sudo ./makecert.shsudo nano /opt/lampp/etc/httpd.confOdkomentiraj:
LoadModule ssl_module modules/mod_ssl.so
Include etc/extra/httpd-ssl.confsudo nano /opt/lampp/etc/extra/httpd-ssl.confPromijeni DocumentRoot i ServerName:
DocumentRoot "/opt/lampp/htdocs/hotel_managment"
ServerName localhost:443sudo /opt/lampp/lampp restartOtvori: ssl_status.php
- Login: https://localhost/hotel_managment/login.php
- Register: https://localhost/hotel_managment/register.php
Chrome/Edge:
- Klikni na padlock ikonu lijevo od URL-a
- Klikni Certificate
- Provjeri detalje (Issued to: localhost)
Firefox:
- Klikni na padlock ikonu
- Connection secure → More information
- View Certificate
F12 → Console
Trebalo bi biti:
- ✅ Nema "Mixed Content" upozorenja
- ✅ Nema "Insecure cookies" upozorenja
Uzrok: Port 443 je zauzet
Rješenje:
netstat -ano | findstr :443Vidi koji proces koristi port 443 i zatvori ga.
Uzrok: SSL modul nije pravilno učitan
Rješenje:
- Provjeri da je
LoadModule ssl_moduleodkomentiran - Provjeri da
httpd-ssl.confnije oštećen - Restartuj Apache
Uzrok: Self-signed certifikat
Rješenje:
- Ovo je normalno za development
- Browser ne vjeruje self-signed certifikatima
- Klikni "Advanced" → "Proceed to localhost"
Za produkciju, koristi pravi SSL certifikat od:
- Let's Encrypt (BESPLATNO!)
- Cloudflare SSL
- Comodo, DigiCert, etc.
Uzrok: Učitavaš HTTP resurse na HTTPS stranici
Rješenje:
Provjeri da svi linkovi koriste https:// ili relativan path:
<!-- ❌ BAD -->
<script src="http://example.com/script.js"></script>
<!-- ✅ GOOD -->
<script src="https://example.com/script.js"></script>
<script src="/hotel_managment/js/script.js"></script>Za stvarnu produkciju (ne localhost), koristi:
# Install Certbot
sudo apt install certbot python3-certbot-apache
# Get certificate
sudo certbot --apache -d yourdomain.com -d www.yourdomain.com
# Auto-renewal (cron)
sudo certbot renew --dry-run- Dodaj domenu na Cloudflare
- Promijeni nameservere
- SSL/TLS → Full (strict)
- Automatic HTTPS Rewrites: ON
- cPanel → SSL/TLS
- Manage SSL Sites
- Install SSL Certificate
- Auto-SSL: Enabled
Sve je već konfigurirano u .htaccess:
- ✅
Strict-Transport-Security(HSTS) - ✅
X-Frame-Options(Clickjacking protection) - ✅
X-XSS-Protection(XSS filter) - ✅
X-Content-Type-Options(MIME sniffing) - ✅
Content-Security-Policy(CSP) - ✅
Referrer-Policy
Provjeri headers:
https://securityheaders.com/
Nakon ove konfiguracije:
- Localhost:
https://localhost/hotel_managment/✅ - Secure Cookies: Automatski se koriste na HTTPS ✅
- Auto-redirect: HTTP → HTTPS (može se disable-ati) ✅
- Security Headers: Svi postavljeni ✅
Za produkciju: Zamijeni self-signed certifikat s Let's Encrypt ili sličnim!