SSL Mixed Content Uyarısı Nasıl Giderilir?
Mixed Content uyarısı, HTTPS sayfanızda HTTP üzerinden yüklenen kaynaklar olduğunda ortaya çıkar. WordPress ve Nginx ile kolayca giderilebilir.
Mixed Content Uyarısı Nedir?
Mixed Content (Karma İçerik) uyarısı, HTTPS üzerinden sunulan bir web sayfasının HTTP protokolü üzerinden içerik (resim, CSS, JavaScript, font vb.) yüklemeye çalışması durumunda tarayıcının gösterdiği güvenlik uyarısıdır. Modern tarayıcılar bu durumu potansiyel güvenlik riski olarak değerlendirip içeriği engeller veya uyarı gösterir.
Tarayıcı konsolunda şu mesajları görürsünüz:
Mixed Content: The page at 'https://example.com' was loaded over HTTPS,
but requested an insecure resource 'http://example.com/image.jpg'.
This request has been blocked; the content must be served over HTTPS.
Mixed Content Türleri
Active Mixed Content (Aktif Karma İçerik)
JavaScript dosyaları, CSS dosyaları ve iFrame'ler gibi sayfayı doğrudan etkileyen kaynaklar HTTP üzerinden yüklenirse tarayıcı bunları tamamen engeller. Bu en tehlikeli türdür.
Passive Mixed Content (Pasif Karma İçerik)
Resimler, ses ve video dosyaları gibi kaynaklar HTTP üzerinden yüklenirse tarayıcı uyarı gösterir ama engellemeyebilir. Yine de adres çubuğunda kilit simgesi kaybolur.
Hatanın Tespit Edilmesi
Tarayıcı Geliştirici Araçları
Chrome veya Firefox'ta F12 tuşuna basın → Console sekmesine gidin → "Mixed Content" veya "insecure" içeren uyarıları inceleyin.
Online Araçlar
- Why No Padlock: https://www.whynopadlock.com
- SSL Checker: https://www.sslshopper.com/ssl-checker.html
- JitBit SSL Check: https://www.jitbit.com/sslcheck
Çözüm 1: WordPress İçin Really Simple SSL
WordPress kullanıyorsanız Really Simple SSL eklentisi en kolay çözümdür:
- WordPress Yönetim Paneli → Eklentiler → Yeni Ekle
- "Really Simple SSL" arayın ve yükleyin
- Aktifleştirin → "Evet, HTTPS'i etkinleştir" butonuna tıklayın
Eklenti otomatik olarak tüm HTTP bağlantılarını HTTPS'e yönlendirir.
Çözüm 2: WordPress Veritabanında URL Güncelleme
Veritabanında hâlâ HTTP URL'leri varsa WP-CLI veya Search & Replace eklentisiyle güncelleyin:
# WP-CLI ile URL değiştirme
wp search-replace 'http://example.com' 'https://example.com' --allow-root --dry-run
# Önizleme tamam görünüyorsa --dry-run kaldırın
wp search-replace 'http://example.com' 'https://example.com' --allow-root
wp-config.php dosyasına şunu ekleyin:
define('WP_HOME','https://example.com');
define('WP_SITEURL','https://example.com');
Çözüm 3: .htaccess ile HTTP→HTTPS Yönlendirme (Apache)
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Çözüm 4: Nginx ile HTTPS Zorunluluğu
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com www.example.com;
# Content Security Policy
add_header Content-Security-Policy "upgrade-insecure-requests;" always;
}
upgrade-insecure-requests direktifi, HTTP kaynakları otomatik olarak HTTPS'e yükseltir.
Çözüm 5: Cloudflare SSL Ayarları
Cloudflare kullanıyorsanız birkaç önemli ayar bulunur:
SSL/TLS Modu
Cloudflare Dashboard → SSL/TLS → Overview bölümünde "Full (Strict)" modunu seçin. "Flexible" mod, Cloudflare ile sunucunuz arasında HTTP kullanarak mixed content sorunlarına yol açabilir.
Always Use HTTPS
Cloudflare Dashboard → SSL/TLS → Edge Certificates → "Always Use HTTPS" seçeneğini aktifleştirin.
Automatic HTTPS Rewrites
Cloudflare Dashboard → SSL/TLS → Edge Certificates → "Automatic HTTPS Rewrites" seçeneğini aktifleştirin. Bu özellik HTTP kaynaklarını otomatik HTTPS'e çevirir.
Çözüm 6: Content Security Policy Başlığı
# Nginx yapılandırması
add_header Content-Security-Policy "upgrade-insecure-requests; default-src https:;" always;
# Apache .htaccess
Header always set Content-Security-Policy "upgrade-insecure-requests; default-src https:;"
Çözüm 7: Harici Kaynakları HTTPS'e Geçirme
HTML kaynak kodunda HTTP referanslarını manuel olarak HTTPS'e değiştirin:
# Yanlış
<img src="http://example.com/logo.png">
<script src="http://cdn.example.com/script.js"></script>
# Doğru
<img src="https://example.com/logo.png">
<script src="https://cdn.example.com/script.js"></script>
# Protokol bağımsız URL (hem HTTP hem HTTPS'te çalışır)
<img src="//example.com/logo.png">
Önleyici Tedbirler
- Yeni içerik eklerken her zaman HTTPS URL kullanın
- Harici CDN ve kaynakların HTTPS desteklediğinden emin olun
- CSP başlığı ile HTTP kaynakları politika düzeyinde engelleyin
- Düzenli mixed content taraması yapın (Why No Padlock gibi araçlarla)
Özet
Mixed Content sorunu, veritabanındaki ve HTML kodundaki HTTP URL'lerini HTTPS'e çevirmekle çözülür. WordPress için Really Simple SSL eklentisi ve WP-CLI search-replace en pratik yöntemdir. Nginx veya Apache'de HTTPS yönlendirme ve Content-Security-Policy başlığı ekleyerek gelecekte oluşabilecek sorunları da önleyebilirsiniz. Cloudflare kullanıyorsanız "Automatic HTTPS Rewrites" özelliğini mutlaka aktifleştirin.
Yorumlar
Henüz yorum yok. İlk yorumu siz yapın!