Merhaba arkadaşlar, bugün başımı çok ağrıtan bir konudan bahsedeceğim: HTTPS'e geçiş ve API'lerin güvenliği. Bir projede, "mixed content" hataları ve güvensiz API çağrıları yüzünden neredeyse kafayı yiyordum. Tarayıcılar artık HTTP sitelerini direkt "güvenli değil" diye işaretliyor. İşte benim izlediğim, en temiz ve sağlam adımlar.
Neden HTTPS ve SSL/TLS Şart?
Eskiden "sitemde form yok, kredi kartı işlemi yok, HTTP idare eder" diye düşünürdük. Ama artık öyle değil! HTTPS, sadece veri şifrelemez. Arama motoru sıralamanızı (SEO) etkiler, tarayıcıların yeni özelliklerine (geolocation, service workers vb.) erişmenizi sağlar ve en önemlisi, kullanıcı ile sunucunuz arasındaki tüm iletişimi korur. API'niz HTTP üzerinden çalışıyorsa, gönderdiğiniz her veri (kullanıcı adı, token, kişisel bilgiler) açık metin olarak gidiyor demektir. Bu riski almak olmaz.
Adım 1: SSL/TLS Sertifikası Edinmek
İlk adım bir sertifika edinmek. Artık Let's Encrypt sayesinde bu tamamen ücretsiz ve otomatik. Eğer hosting paneliniz (cPanel, Plesk) varsa, genelde bir-iki tıkla kurulum yapabiliyorsunuz. Ben sunucu yönetimine daha hakimim diyorsanız, Certbot aracını kullanmanızı şiddetle tavsiye ederim.
Sunucunuza SSH ile bağlanıp aşağıdaki gibi kurulum yapabilirsiniz. (Örnek Nginx için):
Bu komutlar, sertifikayı alıp Nginx yapılandırmanızı otomatik olarak güncelleyecektir. Sertifikanın otomatik yenilenmesi de ayarlanır. certbot gerçekten hayat kurtarıcı.
Adım 2: Sunucu Yapılandırmasını Sıkılaştırmak
Sertifikayı kurmak yeterli değil. Doğru yapılandırma çok önemli. Nginx veya Apache ayarlarınızda güvenliği artıracak bazı direktifler eklemelisiniz. İşte benim Nginx konfigürasyonumdan örnek bir blok:
Buradaki Strict-Transport-Security (HSTS)[COLOR] header'ı çok güçlüdür. Tarayıcıya "bu siteye bir daha sadece HTTPS üzerinden bağlan" talimatı verir. Ancak, sitenizin TÜM alt alan adlarında (subdomain) HTTPS'in çalıştığından emin olmadan includeSubDomains eklemeyin, yoksa kilitlenirsiniz.
Adım 3: Frontend ve API Bağlantılarını Güncellemek
Sertifika hazır, sunucu hazır. Şimdi sıra kodda. Tüm kaynak bağlantılarınızı (CSS, JS, font, image) ve API endpoint'lerinizi mutlaka HTTPS yapın. "//" (protocol-relative URL) kullanmak pratik bir çözümdür, ama ben artık direkt "https://" yazmayı tercih ediyorum.
React, Vue veya vanilla JS'de API isteklerinizi kontrol edin:
Backend tarafında (örneğin Laravel), .env dosyanızdaki APP_URL değişkenini de HTTPS olarak güncellemeyi unutmayın. Aksi takdirde, oluşturulan linkler (password reset maili gibi) yanlış olabilir.
Adım 4: Test ve Doğrulama
Her şeyi yaptıktan sonra test şart! Tarayıcıda kilit simgesine tıklayıp sertifikanın geçerli olduğunu kontrol edin. SSL Labs SSL Test (ssllabs.com/ssltest) sitesine domaininizi yazıp detaylı bir rapor alın. Buradan "A+" notunu hedefleyin. Ayrıca, sitenizde "mixed content" (karışık içerik) hatası kalmadığından emin olun. Tarayıcı geliştirici konsolunun "Security" sekmesi bu konuda size yardımcı olacaktır.
Sonuç olarak, HTTPS'e geçmek artık bir lüks değil, zorunluluk. Bu adımları takip ederek hem kullanıcılarınızın güvenliğini sağlamış, hem de SEO ve performans avantajlarından yararlanmış olursunuz.
Peki ya siz? HTTPS geçiş sürecinizde hangi zorluklarla karşılaştınız? Certbot dışında farklı bir sertifika otomasyon aracı kullanan var mı? Ya da backend API'nizde SSL sertifikası doğrulaması ile ilgili ekstra önlemler alıyor musunuz? Yorumlarda deneyimlerinizi paylaşın!
Eskiden "sitemde form yok, kredi kartı işlemi yok, HTTP idare eder" diye düşünürdük. Ama artık öyle değil! HTTPS, sadece veri şifrelemez. Arama motoru sıralamanızı (SEO) etkiler, tarayıcıların yeni özelliklerine (geolocation, service workers vb.) erişmenizi sağlar ve en önemlisi, kullanıcı ile sunucunuz arasındaki tüm iletişimi korur. API'niz HTTP üzerinden çalışıyorsa, gönderdiğiniz her veri (kullanıcı adı, token, kişisel bilgiler) açık metin olarak gidiyor demektir. Bu riski almak olmaz.
İlk adım bir sertifika edinmek. Artık Let's Encrypt sayesinde bu tamamen ücretsiz ve otomatik. Eğer hosting paneliniz (cPanel, Plesk) varsa, genelde bir-iki tıkla kurulum yapabiliyorsunuz. Ben sunucu yönetimine daha hakimim diyorsanız, Certbot aracını kullanmanızı şiddetle tavsiye ederim.
Sunucunuza SSH ile bağlanıp aşağıdaki gibi kurulum yapabilirsiniz. (Örnek Nginx için):
Bash:
sudo apt update
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d orneksiteniz.com -d www.orneksiteniz.com
Bu komutlar, sertifikayı alıp Nginx yapılandırmanızı otomatik olarak güncelleyecektir. Sertifikanın otomatik yenilenmesi de ayarlanır. certbot gerçekten hayat kurtarıcı.
Sertifikayı kurmak yeterli değil. Doğru yapılandırma çok önemli. Nginx veya Apache ayarlarınızda güvenliği artıracak bazı direktifler eklemelisiniz. İşte benim Nginx konfigürasyonumdan örnek bir blok:
NGINX:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name orneksiteniz.com;
ssl_certificate /etc/letsencrypt/live/orneksiteniz.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/orneksiteniz.com/privkey.pem;
# Modern, güvenli protokoller ve şifreler
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512;
ssl_prefer_server_ciphers off;
# HSTS - Tarayıcıyı hep HTTPS kullanmaya zorla (DİKKATLİ OLUN!)
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
# ... diğer sunucu ayarlarınız ...
}
Buradaki Strict-Transport-Security (HSTS)[COLOR] header'ı çok güçlüdür. Tarayıcıya "bu siteye bir daha sadece HTTPS üzerinden bağlan" talimatı verir. Ancak, sitenizin TÜM alt alan adlarında (subdomain) HTTPS'in çalıştığından emin olmadan includeSubDomains eklemeyin, yoksa kilitlenirsiniz.
Sertifika hazır, sunucu hazır. Şimdi sıra kodda. Tüm kaynak bağlantılarınızı (CSS, JS, font, image) ve API endpoint'lerinizi mutlaka HTTPS yapın. "//" (protocol-relative URL) kullanmak pratik bir çözümdür, ama ben artık direkt "https://" yazmayı tercih ediyorum.
React, Vue veya vanilla JS'de API isteklerinizi kontrol edin:
JavaScript:
// ESKİ ve TEHLİKELİ
fetch('http://api.sitem.com/kullanicilar');
// YENİ ve GÜVENLİ
fetch('https://api.sitem.com/kullanicilar');
// Axios ile global baseURL ayarı (Laravel, Node.js backend için)
import axios from 'axios';
const apiClient = axios.create({
baseURL: 'https://api.sitem.com',
headers: { 'Content-Type': 'application/json' }
});
Backend tarafında (örneğin Laravel), .env dosyanızdaki APP_URL değişkenini de HTTPS olarak güncellemeyi unutmayın. Aksi takdirde, oluşturulan linkler (password reset maili gibi) yanlış olabilir.
Her şeyi yaptıktan sonra test şart! Tarayıcıda kilit simgesine tıklayıp sertifikanın geçerli olduğunu kontrol edin. SSL Labs SSL Test (ssllabs.com/ssltest) sitesine domaininizi yazıp detaylı bir rapor alın. Buradan "A+" notunu hedefleyin. Ayrıca, sitenizde "mixed content" (karışık içerik) hatası kalmadığından emin olun. Tarayıcı geliştirici konsolunun "Security" sekmesi bu konuda size yardımcı olacaktır.
Sonuç olarak, HTTPS'e geçmek artık bir lüks değil, zorunluluk. Bu adımları takip ederek hem kullanıcılarınızın güvenliğini sağlamış, hem de SEO ve performans avantajlarından yararlanmış olursunuz.
Peki ya siz? HTTPS geçiş sürecinizde hangi zorluklarla karşılaştınız? Certbot dışında farklı bir sertifika otomasyon aracı kullanan var mı? Ya da backend API'nizde SSL sertifikası doğrulaması ile ilgili ekstra önlemler alıyor musunuz? Yorumlarda deneyimlerinizi paylaşın!