İçindekiler
- 1 Bir Sabah Panikte Uyanmamak İçin: mTLS ile Tanışma
- 2 mTLS Neden İşe Yarıyor? Kısa Bir Yol Haritası
- 3 Kendi Mini CA’nı Kur: İstemci Sertifikalarını Üretme
- 4 Nginx’te mTLS: İnce Ama Güçlü Bir Dokunuş
- 5 Tarayıcı ve Cihazlara Sertifika Yükleme: Püf Noktaları
- 6 Test Et, Etkinliğini Gör: curl ve Loglarla Güven
- 7 Güvenliği Katmanlamak: mTLS + Diğer Tatlı Dokunuşlar
- 8 Dağıtım, Rotasyon ve İptal: Günlük Hayatın Küçük Rutinleri
- 9 Kendini Kilitleme Tehlikesi: Kaçış Kapısı Bırak
- 10 Proxy ve CDN Arkasında mTLS: Nerede Sonlandırmalı?
- 11 Güvenli Varsayılanlar: Küçük Ayarlar, Büyük Rahatlık
- 12 Geliştirme Ortamı ve Sahne (Staging) İçin Küçük Kısayollar
- 13 Sık Yapılan Hatalar: Küçük Tuzaklar
- 14 İleri Seviye: Kısa Ömürlü Sertifikalar ve Otomatik Yenileme
- 15 Örnek Bir Tam Akış: Sıfırdan Üretime
- 16 Kapanış: Kapının Anahtarı Cebinde Olduğunda
Bir Sabah Panikte Uyanmamak İçin: mTLS ile Tanışma
Hiç başınıza geldi mi? Sabah kahvenizi alıp yönetim paneline girmek isterken ekranınızın donup kaldığı o hissiyat… Şifreyi üçüncü kez yanlış girmişsiniz, üstelik giriş sayfasına anormal bir trafik yağıyor. O an anlıyorsunuz: yalnız değilsiniz, botlar da sizinle panel kapısının önünde. Benimle de oldu. O gün düşündüm; giriş formunun önüne sadece bir duvar değil, anahtarı cebimde olan bir kapı koymalıyım. İşte burada karşılıklı TLS, yani mTLS devreye giriyor.
mTLS’i şöyle hayal edin: Normal TLS, sitenin kimliğini size ispat eder. mTLS ise karşılıklı bir tokalaşmadır; site size kimliğini gösterirken siz de siteye kim olduğunuzu gösterirsiniz. Hem site güvenlidir, hem de kapıdan geçmek için özel bir kart gerekir. Bu yazıda, Nginx’te istemci sertifikalarıyla mTLS kurmayı adım adım anlatacağım. Sertifika üretiminden tarayıcıya yüklemeye, Nginx ayarlarından günlük bakımına kadar gideceğiz. İşin güzel yanı, karmaşık görünen bu dünyanın aslında ne kadar kontrollü ve huzurlu bir güvenlik hissi verdiğini göreceksiniz.
Yol boyunca küçük püf noktaları paylaşacağım. Mesela tarayıcılarda sertifika import etme, mobil cihazlar için pratik yöntemler, kaybolan sertifikaları hızlıca iptal etme ve asla kendinizi kilitlememe taktikleri… Hazırsanız, birlikte panel kapısının önüne sağlam bir bekçi koyalım.
mTLS Neden İşe Yarıyor? Kısa Bir Yol Haritası
Mesela şöyle düşünün: Binanızın girişinde bir güvenlik var, ziyaretçi defterine adını yazıyor, belki bir kimlik bırakıyor. Ama sizin kartınız varsa turnike tek tıkla açılıyor. mTLS tam olarak bu hissi verir. Giriş formu hâlâ orada olabilir ama formun görülebildiği sayfaya ulaşmak için önce tarayıcı, cebinizdeki istemci sertifikası ile kendini ispatlar. Botlar, rastgele saldırılar, basit sızma denemeleri bu noktada biter. Paneliniz, anonim trafiğe karşı görünmez gibi olur.
Avantajları tatlı: Birincisi, saldırı yüzeyi daralır. İkincisi, kaba kuvvet denemeleri daha giriş ekranına gelmeden söner. Üçüncüsü, kimliği belli kullanıcılar üzerinden log tutmak, sorumluluk alanlarını görmek kolaylaşır. Peki dezavantaj hiç mi yok? Var tabii: Sertifika dağıtımı ve kaydı biraz emek ister. Yeni bir laptop aldığınızda sertifikayı aktarmanız gerekir. Ekibiniz büyüdükçe bu süreçleri düzene koymak önem kazanır. Ama bunların hepsi yönetilebilir, üstelik düzenli bir akış oturtunca çok daha öngörülebilir hale gelir.
Ben genelde mTLS’i tek başına bırakmam. Bazen IP kısıtlama ile birleşir, bazen ekstra bir parola katmanı ile… Ama ana kapı mTLS olur. Geri kalanı, içerideki odalara giden koridorlardaki ufak kontroller gibi düşünebilirsiniz. Merak etmeyin, içerikte hepsini tek tek konuşacağız.
Kendi Mini CA’nı Kur: İstemci Sertifikalarını Üretme
Basit ve Etkili: İç CA (Certificate Authority) ile Başla
İstemci sertifikalarını iki şekilde düşünebilirsiniz: Dış bir kurumdan almak veya kendi iç CA’nızı kurmak. Yönetim paneli gibi dahili bir dünyada, iç CA genelde en pratik olanıdır. Böylece kimlere sertifika verileceğini siz belirlersiniz, sürelerini ayarlarsınız, gerekince iptal edersiniz. Küçük ekiplerde OpenSSL ile gayet rahat gidilir; büyüyen ekiplerde küçük bir CA servisi kullanmak işleri yağ gibi akıtır.
Hadi, temel bir kurulum yapalım. Aşağıdaki örnekler, tek bir klasör içinde hızlıca denemenizi sağlar. Üretimde, anahtarlara ve dosya izinlerine ciddi özen gösterin. CA anahtarını çelik kasa gibi düşünün; erişimi kısıtlayın, yedekleyin, kimseyle paylaşmayın.
Root CA Sertifikası Oluşturma
mkdir -p ~/mtls-demo && cd ~/mtls-demo
# CA özel anahtarı (gizli tutun)
openssl genrsa -out ca.key 4096
# Kök sertifika (10 yıllık örnek)
openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650
-out ca.crt -subj "/CN=Internal Admin CA"
Bu komutlarla bir kök CA’nız oldu. Daha düzenli bir yapı isterseniz ara CA (intermediate) ekleyebilirsiniz. Ama küçük bir ekipte tek kök CA ile başlamak yeterli. Önemli olan, bu CA ile yalnızca istemci sertifikaları üretmek ve onun güven zincirini Nginx’e tanıtmak.
Kullanıcı İçin İstemci Sertifikası
# Kullanıcı özel anahtarı
openssl genrsa -out alice.key 4096
# CSR (sertifika isteği)
openssl req -new -key alice.key -out alice.csr -subj "/CN=Alice Admin/[email protected]"
# Basit bir ext dosyası hazırlayalım
cat > client.ext <<EOF
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = clientAuth
subjectAltName = email:[email protected]
EOF
# İstemci sertifikasını imzala
openssl x509 -req -in alice.csr -CA ca.crt -CAkey ca.key -CAcreateserial
-out alice.crt -days 825 -sha256 -extfile client.ext
Böylece Alice için bir sertifika hazır. Tarayıcıya kolayca yüklemek için PKCS#12 formatına dönüştürelim. Oluştururken sizden bir parola isteyecektir; bu parola, dosyayı cihazlar arasında taşırken ek bir güvenlik katmanı sağlar.
# Tarayıcı/iOS/macOS/Windows için uygun paket
openssl pkcs12 -export -inkey alice.key -in alice.crt -certfile ca.crt -out alice.p12
Bu alice.p12 dosyasını güvenli bir kanalla (örneğin şifrelenmiş e-posta eki veya güvenli bir dosya paylaşım aracı) kullanıcıya verin. Parolayı asla aynı kanaldan göndermeyin. Ben genelde parola için ayrı bir mesaj kanalı veya tek kullanımlık bir şifre paylaşım bağlantısı kullanıyorum.
Nginx’te mTLS: İnce Ama Güçlü Bir Dokunuş
Temel Mantık
Nginx’e iki şey öğretmemiz gerekiyor: Hangi CA’ya güveneceği ve hangi yol ya da host üzerinde istemci sertifikası isteyeceği. Güvendiği CA listesini verince, Nginx tarayıcının gönderdiği sertifikayı doğrular. Biz de bu zorunluluğu sadece /admin gibi kritik yollar için açarız. Böylece sitenin geri kalanında normal TLS çalışır, panel kapısında ise mTLS devreye girer.
Önce CA sertifikanızı Nginx’e tanıtın ve panel yolu için mTLS’i açın. Aşağıdaki örnek, production bir sunucuda tipik bir kurulumun sadeleştirilmiş hali:
server {
listen 443 ssl http2;
server_name site.example;
# Sunucu sertifikanız (Let’s Encrypt vb.)
ssl_certificate /etc/letsencrypt/live/site.example/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/site.example/privkey.pem;
# İstemci sertifikaları için güvenilen CA
ssl_client_certificate /etc/nginx/mtls/ca.crt;
# Varsayılan olarak istemci sertifikası isteme (kapalı)
ssl_verify_client off;
ssl_verify_depth 2;
# Normal site içerikleri
location / {
proxy_pass http://app_backend;
}
# Yönetim paneli - burada mTLS şart koşuyoruz
location /admin/ {
# Bu lokasyonda mTLS ON
ssl_verify_client on;
# İsteğe bağlı: istemci bilgilerini upstream’e iletmek
proxy_set_header X-Client-Verify $ssl_client_verify;
proxy_set_header X-Client-Subject $ssl_client_s_dn;
proxy_set_header X-Client-Issuer $ssl_client_i_dn;
proxy_pass http://app_backend_admin;
}
# Sağlık kontrolüne istisna tanımak isteyebilirsiniz
location = /healthz { return 204; }
}
Burada kritik detay, ssl_verify_client direktifini sadece /admin lokasyonunda açmak. Böylece diğer sayfalar normal kullanıcılar için çalışmaya devam ederken, panel kapısında sertifika kontrolü devrede kalır. Bu esneklik, üretimde işleri çok kolaylaştırır.
Yanlış Sertifika veya Sertifika Yoksa Ne Olur?
Nginx, istemci sertifikası eksikse ya da doğrulama başarısızsa özel hata kodları kullanır. İsterseniz bu durumlar için kullanıcı dostu bir hata mesajı döndürebilirsiniz. “Erişim için istemci sertifikası gerekiyor” gibi net bir cümle, hem ekip arkadaşınıza yol gösterir hem de dış dünyaya fazladan ipucu vermez.
# Server bloğuna ek
error_page 495 496 = /__mtls_required;
location = /__mtls_required {
return 403 "Yönetim paneline erişim için istemci sertifikası gerekiyor.";
}
Bu küçük dokunuş, neyin eksik olduğunu anlaşılır kılar. Dışarıya fazla detay vermeden, içeridekine gereken ipucunu vermiş olursunuz.
Kimlere İzinli Olduğunu İnce Ayarlamak
Bazen sadece sertifikası olanlar değil, belirli kişilerin geçmesi gerekir. O zaman “CN alanı şu olanlar geçsin” gibi minik bir liste tutabilirsiniz. Nginx’in map özelliği burada harika iş görür.
map $ssl_client_s_dn $is_allowed {
default 0;
"CN=Alice Admin/[email protected]" 1;
"CN=Bob Admin/[email protected]" 1;
}
server {
...
location /admin/ {
ssl_verify_client on;
if ($is_allowed = 0) { return 403; }
proxy_pass http://app_backend_admin;
}
}
Bu yöntem, CRL gibi daha karmaşık iptal mekanizmalarına girmeden hızlı karar vermeyi sağlar. Büyük ekiplerde yine de iptal listeleri (CRL) veya kısa ömürlü sertifikalar daha sağlıklı olur.
CRL (İptal Listesi) Kullanmaya Giriş
Eğer bir sertifikayı iptal etmek isterseniz, Nginx’e bir CRL dosyası tanıtabilirsiniz. Bu konu biraz prosedür ister; CA tarafında iptal edilen sertifikaları bir dosyada toplarsınız ve Nginx’e gösterirsiniz:
# Örnek: Nginx'e CRL dosyasını tanıtma
ssl_crl /etc/nginx/mtls/ca.crl;
CRL oluşturma/yenileme süreçleri, klasik OpenSSL akışıyla veya küçük bir CA hizmetiyle yapılabilir. Ekip büyüdükçe, bu dosyanın düzenli güncellenmesi önemli hale gelir. Çok sık iptal/ekleme yapılan ortamlarda kısa ömürlü sertifikalar da iyi bir taktiktir.
Nginx’te SSL/mTLS direktiflerinin tam listesine göz atmak isterseniz, Nginx SSL modülünün resmi dokümantasyonunu bir kenara not alın. İhtiyaç duyduğunuzda dönüp bakmak rahatlatır.
Tarayıcı ve Cihazlara Sertifika Yükleme: Püf Noktaları
PKCS#12 (p12/pfx) Paketini İçeri Almak
Günlük hayatta en çok PKCS#12 paketini görürüz. İçinde hem sertifika hem de özel anahtar vardır; parola ile korunur. macOS’ta doğrudan çift tıklayıp Anahtar Zinciri’ne alabilirsiniz. iOS’ta dosyayı açınca ayarlara yönlendirir. Windows’ta sihirbaz sizi adım adım götürür. Linux’ta tarayıcının sertifika ayarlarından içeri aktarılır. Hepsinde ortak olan, CA sertifikasını da güven listesine eklemeyi unutmamaktır. Yoksa tarayıcı sertifikanıza şüpheyle bakabilir.
Yeni Cihaz, Kayıp Cihaz: Pratik Dağıtım
Yeni bir dizüstü aldığınızda p12 dosyasını güvenli bir yöntemle yollayın. Ben genelde tek kullanımlık bir indirme linki ve parola için ayrı bir kanal tercih ediyorum. Telefon değiştiğinde süreç aynı; p12 dosyası iOS’ta ayarlar üzerinden kolayca yüklenir. Android tarafında da benzer şekilde güvenlik ayarlarından eklenir. Bazen şirket içi bir portal yapıp p12’leri oradan çekmek güzel olur; ama mutlaka indirme linki ömürlü olsun, herkese açık kalmasın.
Sertifikayı Tarayıcı Sormuyor mu?
Bazen şu olur: “Sertifikayı yükledim ama site benden istemiyor.” Bu genelde ya Nginx’te lokasyon bazında mTLS’in açılmamasından ya da tarayıcının ilgili sertifikayı uygun bulmamasından kaynaklanır. ssl_verify_client on doğru yerde mi, CA dosyası doğru mu, tarayıcıda sertifika kişisel sertifikalar bölümünde mi; bunlara bakın. Chrome/Firefox’ta doğru profil üzerinde olduğunuzdan emin olun. Gerekirse sertifikayı silip yeniden içe aktarın.
Test Et, Etkinliğini Gör: curl ve Loglarla Güven
curl ile Hızlı Yoklama
Terminalde birkaç komutla her şeyi sınayabilirsiniz. Önce sertifikasız bir deneme yapın; panelin mTLS istediğini göreceksiniz. Sonra sertifika ile deneyin.
# Sertifikasız deneme (403 beklenir)
curl -i https://site.example/admin/
# Sertifikalı deneme (200 beklenir)
curl -i --cert alice.crt --key alice.key https://site.example/admin/
# Tek bir p12 dosyasıyla (gerekirse --cert-type P12)
curl -i --cert-type P12 --cert alice.p12:mypassword https://site.example/admin/
curl, istemci sertifikaları konusunda epey esnektir. Derin bir referans isterseniz curl’un SSL sertifikaları hakkında hazırladığı sayfaya bakabilirsiniz. Orada p12/pem kullanımı, sertifika zinciri, hata mesajları gibi detayları bulursunuz.
Loglarda Kim Geldi, Kim Geçti?
mTLS’in sevdiğim taraflarından biri, logların anlam kazanması. Artık sadece bir IP adresi değil, aynı zamanda “Alice geldi, doğrulandı” gibi net bir bilgi görebilirsiniz. Nginx log formatına istemci öznesini eklemek çok faydalıdır.
log_format mtls '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'subj="$ssl_client_s_dn" verify="$ssl_client_verify"';
access_log /var/log/nginx/access_mtls.log mtls;
Bu sayede log analizi yaparken gerçek kullanıcılarla yüzleşirsiniz. Eğer merkezi loglama kurduysanız, daha da tatlı. Biz mesela VPS log yönetimini Loki ve Promtail ile merkezileştirme macerasında bu tarz alanları işin içine katıp alarmları anlamlı hale getirmiştik. Panel kapısında başarısız mTLS denemelerini ayrı bir panoya koyduğunuzda, gece uykunuz bile daha derin olur.
Güvenliği Katmanlamak: mTLS + Diğer Tatlı Dokunuşlar
mTLS tek başına güçlüdür, ama yanında başka küçük önlemlerle birleşince harika bir tablo ortaya çıkar. Mesela yönetim yolu için IP kısıtlama eklemek, sadece ofis VPN’inden gelindiğinde kapıyı göstermeyi sağlar. Bazı durumlarda basit bir ek parola (basic auth) bile farklı bir katman sunar. Özellikle CMS panellerinde, giriş denemeleri sık sık can sıkabilir. Bunun için daha önce paylaştığımız Nginx rate limiting ve Fail2ban ile kaba kuvvet saldırılarını yumuşatma yazısındaki fikirler, mTLS ile birlikte çok güzel çalışır.
Sertifikalar dünyasında da küçük bir hatırlatma gelsin. “DV, OV, EV” gibi kavramlar dış dünyaya kendinizi kanıtlarken anlamlıdır. Panel dünyasında ise kendi iç CA’nız başrolde olur. Yine de temel kavramları toparlamak isterseniz, DV, OV, EV ve Wildcard SSL rehberimize göz atmak ufuk açar.
WordPress gibi bir sistem kullanıyorsanız, mTLS’i panel kapısına koyup içeride de küçük sertleştirmeler yapmak çok etkili. Bu konuda WordPress güvenlik sertleştirme kontrol listesi yazısındaki maddeler güzel tamamlayıcı olur. Küçük dokunuşlar, birikince koca bir rahatlık veriyor.
Dağıtım, Rotasyon ve İptal: Günlük Hayatın Küçük Rutinleri
Ömürleri Kısa Tut, İşini Kolaylaştır
İstemci sertifikalarını çok uzun süreli vermek yerine, orta vadeli sürelerle ve rotasyon takvimiyle ilerlemek daha rahat. Mesela yılda bir yenilemek, “Aman bu kimindi?” sorusunu masadan kaldırır. Kullanıcı ayrıldığında sertifikayı iptal etmek ve listeden çıkarmak, log haritalarını da temiz tutar.
Otomasyonla Huzur
Küçük bir script ile yeni sertifika üretimi, p12 paketleme ve kullanıcıya iletme adımlarını otomatikleştirmek harika olur. Ekip büyüdükçe, bir mini-portal ve onay akışı kurmak daha da tatlı hale gelir. Açık kaynak tarafta küçük ama iş gören çözümler var. Örneğin bir iç CA hizmeti kurmak isterseniz step-ca dokümantasyonunda pratik örnekler bulabilirsiniz. Böylece CRL, kısa ömür, otomatik yenileme gibi konular standartlaşır.
İptal Etme (Revoke) ve Kriz Yönetimi
Bir cihaz kaybolduğunda ya da kullanıcı ayrıldığında, ilgili sertifikayı iptal etmek gerekir. Eğer map ile allowlist tutuyorsanız, konfigürasyondan kullanıcıyı çıkarıp Nginx’i yeniden yüklemek hızlı bir çözümdür. CRL kullanıyorsanız, iptal listesini güncelleyip Nginx’e tanıttığınızda bu sertifika artık kapıdan giremez. Ben her iki yöntemi de bazen birlikte kullanıyorum; hem allowlist ile hızlı tepki verip hem de arka planda CRL güncelleyerek kalıcı hale getiriyorum.
Kendini Kilitleme Tehlikesi: Kaçış Kapısı Bırak
mTLS’i açıp kapıyı iyice sıkınca, bir anlık hata ile kendinizi dışarıda bırakmak istemezsiniz. Benim standart pratiğim, bir yedek kapı bırakmaktır. Mesela /rescue-admin gibi bir yol, yalnızca VPN içinden gelen IP’lere açık olur ve orada mTLS kapalı olabilir. Böylece olağanüstü durumda içeri girip konfigürasyonu düzeltebilirsiniz. Ayrıca Nginx’i yeniden başlatmadan önce test etmeyi unutmayın:
nginx -t && systemctl reload nginx
Bir diğer küçük önlem de yeni mTLS kuralını önce alt domaine uygulayıp kendiniz test etmek. Her şey düzgün çalışıyorsa, asıl panele taşıyabilirsiniz. Yavaş, dikkatli ve kontrollü gitmek en güzeli.
Proxy ve CDN Arkasında mTLS: Nerede Sonlandırmalı?
Bazen Nginx, bir yük dengeleyici ya da CDN arkasında olur. mTLS’i nerede sonlandıracağınız önemli bir karar. Eğer CDN tarafında sonlandırırsanız, kullanıcıyla mTLS ilişkisi edge’de biter; Nginx’e güvenli bir başlıkla “şu kişi doğrulandı” bilgisi iletilebilir. Doğrudan Nginx’te sonlandırırsanız, işin kontrolü tamamen sizde olur. İkisi de olur; önemli olan zincirin bir yerinde mTLS’in gerçekten zorunlu olmasından emin olmak ve içeride devre dışı bırakılmamasıdır.
Uygulama sunucusuna, istemci sertifikasının öznesini iletmek isterseniz, yukarıda eklediğimiz X-Client-Subject gibi başlıklar iş görür. Uygulama tarafı da “Bu kullanıcı kim?” sorusunu cevaplayıp yetkilendirmeyi daha anlamlı hale getirebilir.
Güvenli Varsayılanlar: Küçük Ayarlar, Büyük Rahatlık
Biraz da küçük ama etkili ayarlardan bahsedeyim. HSTS (Strict-Transport-Security) ile tarayıcılara “Bu siteye her zaman HTTPS ile gel” demek, yanlışlıkla HTTP’ye düşmeyi engeller. Sertifika dosyalarına doğru dosya izinleri vermek, özellikle CA anahtarını saklarken, hayati önem taşır. Nginx konfigürasyonlarını küçük parçalara bölmek düzeni korur. Güncellemeleri düzenli almak, beklenmedik güvenlik açıklarını erkenden kapatır.
İlgili başka bir not: Panel girişini zamana yaymak ve başarısız denemelerde küçük beklemeler eklemek saldırganın enerjisini tüketir. Bu konuda daha önce paylaştığımız rate limiting ve Fail2ban fikirleri mTLS ile birlikte güvenlik dengesini çok güzel tamamlar.
Geliştirme Ortamı ve Sahne (Staging) İçin Küçük Kısayollar
Geliştirmede hayatı kolaylaştırmak için isterseniz kısa ömürlü sertifikalar üretin ve staging ortamında da aynı mTLS kuralını uygulayın. Böylece prod’a geçerken sürpriz yaşamazsınız. Tarayıcılara sertifika yükleme adımlarını ekiple paylaşan mini bir doküman hazırlayın; ekran görüntüleri ekleyin. “Kurulum sihirbazı” gibi küçük bir betik, yeni katılan bir arkadaşın yarım saatte ayağa kalkmasını sağlar.
Uygulama tarafında da loglara “Hangi sertifika geldi?” bilgisini düşmek teşhis için güzel olur. Bir sorun çıktığında hem Nginx loglarına hem uygulama loglarına bakınca, eksik parçalar daha hızlı tamamlanır.
Sık Yapılan Hatalar: Küçük Tuzaklar
Birincisi, CA zincirini Nginx’e eksik vermek. Nginx’in doğruladığı dosyada kök ve varsa ara sertifikalar doğru sırada olmalı. İkincisi, tarayıcıya sadece p12’yi atıp CA’yı güvenilen otoritelere eklemeyi unutmak. Bu durumda tarayıcı sertifikayı görür ama “Aaa, bu kime ait?” diye bakar ve sunmadığı olur. Üçüncüsü, mTLS’i yanlış lokasyonda açmak. Konfigürasyonun kapsamını iyi kontrol edin. Dördüncüsü, yedek kapı bırakmamak. Gecenin bir yarısı, küçük bir yazım hatası yüzünden içeri giremediğinizi hayal etmek bile yorucu.
Bir de “Her şey mTLS, gerisi önemli değil” tuzağı var. mTLS, güçlü bir kapıdır ama içerdeki odalarda da düzen gerekir. Özellikle CMS veya blog kullananlar için küçük sertleştirmeler büyük fark yaratır. Bu bağlamda WordPress güvenlik sertleştirme rehberi pratik ve uygulanabilir bir liste sunuyor; öneririm.
İleri Seviye: Kısa Ömürlü Sertifikalar ve Otomatik Yenileme
Biraz daha ileri gidelim. Kullanıcı sertifikalarını haftalık veya aylık kısa ömürlü verip arka planda otomatik yenilemek, iptal yükünü ciddi azaltır. “Kayboldu mu, çalındı mı” endişesi yerine “Zaten birkaç gün sonra geçersiz olacak” rahatlığı gelir. Böyle bir dünyada CA servisi (ör. step-ca) hayat kurtarır. Küçük bir ajanla cihaz, zamanı gelince kendini yeniler. Yine de kimlik doğrulama ve yetkilendirme akışlarının net olduğundan emin olun; kimin hangi cihaza sertifika alabildiği iyi tanımlı olsun.
Uygulama tarafında da gelen sertifikanın “subject” veya “SAN” alanlarını kullanarak rol bazlı yetkilendirme yapabilirsiniz. “Alice sadece okuma paneline girsin, Bob dağıtım yapabilsin” gibi. Bunun için Nginx’ten geçen başlıkları kullanmak kolay ve pratiktir.
Örnek Bir Tam Akış: Sıfırdan Üretime
Toparlayalım. Adımlar şöyle akar: Önce küçük bir iç CA kurarsınız. Ekip üyeleri için p12 paketler hazırlarsınız. Nginx’te CA’yı tanıtıp yönetim yolu için mTLS’i açarsınız. Log formatlarını zenginleştirir, denemeleri curl’la doğrularsınız. Ardından yedek kapı ve IP kısıtlamalarını eklersiniz. Gerekirse CRL veya kısa ömürlü sertifikalarla iptal/yenileme rutinlerini kurarsınız. Son olarak, olayları merkezi loglamaya alıp küçük alarmlar yazarsınız. Hepsi bu.
Eğer Nginx ve SSL tarafıyla yeni tanışıyorsanız, canlıya alma süreçlerine dair pratik ipuçları bulmak için şu rehbere de göz atabilirsiniz: Node.js’i canlıya alırken Nginx ve SSL ile sakin ilerleme. Oradaki adımlar, mTLS dışında kalan HTTPS ayarlarında da size destek olur.
Kapanış: Kapının Anahtarı Cebinde Olduğunda
Yazının başındaki o sabahı hatırlıyorum. Kapıda bekleyen botlar, başarısız denemeler, log dosyalarında bitmek bilmeyen satırlar… mTLS’i devreye aldıktan sonra panel, artık kalabalık bir caddeye bakan vitrin gibi değil; iç kapının arkasındaki sakin bir oda gibi hissettirdi. Anahtarı olanlar giriyor, olmayanlar kapıda kalıyor. Basit ama etkili.
Sana önerim şu: Önce küçük bir pilot kur. Bir ekibe sertifika ver, Nginx’te sadece bir lokasyonda mTLS’i aç. curl ile test et, tarayıcıda dene, logları izle. Sonra bunu üretime taşı. Sertifikaları düzenli yenile, kaybolanları iptal et, yedek kapıyı unutma. Bir de küçük tavsiye: mTLS’in yanına, yumuşak dokunuşlarla ek önlemler yerleştir. Rate limit, küçük parola katmanları, merkezi loglama… Hepsi bir araya gelince, zihnin de daha sakin kalacak.
Umarım bu rehber, yönetim panelinizi sağlamlaştırırken elinizden tutan bir arkadaş gibi olmuştur. Takıldığınız yerde not alın, adım adım ilerleyin, acele etmeyin. Bir dahaki yazıda görüşmek üzere; kapınızın anahtarı cebinizde, siz huzurlu olun.
