{"id":1637,"date":"2025-11-10T21:11:12","date_gmt":"2025-11-10T18:11:12","guid":{"rendered":"https:\/\/www.dchost.com\/blog\/yonetim-panellerini-mtls-ile-nasil-kale-gibi-korursun-nginxte-istemci-sertifikalari-adim-adim\/"},"modified":"2025-11-10T21:11:12","modified_gmt":"2025-11-10T18:11:12","slug":"yonetim-panellerini-mtls-ile-nasil-kale-gibi-korursun-nginxte-istemci-sertifikalari-adim-adim","status":"publish","type":"post","link":"https:\/\/www.dchost.com\/blog\/yonetim-panellerini-mtls-ile-nasil-kale-gibi-korursun-nginxte-istemci-sertifikalari-adim-adim\/","title":{"rendered":"Y\u00f6netim Panellerini mTLS ile Nas\u0131l Kale Gibi Korursun? Nginx\u2019te \u0130stemci Sertifikalar\u0131 Ad\u0131m Ad\u0131m"},"content":{"rendered":"<div class=\"dchost-blog-content-wrapper\"><div id=\"toc_container\" class=\"toc_transparent no_bullets\"><p class=\"toc_title\">\u0130&ccedil;indekiler<\/p><ul class=\"toc_list\"><li><a href=\"#Bir_Sabah_Panikte_Uyanmamak_Icin_mTLS_ile_Tanisma\"><span class=\"toc_number toc_depth_1\">1<\/span> Bir Sabah Panikte Uyanmamak \u0130\u00e7in: mTLS ile Tan\u0131\u015fma<\/a><\/li><li><a href=\"#mTLS_Neden_Ise_Yariyor_Kisa_Bir_Yol_Haritasi\"><span class=\"toc_number toc_depth_1\">2<\/span> mTLS Neden \u0130\u015fe Yar\u0131yor? K\u0131sa Bir Yol Haritas\u0131<\/a><\/li><li><a href=\"#Kendi_Mini_CAni_Kur_Istemci_Sertifikalarini_Uretme\"><span class=\"toc_number toc_depth_1\">3<\/span> Kendi Mini CA\u2019n\u0131 Kur: \u0130stemci Sertifikalar\u0131n\u0131 \u00dcretme<\/a><ul><li><a href=\"#Basit_ve_Etkili_Ic_CA_Certificate_Authority_ile_Basla\"><span class=\"toc_number toc_depth_2\">3.1<\/span> Basit ve Etkili: \u0130\u00e7 CA (Certificate Authority) ile Ba\u015fla<\/a><\/li><li><a href=\"#Root_CA_Sertifikasi_Olusturma\"><span class=\"toc_number toc_depth_2\">3.2<\/span> Root CA Sertifikas\u0131 Olu\u015fturma<\/a><\/li><li><a href=\"#Kullanici_Icin_Istemci_Sertifikasi\"><span class=\"toc_number toc_depth_2\">3.3<\/span> Kullan\u0131c\u0131 \u0130\u00e7in \u0130stemci Sertifikas\u0131<\/a><\/li><\/ul><\/li><li><a href=\"#Nginxte_mTLS_Ince_Ama_Guclu_Bir_Dokunus\"><span class=\"toc_number toc_depth_1\">4<\/span> Nginx\u2019te mTLS: \u0130nce Ama G\u00fc\u00e7l\u00fc Bir Dokunu\u015f<\/a><ul><li><a href=\"#Temel_Mantik\"><span class=\"toc_number toc_depth_2\">4.1<\/span> Temel Mant\u0131k<\/a><\/li><li><a href=\"#Yanlis_Sertifika_veya_Sertifika_Yoksa_Ne_Olur\"><span class=\"toc_number toc_depth_2\">4.2<\/span> Yanl\u0131\u015f Sertifika veya Sertifika Yoksa Ne Olur?<\/a><\/li><li><a href=\"#Kimlere_Izinli_Oldugunu_Ince_Ayarlamak\"><span class=\"toc_number toc_depth_2\">4.3<\/span> Kimlere \u0130zinli Oldu\u011funu \u0130nce Ayarlamak<\/a><\/li><li><a href=\"#CRL_Iptal_Listesi_Kullanmaya_Giris\"><span class=\"toc_number toc_depth_2\">4.4<\/span> CRL (\u0130ptal Listesi) Kullanmaya Giri\u015f<\/a><\/li><\/ul><\/li><li><a href=\"#Tarayici_ve_Cihazlara_Sertifika_Yukleme_Puf_Noktalari\"><span class=\"toc_number toc_depth_1\">5<\/span> Taray\u0131c\u0131 ve Cihazlara Sertifika Y\u00fckleme: P\u00fcf Noktalar\u0131<\/a><ul><li><a href=\"#PKCS12_p12pfx_Paketini_Iceri_Almak\"><span class=\"toc_number toc_depth_2\">5.1<\/span> PKCS#12 (p12\/pfx) Paketini \u0130\u00e7eri Almak<\/a><\/li><li><a href=\"#Yeni_Cihaz_Kayip_Cihaz_Pratik_Dagitim\"><span class=\"toc_number toc_depth_2\">5.2<\/span> Yeni Cihaz, Kay\u0131p Cihaz: Pratik Da\u011f\u0131t\u0131m<\/a><\/li><li><a href=\"#Sertifikayi_Tarayici_Sormuyor_mu\"><span class=\"toc_number toc_depth_2\">5.3<\/span> Sertifikay\u0131 Taray\u0131c\u0131 Sormuyor mu?<\/a><\/li><\/ul><\/li><li><a href=\"#Test_Et_Etkinligini_Gor_curl_ve_Loglarla_Guven\"><span class=\"toc_number toc_depth_1\">6<\/span> Test Et, Etkinli\u011fini G\u00f6r: curl ve Loglarla G\u00fcven<\/a><ul><li><a href=\"#curl_ile_Hizli_Yoklama\"><span class=\"toc_number toc_depth_2\">6.1<\/span> curl ile H\u0131zl\u0131 Yoklama<\/a><\/li><li><a href=\"#Loglarda_Kim_Geldi_Kim_Gecti\"><span class=\"toc_number toc_depth_2\">6.2<\/span> Loglarda Kim Geldi, Kim Ge\u00e7ti?<\/a><\/li><\/ul><\/li><li><a href=\"#Guvenligi_Katmanlamak_mTLS_Diger_Tatli_Dokunuslar\"><span class=\"toc_number toc_depth_1\">7<\/span> G\u00fcvenli\u011fi Katmanlamak: mTLS + Di\u011fer Tatl\u0131 Dokunu\u015flar<\/a><\/li><li><a href=\"#Dagitim_Rotasyon_ve_Iptal_Gunluk_Hayatin_Kucuk_Rutinleri\"><span class=\"toc_number toc_depth_1\">8<\/span> Da\u011f\u0131t\u0131m, Rotasyon ve \u0130ptal: G\u00fcnl\u00fck Hayat\u0131n K\u00fc\u00e7\u00fck Rutinleri<\/a><ul><li><a href=\"#Omurleri_Kisa_Tut_Isini_Kolaylastir\"><span class=\"toc_number toc_depth_2\">8.1<\/span> \u00d6m\u00fcrleri K\u0131sa Tut, \u0130\u015fini Kolayla\u015ft\u0131r<\/a><\/li><li><a href=\"#Otomasyonla_Huzur\"><span class=\"toc_number toc_depth_2\">8.2<\/span> Otomasyonla Huzur<\/a><\/li><li><a href=\"#Iptal_Etme_Revoke_ve_Kriz_Yonetimi\"><span class=\"toc_number toc_depth_2\">8.3<\/span> \u0130ptal Etme (Revoke) ve Kriz Y\u00f6netimi<\/a><\/li><\/ul><\/li><li><a href=\"#Kendini_Kilitleme_Tehlikesi_Kacis_Kapisi_Birak\"><span class=\"toc_number toc_depth_1\">9<\/span> Kendini Kilitleme Tehlikesi: Ka\u00e7\u0131\u015f Kap\u0131s\u0131 B\u0131rak<\/a><\/li><li><a href=\"#Proxy_ve_CDN_Arkasinda_mTLS_Nerede_Sonlandirmali\"><span class=\"toc_number toc_depth_1\">10<\/span> Proxy ve CDN Arkas\u0131nda mTLS: Nerede Sonland\u0131rmal\u0131?<\/a><\/li><li><a href=\"#Guvenli_Varsayilanlar_Kucuk_Ayarlar_Buyuk_Rahatlik\"><span class=\"toc_number toc_depth_1\">11<\/span> G\u00fcvenli Varsay\u0131lanlar: K\u00fc\u00e7\u00fck Ayarlar, B\u00fcy\u00fck Rahatl\u0131k<\/a><\/li><li><a href=\"#Gelistirme_Ortami_ve_Sahne_Staging_Icin_Kucuk_Kisayollar\"><span class=\"toc_number toc_depth_1\">12<\/span> Geli\u015ftirme Ortam\u0131 ve Sahne (Staging) \u0130\u00e7in K\u00fc\u00e7\u00fck K\u0131sayollar<\/a><\/li><li><a href=\"#Sik_Yapilan_Hatalar_Kucuk_Tuzaklar\"><span class=\"toc_number toc_depth_1\">13<\/span> S\u0131k Yap\u0131lan Hatalar: K\u00fc\u00e7\u00fck Tuzaklar<\/a><\/li><li><a href=\"#Ileri_Seviye_Kisa_Omurlu_Sertifikalar_ve_Otomatik_Yenileme\"><span class=\"toc_number toc_depth_1\">14<\/span> \u0130leri Seviye: K\u0131sa \u00d6m\u00fcrl\u00fc Sertifikalar ve Otomatik Yenileme<\/a><\/li><li><a href=\"#Ornek_Bir_Tam_Akis_Sifirdan_Uretime\"><span class=\"toc_number toc_depth_1\">15<\/span> \u00d6rnek Bir Tam Ak\u0131\u015f: S\u0131f\u0131rdan \u00dcretime<\/a><\/li><li><a href=\"#Kapanis_Kapinin_Anahtari_Cebinde_Oldugunda\"><span class=\"toc_number toc_depth_1\">16<\/span> Kapan\u0131\u015f: Kap\u0131n\u0131n Anahtar\u0131 Cebinde Oldu\u011funda<\/a><\/li><\/ul><\/div>\n<h2 id=\"section-1\"><span id=\"Bir_Sabah_Panikte_Uyanmamak_Icin_mTLS_ile_Tanisma\">Bir Sabah Panikte Uyanmamak \u0130\u00e7in: mTLS ile Tan\u0131\u015fma<\/span><\/h2>\n<p>Hi\u00e7 ba\u015f\u0131n\u0131za geldi mi? Sabah kahvenizi al\u0131p y\u00f6netim paneline girmek isterken ekran\u0131n\u0131z\u0131n donup kald\u0131\u011f\u0131 o hissiyat\u2026 \u015eifreyi \u00fc\u00e7\u00fcnc\u00fc kez yanl\u0131\u015f girmi\u015fsiniz, \u00fcstelik giri\u015f sayfas\u0131na anormal bir trafik ya\u011f\u0131yor. O an anl\u0131yorsunuz: yaln\u0131z de\u011filsiniz, botlar da sizinle panel kap\u0131s\u0131n\u0131n \u00f6n\u00fcnde. Benimle de oldu. O g\u00fcn d\u00fc\u015f\u00fcnd\u00fcm; giri\u015f formunun \u00f6n\u00fcne sadece bir duvar de\u011fil, anahtar\u0131 cebimde olan bir kap\u0131 koymal\u0131y\u0131m. \u0130\u015fte burada <strong>kar\u015f\u0131l\u0131kl\u0131 TLS<\/strong>, yani <strong>mTLS<\/strong> devreye giriyor.<\/p>\n<p>mTLS\u2019i \u015f\u00f6yle hayal edin: Normal TLS, sitenin kimli\u011fini size ispat eder. mTLS ise kar\u015f\u0131l\u0131kl\u0131 bir tokala\u015fmad\u0131r; site size kimli\u011fini g\u00f6sterirken siz de siteye kim oldu\u011funuzu g\u00f6sterirsiniz. Hem site g\u00fcvenlidir, hem de kap\u0131dan ge\u00e7mek i\u00e7in <strong>\u00f6zel bir kart<\/strong> gerekir. Bu yaz\u0131da, <strong>Nginx\u2019te istemci sertifikalar\u0131yla mTLS kurmay\u0131<\/strong> ad\u0131m ad\u0131m anlataca\u011f\u0131m. Sertifika \u00fcretiminden taray\u0131c\u0131ya y\u00fcklemeye, Nginx ayarlar\u0131ndan g\u00fcnl\u00fck bak\u0131m\u0131na kadar gidece\u011fiz. \u0130\u015fin g\u00fczel yan\u0131, karma\u015f\u0131k g\u00f6r\u00fcnen bu d\u00fcnyan\u0131n asl\u0131nda ne kadar <strong>kontroll\u00fc ve huzurlu<\/strong> bir g\u00fcvenlik hissi verdi\u011fini g\u00f6receksiniz.<\/p>\n<p>Yol boyunca k\u00fc\u00e7\u00fck p\u00fcf noktalar\u0131 payla\u015faca\u011f\u0131m. Mesela taray\u0131c\u0131larda sertifika import etme, mobil cihazlar i\u00e7in pratik y\u00f6ntemler, kaybolan sertifikalar\u0131 h\u0131zl\u0131ca iptal etme ve asla kendinizi kilitlememe taktikleri\u2026 Haz\u0131rsan\u0131z, birlikte panel kap\u0131s\u0131n\u0131n \u00f6n\u00fcne sa\u011flam bir bek\u00e7i koyal\u0131m.<\/p>\n<h2 id=\"section-2\"><span id=\"mTLS_Neden_Ise_Yariyor_Kisa_Bir_Yol_Haritasi\">mTLS Neden \u0130\u015fe Yar\u0131yor? K\u0131sa Bir Yol Haritas\u0131<\/span><\/h2>\n<p>Mesela \u015f\u00f6yle d\u00fc\u015f\u00fcn\u00fcn: Binan\u0131z\u0131n giri\u015finde bir g\u00fcvenlik var, ziyaret\u00e7i defterine ad\u0131n\u0131 yaz\u0131yor, belki bir kimlik b\u0131rak\u0131yor. Ama sizin kart\u0131n\u0131z varsa turnike tek t\u0131kla a\u00e7\u0131l\u0131yor. mTLS tam olarak bu hissi verir. Giri\u015f formu h\u00e2l\u00e2 orada olabilir ama <strong>formun g\u00f6r\u00fclebildi\u011fi sayfaya ula\u015fmak<\/strong> i\u00e7in \u00f6nce taray\u0131c\u0131, cebinizdeki <strong>istemci sertifikas\u0131<\/strong> ile kendini ispatlar. Botlar, rastgele sald\u0131r\u0131lar, basit s\u0131zma denemeleri bu noktada biter. Paneliniz, anonim trafi\u011fe kar\u015f\u0131 g\u00f6r\u00fcnmez gibi olur.<\/p>\n<p>Avantajlar\u0131 tatl\u0131: Birincisi, sald\u0131r\u0131 y\u00fczeyi daral\u0131r. \u0130kincisi, kaba kuvvet denemeleri daha giri\u015f ekran\u0131na gelmeden s\u00f6ner. \u00dc\u00e7\u00fcnc\u00fcs\u00fc, <strong>kimli\u011fi belli kullan\u0131c\u0131lar<\/strong> \u00fczerinden log tutmak, sorumluluk alanlar\u0131n\u0131 g\u00f6rmek kolayla\u015f\u0131r. Peki dezavantaj hi\u00e7 mi yok? Var tabii: Sertifika da\u011f\u0131t\u0131m\u0131 ve kayd\u0131 biraz emek ister. Yeni bir laptop ald\u0131\u011f\u0131n\u0131zda sertifikay\u0131 aktarman\u0131z gerekir. Ekibiniz b\u00fcy\u00fcd\u00fck\u00e7e bu s\u00fcre\u00e7leri d\u00fczene koymak \u00f6nem kazan\u0131r. Ama bunlar\u0131n hepsi y\u00f6netilebilir, \u00fcstelik d\u00fczenli bir ak\u0131\u015f oturtunca \u00e7ok daha <strong>\u00f6ng\u00f6r\u00fclebilir<\/strong> hale gelir.<\/p>\n<p>Ben genelde mTLS\u2019i tek ba\u015f\u0131na b\u0131rakmam. Bazen <strong>IP k\u0131s\u0131tlama<\/strong> ile birle\u015fir, bazen ekstra bir <strong>parola katman\u0131<\/strong> ile\u2026 Ama ana kap\u0131 mTLS olur. Geri kalan\u0131, i\u00e7erideki odalara giden koridorlardaki ufak kontroller gibi d\u00fc\u015f\u00fcnebilirsiniz. Merak etmeyin, i\u00e7erikte hepsini tek tek konu\u015faca\u011f\u0131z.<\/p>\n<h2 id=\"section-3\"><span id=\"Kendi_Mini_CAni_Kur_Istemci_Sertifikalarini_Uretme\">Kendi Mini CA\u2019n\u0131 Kur: \u0130stemci Sertifikalar\u0131n\u0131 \u00dcretme<\/span><\/h2>\n<h3><span id=\"Basit_ve_Etkili_Ic_CA_Certificate_Authority_ile_Basla\">Basit ve Etkili: \u0130\u00e7 CA (Certificate Authority) ile Ba\u015fla<\/span><\/h3>\n<p>\u0130stemci sertifikalar\u0131n\u0131 iki \u015fekilde d\u00fc\u015f\u00fcnebilirsiniz: D\u0131\u015f bir kurumdan almak veya kendi <strong>i\u00e7 CA\u2019n\u0131z\u0131<\/strong> kurmak. Y\u00f6netim paneli gibi dahili bir d\u00fcnyada, i\u00e7 CA genelde en pratik olan\u0131d\u0131r. B\u00f6ylece kimlere sertifika verilece\u011fini siz belirlersiniz, s\u00fcrelerini ayarlars\u0131n\u0131z, gerekince iptal edersiniz. K\u00fc\u00e7\u00fck ekiplerde OpenSSL ile gayet rahat gidilir; b\u00fcy\u00fcyen ekiplerde k\u00fc\u00e7\u00fck bir CA servisi kullanmak i\u015fleri ya\u011f gibi ak\u0131t\u0131r.<\/p>\n<p>Hadi, temel bir kurulum yapal\u0131m. A\u015fa\u011f\u0131daki \u00f6rnekler, tek bir klas\u00f6r i\u00e7inde h\u0131zl\u0131ca denemenizi sa\u011flar. \u00dcretimde, anahtarlara ve dosya izinlerine ciddi \u00f6zen g\u00f6sterin. CA anahtar\u0131n\u0131 <strong>\u00e7elik kasa<\/strong> gibi d\u00fc\u015f\u00fcn\u00fcn; eri\u015fimi k\u0131s\u0131tlay\u0131n, yedekleyin, kimseyle payla\u015fmay\u0131n.<\/p>\n<h3><span id=\"Root_CA_Sertifikasi_Olusturma\">Root CA Sertifikas\u0131 Olu\u015fturma<\/span><\/h3>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">mkdir -p ~\/mtls-demo &amp;&amp; cd ~\/mtls-demo\n\n# CA \u00f6zel anahtar\u0131 (gizli tutun)\nopenssl genrsa -out ca.key 4096\n\n# K\u00f6k sertifika (10 y\u0131ll\u0131k \u00f6rnek)\nopenssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 \n  -out ca.crt -subj &quot;\/CN=Internal Admin CA&quot;\n<\/code><\/pre>\n<p>Bu komutlarla bir k\u00f6k CA\u2019n\u0131z oldu. Daha d\u00fczenli bir yap\u0131 isterseniz ara CA (intermediate) ekleyebilirsiniz. Ama k\u00fc\u00e7\u00fck bir ekipte tek k\u00f6k CA ile ba\u015flamak yeterli. \u00d6nemli olan, bu CA ile yaln\u0131zca <strong>istemci sertifikalar\u0131<\/strong> \u00fcretmek ve onun g\u00fcven zincirini Nginx\u2019e tan\u0131tmak.<\/p>\n<h3><span id=\"Kullanici_Icin_Istemci_Sertifikasi\">Kullan\u0131c\u0131 \u0130\u00e7in \u0130stemci Sertifikas\u0131<\/span><\/h3>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\"># Kullan\u0131c\u0131 \u00f6zel anahtar\u0131\nopenssl genrsa -out alice.key 4096\n\n# CSR (sertifika iste\u011fi)\nopenssl req -new -key alice.key -out alice.csr -subj &quot;\/CN=Alice Admin\/emailAddress=alice@example.com&quot;\n\n# Basit bir ext dosyas\u0131 haz\u0131rlayal\u0131m\ncat &gt; client.ext &lt;&lt;EOF\nbasicConstraints = CA:FALSE\nkeyUsage = digitalSignature, keyEncipherment\nextendedKeyUsage = clientAuth\nsubjectAltName = email:alice@example.com\nEOF\n\n# \u0130stemci sertifikas\u0131n\u0131 imzala\nopenssl x509 -req -in alice.csr -CA ca.crt -CAkey ca.key -CAcreateserial \n  -out alice.crt -days 825 -sha256 -extfile client.ext\n<\/code><\/pre>\n<p>B\u00f6ylece Alice i\u00e7in bir sertifika haz\u0131r. Taray\u0131c\u0131ya kolayca y\u00fcklemek i\u00e7in PKCS#12 format\u0131na d\u00f6n\u00fc\u015ft\u00fcrelim. Olu\u015ftururken sizden bir parola isteyecektir; bu parola, dosyay\u0131 cihazlar aras\u0131nda ta\u015f\u0131rken ek bir g\u00fcvenlik katman\u0131 sa\u011flar.<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\"># Taray\u0131c\u0131\/iOS\/macOS\/Windows i\u00e7in uygun paket\nopenssl pkcs12 -export -inkey alice.key -in alice.crt -certfile ca.crt -out alice.p12\n<\/code><\/pre>\n<p>Bu <strong>alice.p12<\/strong> dosyas\u0131n\u0131 g\u00fcvenli bir kanalla (\u00f6rne\u011fin \u015fifrelenmi\u015f e-posta eki veya g\u00fcvenli bir dosya payla\u015f\u0131m arac\u0131) kullan\u0131c\u0131ya verin. Parolay\u0131 asla ayn\u0131 kanaldan g\u00f6ndermeyin. Ben genelde parola i\u00e7in ayr\u0131 bir mesaj kanal\u0131 veya tek kullan\u0131ml\u0131k bir \u015fifre payla\u015f\u0131m ba\u011flant\u0131s\u0131 kullan\u0131yorum.<\/p>\n<h2 id=\"section-4\"><span id=\"Nginxte_mTLS_Ince_Ama_Guclu_Bir_Dokunus\">Nginx\u2019te mTLS: \u0130nce Ama G\u00fc\u00e7l\u00fc Bir Dokunu\u015f<\/span><\/h2>\n<h3><span id=\"Temel_Mantik\">Temel Mant\u0131k<\/span><\/h3>\n<p>Nginx\u2019e iki \u015fey \u00f6\u011fretmemiz gerekiyor: Hangi CA\u2019ya g\u00fcvenece\u011fi ve hangi yol ya da host \u00fczerinde istemci sertifikas\u0131 isteyece\u011fi. G\u00fcvendi\u011fi CA listesini verince, Nginx taray\u0131c\u0131n\u0131n g\u00f6nderdi\u011fi sertifikay\u0131 do\u011frular. Biz de bu zorunlulu\u011fu sadece <strong>\/admin<\/strong> gibi kritik yollar i\u00e7in a\u00e7ar\u0131z. B\u00f6ylece sitenin geri kalan\u0131nda normal TLS \u00e7al\u0131\u015f\u0131r, panel kap\u0131s\u0131nda ise mTLS devreye girer.<\/p>\n<p>\u00d6nce CA sertifikan\u0131z\u0131 Nginx\u2019e tan\u0131t\u0131n ve panel yolu i\u00e7in mTLS\u2019i a\u00e7\u0131n. A\u015fa\u011f\u0131daki \u00f6rnek, production bir sunucuda tipik bir kurulumun sadele\u015ftirilmi\u015f hali:<\/p>\n<pre class=\"language-nginx line-numbers\"><code class=\"language-nginx\">server {\n  listen 443 ssl http2;\n  server_name site.example;\n\n  # Sunucu sertifikan\u0131z (Let\u2019s Encrypt vb.)\n  ssl_certificate     \/etc\/letsencrypt\/live\/site.example\/fullchain.pem;\n  ssl_certificate_key \/etc\/letsencrypt\/live\/site.example\/privkey.pem;\n\n  # \u0130stemci sertifikalar\u0131 i\u00e7in g\u00fcvenilen CA\n  ssl_client_certificate \/etc\/nginx\/mtls\/ca.crt;\n\n  # Varsay\u0131lan olarak istemci sertifikas\u0131 isteme (kapal\u0131)\n  ssl_verify_client off;\n  ssl_verify_depth 2;\n\n  # Normal site i\u00e7erikleri\n  location \/ {\n    proxy_pass http:\/\/app_backend;\n  }\n\n  # Y\u00f6netim paneli - burada mTLS \u015fart ko\u015fuyoruz\n  location \/admin\/ {\n    # Bu lokasyonda mTLS ON\n    ssl_verify_client on;\n\n    # \u0130ste\u011fe ba\u011fl\u0131: istemci bilgilerini upstream\u2019e iletmek\n    proxy_set_header X-Client-Verify $ssl_client_verify;\n    proxy_set_header X-Client-Subject $ssl_client_s_dn;\n    proxy_set_header X-Client-Issuer  $ssl_client_i_dn;\n\n    proxy_pass http:\/\/app_backend_admin;\n  }\n\n  # Sa\u011fl\u0131k kontrol\u00fcne istisna tan\u0131mak isteyebilirsiniz\n  location = \/healthz { return 204; }\n}\n<\/code><\/pre>\n<p>Burada kritik detay, <strong>ssl_verify_client<\/strong> direktifini sadece <strong>\/admin<\/strong> lokasyonunda a\u00e7mak. B\u00f6ylece di\u011fer sayfalar normal kullan\u0131c\u0131lar i\u00e7in \u00e7al\u0131\u015fmaya devam ederken, panel kap\u0131s\u0131nda sertifika kontrol\u00fc devrede kal\u0131r. Bu esneklik, \u00fcretimde i\u015fleri \u00e7ok kolayla\u015ft\u0131r\u0131r.<\/p>\n<h3><span id=\"Yanlis_Sertifika_veya_Sertifika_Yoksa_Ne_Olur\">Yanl\u0131\u015f Sertifika veya Sertifika Yoksa Ne Olur?<\/span><\/h3>\n<p>Nginx, istemci sertifikas\u0131 eksikse ya da do\u011frulama ba\u015far\u0131s\u0131zsa \u00f6zel hata kodlar\u0131 kullan\u0131r. \u0130sterseniz bu durumlar i\u00e7in kullan\u0131c\u0131 dostu bir hata mesaj\u0131 d\u00f6nd\u00fcrebilirsiniz. \u201cEri\u015fim i\u00e7in istemci sertifikas\u0131 gerekiyor\u201d gibi net bir c\u00fcmle, hem ekip arkada\u015f\u0131n\u0131za yol g\u00f6sterir hem de d\u0131\u015f d\u00fcnyaya fazladan ipucu vermez.<\/p>\n<pre class=\"language-nginx line-numbers\"><code class=\"language-nginx\"># Server blo\u011funa ek\nerror_page 495 496 = \/__mtls_required;\nlocation = \/__mtls_required {\n  return 403 &quot;Y\u00f6netim paneline eri\u015fim i\u00e7in istemci sertifikas\u0131 gerekiyor.&quot;;\n}\n<\/code><\/pre>\n<p>Bu k\u00fc\u00e7\u00fck dokunu\u015f, neyin eksik oldu\u011funu anla\u015f\u0131l\u0131r k\u0131lar. D\u0131\u015far\u0131ya fazla detay vermeden, i\u00e7eridekine gereken ipucunu vermi\u015f olursunuz.<\/p>\n<h3><span id=\"Kimlere_Izinli_Oldugunu_Ince_Ayarlamak\">Kimlere \u0130zinli Oldu\u011funu \u0130nce Ayarlamak<\/span><\/h3>\n<p>Bazen sadece sertifikas\u0131 olanlar de\u011fil, <strong>belirli ki\u015filerin<\/strong> ge\u00e7mesi gerekir. O zaman \u201cCN alan\u0131 \u015fu olanlar ge\u00e7sin\u201d gibi minik bir liste tutabilirsiniz. Nginx\u2019in <strong>map<\/strong> \u00f6zelli\u011fi burada harika i\u015f g\u00f6r\u00fcr.<\/p>\n<pre class=\"language-nginx line-numbers\"><code class=\"language-nginx\">map $ssl_client_s_dn $is_allowed {\n  default 0;\n  &quot;CN=Alice Admin\/emailAddress=alice@example.com&quot; 1;\n  &quot;CN=Bob Admin\/emailAddress=bob@example.com&quot;     1;\n}\n\nserver {\n  ...\n  location \/admin\/ {\n    ssl_verify_client on;\n    if ($is_allowed = 0) { return 403; }\n    proxy_pass http:\/\/app_backend_admin;\n  }\n}\n<\/code><\/pre>\n<p>Bu y\u00f6ntem, CRL gibi daha karma\u015f\u0131k iptal mekanizmalar\u0131na girmeden h\u0131zl\u0131 karar vermeyi sa\u011flar. B\u00fcy\u00fck ekiplerde yine de iptal listeleri (CRL) veya k\u0131sa \u00f6m\u00fcrl\u00fc sertifikalar daha sa\u011fl\u0131kl\u0131 olur.<\/p>\n<h3><span id=\"CRL_Iptal_Listesi_Kullanmaya_Giris\">CRL (\u0130ptal Listesi) Kullanmaya Giri\u015f<\/span><\/h3>\n<p>E\u011fer bir sertifikay\u0131 iptal etmek isterseniz, Nginx\u2019e bir <strong>CRL<\/strong> dosyas\u0131 tan\u0131tabilirsiniz. Bu konu biraz prosed\u00fcr ister; CA taraf\u0131nda iptal edilen sertifikalar\u0131 bir dosyada toplars\u0131n\u0131z ve Nginx\u2019e g\u00f6sterirsiniz:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\"># \u00d6rnek: Nginx'e CRL dosyas\u0131n\u0131 tan\u0131tma\nssl_crl \/etc\/nginx\/mtls\/ca.crl;\n<\/code><\/pre>\n<p>CRL olu\u015fturma\/yenileme s\u00fcre\u00e7leri, klasik OpenSSL ak\u0131\u015f\u0131yla veya k\u00fc\u00e7\u00fck bir CA hizmetiyle yap\u0131labilir. Ekip b\u00fcy\u00fcd\u00fck\u00e7e, bu dosyan\u0131n d\u00fczenli g\u00fcncellenmesi \u00f6nemli hale gelir. \u00c7ok s\u0131k iptal\/ekleme yap\u0131lan ortamlarda k\u0131sa \u00f6m\u00fcrl\u00fc sertifikalar da iyi bir taktiktir.<\/p>\n<p>Nginx\u2019te SSL\/mTLS direktiflerinin tam listesine g\u00f6z atmak isterseniz, <a href=\"https:\/\/nginx.org\/en\/docs\/http\/ngx_http_ssl_module.html\" rel=\"nofollow noopener\" target=\"_blank\">Nginx SSL mod\u00fcl\u00fcn\u00fcn resmi dok\u00fcmantasyonunu<\/a> bir kenara not al\u0131n. \u0130htiya\u00e7 duydu\u011funuzda d\u00f6n\u00fcp bakmak rahatlat\u0131r.<\/p>\n<h2 id=\"section-5\"><span id=\"Tarayici_ve_Cihazlara_Sertifika_Yukleme_Puf_Noktalari\">Taray\u0131c\u0131 ve Cihazlara Sertifika Y\u00fckleme: P\u00fcf Noktalar\u0131<\/span><\/h2>\n<h3><span id=\"PKCS12_p12pfx_Paketini_Iceri_Almak\">PKCS#12 (p12\/pfx) Paketini \u0130\u00e7eri Almak<\/span><\/h3>\n<p>G\u00fcnl\u00fck hayatta en \u00e7ok PKCS#12 paketini g\u00f6r\u00fcr\u00fcz. \u0130\u00e7inde hem sertifika hem de \u00f6zel anahtar vard\u0131r; parola ile korunur. macOS\u2019ta do\u011frudan \u00e7ift t\u0131klay\u0131p Anahtar Zinciri\u2019ne alabilirsiniz. iOS\u2019ta dosyay\u0131 a\u00e7\u0131nca ayarlara y\u00f6nlendirir. Windows\u2019ta sihirbaz sizi ad\u0131m ad\u0131m g\u00f6t\u00fcr\u00fcr. Linux\u2019ta taray\u0131c\u0131n\u0131n sertifika ayarlar\u0131ndan i\u00e7eri aktar\u0131l\u0131r. Hepsinde ortak olan, <strong>CA sertifikas\u0131n\u0131 da g\u00fcven listesine eklemeyi<\/strong> unutmamakt\u0131r. Yoksa taray\u0131c\u0131 sertifikan\u0131za \u015f\u00fcpheyle bakabilir.<\/p>\n<h3><span id=\"Yeni_Cihaz_Kayip_Cihaz_Pratik_Dagitim\">Yeni Cihaz, Kay\u0131p Cihaz: Pratik Da\u011f\u0131t\u0131m<\/span><\/h3>\n<p>Yeni bir diz\u00fcst\u00fc ald\u0131\u011f\u0131n\u0131zda p12 dosyas\u0131n\u0131 g\u00fcvenli bir y\u00f6ntemle yollay\u0131n. Ben genelde tek kullan\u0131ml\u0131k bir indirme linki ve parola i\u00e7in ayr\u0131 bir kanal tercih ediyorum. Telefon de\u011fi\u015fti\u011finde s\u00fcre\u00e7 ayn\u0131; p12 dosyas\u0131 iOS\u2019ta ayarlar \u00fczerinden kolayca y\u00fcklenir. Android taraf\u0131nda da benzer \u015fekilde g\u00fcvenlik ayarlar\u0131ndan eklenir. Bazen \u015firket i\u00e7i bir portal yap\u0131p p12\u2019leri oradan \u00e7ekmek g\u00fczel olur; ama mutlaka indirme linki \u00f6m\u00fcrl\u00fc olsun, herkese a\u00e7\u0131k kalmas\u0131n.<\/p>\n<h3><span id=\"Sertifikayi_Tarayici_Sormuyor_mu\">Sertifikay\u0131 Taray\u0131c\u0131 Sormuyor mu?<\/span><\/h3>\n<p>Bazen \u015fu olur: \u201cSertifikay\u0131 y\u00fckledim ama site benden istemiyor.\u201d Bu genelde ya Nginx\u2019te lokasyon baz\u0131nda mTLS\u2019in a\u00e7\u0131lmamas\u0131ndan ya da taray\u0131c\u0131n\u0131n ilgili sertifikay\u0131 uygun bulmamas\u0131ndan kaynaklan\u0131r. <strong>ssl_verify_client on<\/strong> do\u011fru yerde mi, CA dosyas\u0131 do\u011fru mu, taray\u0131c\u0131da sertifika ki\u015fisel sertifikalar b\u00f6l\u00fcm\u00fcnde mi; bunlara bak\u0131n. Chrome\/Firefox\u2019ta do\u011fru profil \u00fczerinde oldu\u011funuzdan emin olun. Gerekirse sertifikay\u0131 silip yeniden i\u00e7e aktar\u0131n.<\/p>\n<h2 id=\"section-6\"><span id=\"Test_Et_Etkinligini_Gor_curl_ve_Loglarla_Guven\">Test Et, Etkinli\u011fini G\u00f6r: curl ve Loglarla G\u00fcven<\/span><\/h2>\n<h3><span id=\"curl_ile_Hizli_Yoklama\">curl ile H\u0131zl\u0131 Yoklama<\/span><\/h3>\n<p>Terminalde birka\u00e7 komutla her \u015feyi s\u0131nayabilirsiniz. \u00d6nce sertifikas\u0131z bir deneme yap\u0131n; panelin mTLS istedi\u011fini g\u00f6receksiniz. Sonra sertifika ile deneyin.<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\"># Sertifikas\u0131z deneme (403 beklenir)\ncurl -i https:\/\/site.example\/admin\/\n\n# Sertifikal\u0131 deneme (200 beklenir)\ncurl -i --cert alice.crt --key alice.key https:\/\/site.example\/admin\/\n\n# Tek bir p12 dosyas\u0131yla (gerekirse --cert-type P12)\ncurl -i --cert-type P12 --cert alice.p12:mypassword https:\/\/site.example\/admin\/\n<\/code><\/pre>\n<p>curl, istemci sertifikalar\u0131 konusunda epey esnektir. Derin bir referans isterseniz <a href=\"https:\/\/curl.se\/docs\/sslcerts.html\" rel=\"nofollow noopener\" target=\"_blank\">curl\u2019un SSL sertifikalar\u0131 hakk\u0131nda haz\u0131rlad\u0131\u011f\u0131 sayfaya<\/a> bakabilirsiniz. Orada p12\/pem kullan\u0131m\u0131, sertifika zinciri, hata mesajlar\u0131 gibi detaylar\u0131 bulursunuz.<\/p>\n<h3><span id=\"Loglarda_Kim_Geldi_Kim_Gecti\">Loglarda Kim Geldi, Kim Ge\u00e7ti?<\/span><\/h3>\n<p>mTLS\u2019in sevdi\u011fim taraflar\u0131ndan biri, loglar\u0131n anlam kazanmas\u0131. Art\u0131k sadece bir IP adresi de\u011fil, ayn\u0131 zamanda \u201cAlice geldi, do\u011fruland\u0131\u201d gibi net bir bilgi g\u00f6rebilirsiniz. Nginx log format\u0131na istemci \u00f6znesini eklemek \u00e7ok faydal\u0131d\u0131r.<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">log_format mtls '$remote_addr - $remote_user [$time_local] '\n                 '&quot;$request&quot; $status $body_bytes_sent '\n                 '&quot;$http_referer&quot; &quot;$http_user_agent&quot; '\n                 'subj=&quot;$ssl_client_s_dn&quot; verify=&quot;$ssl_client_verify&quot;';\n\naccess_log \/var\/log\/nginx\/access_mtls.log mtls;\n<\/code><\/pre>\n<p>Bu sayede log analizi yaparken ger\u00e7ek kullan\u0131c\u0131larla y\u00fczle\u015firsiniz. E\u011fer merkezi loglama kurduysan\u0131z, daha da tatl\u0131. Biz mesela <a href=\"https:\/\/www.dchost.com\/blog\/vps-log-yonetimi-nasil-rayina-oturur-grafana-loki-promtail-ile-merkezi-loglama-tutma-sureleri-ve-alarm-kurallari\/\">VPS log y\u00f6netimini Loki ve Promtail ile merkezile\u015ftirme<\/a> maceras\u0131nda bu tarz alanlar\u0131 i\u015fin i\u00e7ine kat\u0131p alarmlar\u0131 anlaml\u0131 hale getirmi\u015ftik. Panel kap\u0131s\u0131nda ba\u015far\u0131s\u0131z mTLS denemelerini ayr\u0131 bir panoya koydu\u011funuzda, gece uykunuz bile daha derin olur.<\/p>\n<h2 id=\"section-7\"><span id=\"Guvenligi_Katmanlamak_mTLS_Diger_Tatli_Dokunuslar\">G\u00fcvenli\u011fi Katmanlamak: mTLS + Di\u011fer Tatl\u0131 Dokunu\u015flar<\/span><\/h2>\n<p>mTLS tek ba\u015f\u0131na g\u00fc\u00e7l\u00fcd\u00fcr, ama yan\u0131nda ba\u015fka k\u00fc\u00e7\u00fck \u00f6nlemlerle birle\u015fince harika bir tablo ortaya \u00e7\u0131kar. Mesela y\u00f6netim yolu i\u00e7in <strong>IP k\u0131s\u0131tlama<\/strong> eklemek, sadece ofis VPN\u2019inden gelindi\u011finde kap\u0131y\u0131 g\u00f6stermeyi sa\u011flar. Baz\u0131 durumlarda basit bir <strong>ek parola<\/strong> (basic auth) bile farkl\u0131 bir katman sunar. \u00d6zellikle CMS panellerinde, giri\u015f denemeleri s\u0131k s\u0131k can s\u0131kabilir. Bunun i\u00e7in daha \u00f6nce payla\u015ft\u0131\u011f\u0131m\u0131z <a href=\"https:\/\/www.dchost.com\/blog\/nginx-rate-limiting-ve-fail2ban-ile-wp%E2%80%91login-php-ve-xml%E2%80%91rpc-brute%E2%80%91force-saldirilarini-nasil-saksiya-alirsin\/\">Nginx rate limiting ve Fail2ban ile kaba kuvvet sald\u0131r\u0131lar\u0131n\u0131 yumu\u015fatma<\/a> yaz\u0131s\u0131ndaki fikirler, mTLS ile birlikte \u00e7ok g\u00fczel \u00e7al\u0131\u015f\u0131r.<\/p>\n<p>Sertifikalar d\u00fcnyas\u0131nda da k\u00fc\u00e7\u00fck bir hat\u0131rlatma gelsin. \u201cDV, OV, EV\u201d gibi kavramlar d\u0131\u015f d\u00fcnyaya kendinizi kan\u0131tlarken anlaml\u0131d\u0131r. Panel d\u00fcnyas\u0131nda ise kendi i\u00e7 CA\u2019n\u0131z ba\u015frolde olur. Yine de temel kavramlar\u0131 toparlamak isterseniz, <a href=\"https:\/\/www.dchost.com\/blog\/dv-ov-ev-ve-wildcard-ssl-arasinda-kaybolmadan-e%e2%80%91ticaret-ve-saaste-hangi-sertifika-ne-zaman\/\">DV, OV, EV ve Wildcard SSL rehberimize<\/a> g\u00f6z atmak ufuk a\u00e7ar.<\/p>\n<p>WordPress gibi bir sistem kullan\u0131yorsan\u0131z, mTLS\u2019i panel kap\u0131s\u0131na koyup i\u00e7eride de k\u00fc\u00e7\u00fck sertle\u015ftirmeler yapmak \u00e7ok etkili. Bu konuda <a href=\"https:\/\/www.dchost.com\/blog\/wordpress-guvenlik-sertlestirme-kontrol-listesi-dosya-izinleri-salt-keys-xml-rpc-ufw-fail2ban-nasil-tatli-tatli-kurulur\/\">WordPress g\u00fcvenlik sertle\u015ftirme kontrol listesi<\/a> yaz\u0131s\u0131ndaki maddeler g\u00fczel tamamlay\u0131c\u0131 olur. K\u00fc\u00e7\u00fck dokunu\u015flar, birikince koca bir rahatl\u0131k veriyor.<\/p>\n<h2 id=\"section-8\"><span id=\"Dagitim_Rotasyon_ve_Iptal_Gunluk_Hayatin_Kucuk_Rutinleri\">Da\u011f\u0131t\u0131m, Rotasyon ve \u0130ptal: G\u00fcnl\u00fck Hayat\u0131n K\u00fc\u00e7\u00fck Rutinleri<\/span><\/h2>\n<h3><span id=\"Omurleri_Kisa_Tut_Isini_Kolaylastir\">\u00d6m\u00fcrleri K\u0131sa Tut, \u0130\u015fini Kolayla\u015ft\u0131r<\/span><\/h3>\n<p>\u0130stemci sertifikalar\u0131n\u0131 \u00e7ok uzun s\u00fcreli vermek yerine, orta vadeli s\u00fcrelerle ve <strong>rotasyon takvimi<\/strong>yle ilerlemek daha rahat. Mesela y\u0131lda bir yenilemek, \u201cAman bu kimindi?\u201d sorusunu masadan kald\u0131r\u0131r. Kullan\u0131c\u0131 ayr\u0131ld\u0131\u011f\u0131nda sertifikay\u0131 iptal etmek ve listeden \u00e7\u0131karmak, log haritalar\u0131n\u0131 da temiz tutar.<\/p>\n<h3><span id=\"Otomasyonla_Huzur\">Otomasyonla Huzur<\/span><\/h3>\n<p>K\u00fc\u00e7\u00fck bir script ile yeni sertifika \u00fcretimi, p12 paketleme ve kullan\u0131c\u0131ya iletme ad\u0131mlar\u0131n\u0131 otomatikle\u015ftirmek harika olur. Ekip b\u00fcy\u00fcd\u00fck\u00e7e, bir mini-portal ve onay ak\u0131\u015f\u0131 kurmak daha da tatl\u0131 hale gelir. A\u00e7\u0131k kaynak tarafta k\u00fc\u00e7\u00fck ama i\u015f g\u00f6ren \u00e7\u00f6z\u00fcmler var. \u00d6rne\u011fin bir i\u00e7 CA hizmeti kurmak isterseniz <a href=\"https:\/\/smallstep.com\/docs\/step-ca\" rel=\"nofollow noopener\" target=\"_blank\">step-ca dok\u00fcmantasyonunda<\/a> pratik \u00f6rnekler bulabilirsiniz. B\u00f6ylece CRL, k\u0131sa \u00f6m\u00fcr, otomatik yenileme gibi konular standartla\u015f\u0131r.<\/p>\n<h3><span id=\"Iptal_Etme_Revoke_ve_Kriz_Yonetimi\">\u0130ptal Etme (Revoke) ve Kriz Y\u00f6netimi<\/span><\/h3>\n<p>Bir cihaz kayboldu\u011funda ya da kullan\u0131c\u0131 ayr\u0131ld\u0131\u011f\u0131nda, ilgili sertifikay\u0131 iptal etmek gerekir. E\u011fer <strong>map ile allowlist<\/strong> tutuyorsan\u0131z, konfig\u00fcrasyondan kullan\u0131c\u0131y\u0131 \u00e7\u0131kar\u0131p Nginx\u2019i yeniden y\u00fcklemek h\u0131zl\u0131 bir \u00e7\u00f6z\u00fcmd\u00fcr. CRL kullan\u0131yorsan\u0131z, iptal listesini g\u00fcncelleyip Nginx\u2019e tan\u0131tt\u0131\u011f\u0131n\u0131zda bu sertifika art\u0131k kap\u0131dan giremez. Ben her iki y\u00f6ntemi de bazen birlikte kullan\u0131yorum; hem allowlist ile h\u0131zl\u0131 tepki verip hem de arka planda CRL g\u00fcncelleyerek kal\u0131c\u0131 hale getiriyorum.<\/p>\n<h2 id=\"section-9\"><span id=\"Kendini_Kilitleme_Tehlikesi_Kacis_Kapisi_Birak\">Kendini Kilitleme Tehlikesi: Ka\u00e7\u0131\u015f Kap\u0131s\u0131 B\u0131rak<\/span><\/h2>\n<p>mTLS\u2019i a\u00e7\u0131p kap\u0131y\u0131 iyice s\u0131k\u0131nca, bir anl\u0131k hata ile kendinizi d\u0131\u015far\u0131da b\u0131rakmak istemezsiniz. Benim standart prati\u011fim, bir <strong>yedek kap\u0131<\/strong> b\u0131rakmakt\u0131r. Mesela <strong>\/rescue-admin<\/strong> gibi bir yol, yaln\u0131zca VPN i\u00e7inden gelen IP\u2019lere a\u00e7\u0131k olur ve orada mTLS kapal\u0131 olabilir. B\u00f6ylece ola\u011fan\u00fcst\u00fc durumda i\u00e7eri girip konfig\u00fcrasyonu d\u00fczeltebilirsiniz. Ayr\u0131ca Nginx\u2019i yeniden ba\u015flatmadan \u00f6nce <strong>test<\/strong> etmeyi unutmay\u0131n:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">nginx -t &amp;&amp; systemctl reload nginx\n<\/code><\/pre>\n<p>Bir di\u011fer k\u00fc\u00e7\u00fck \u00f6nlem de yeni mTLS kural\u0131n\u0131 <strong>\u00f6nce alt domaine<\/strong> uygulay\u0131p kendiniz test etmek. Her \u015fey d\u00fczg\u00fcn \u00e7al\u0131\u015f\u0131yorsa, as\u0131l panele ta\u015f\u0131yabilirsiniz. Yava\u015f, dikkatli ve kontroll\u00fc gitmek en g\u00fczeli.<\/p>\n<h2 id=\"section-10\"><span id=\"Proxy_ve_CDN_Arkasinda_mTLS_Nerede_Sonlandirmali\">Proxy ve CDN Arkas\u0131nda mTLS: Nerede Sonland\u0131rmal\u0131?<\/span><\/h2>\n<p>Bazen Nginx, bir <strong>y\u00fck dengeleyici<\/strong> ya da <strong>CDN<\/strong> arkas\u0131nda olur. mTLS\u2019i nerede sonland\u0131raca\u011f\u0131n\u0131z \u00f6nemli bir karar. E\u011fer CDN taraf\u0131nda sonland\u0131r\u0131rsan\u0131z, kullan\u0131c\u0131yla mTLS ili\u015fkisi edge\u2019de biter; Nginx\u2019e g\u00fcvenli bir ba\u015fl\u0131kla \u201c\u015fu ki\u015fi do\u011fruland\u0131\u201d bilgisi iletilebilir. Do\u011frudan Nginx\u2019te sonland\u0131r\u0131rsan\u0131z, i\u015fin kontrol\u00fc tamamen sizde olur. \u0130kisi de olur; \u00f6nemli olan zincirin bir yerinde mTLS\u2019in <strong>ger\u00e7ekten zorunlu<\/strong> olmas\u0131ndan emin olmak ve i\u00e7eride devre d\u0131\u015f\u0131 b\u0131rak\u0131lmamas\u0131d\u0131r.<\/p>\n<p>Uygulama sunucusuna, istemci sertifikas\u0131n\u0131n \u00f6znesini iletmek isterseniz, yukar\u0131da ekledi\u011fimiz <strong>X-Client-Subject<\/strong> gibi ba\u015fl\u0131klar i\u015f g\u00f6r\u00fcr. Uygulama taraf\u0131 da \u201cBu kullan\u0131c\u0131 kim?\u201d sorusunu cevaplay\u0131p yetkilendirmeyi daha anlaml\u0131 hale getirebilir.<\/p>\n<h2 id=\"section-11\"><span id=\"Guvenli_Varsayilanlar_Kucuk_Ayarlar_Buyuk_Rahatlik\">G\u00fcvenli Varsay\u0131lanlar: K\u00fc\u00e7\u00fck Ayarlar, B\u00fcy\u00fck Rahatl\u0131k<\/span><\/h2>\n<p>Biraz da k\u00fc\u00e7\u00fck ama etkili ayarlardan bahsedeyim. HSTS (Strict-Transport-Security) ile taray\u0131c\u0131lara \u201cBu siteye her zaman HTTPS ile gel\u201d demek, yanl\u0131\u015fl\u0131kla HTTP\u2019ye d\u00fc\u015fmeyi engeller. Sertifika dosyalar\u0131na do\u011fru dosya izinleri vermek, \u00f6zellikle CA anahtar\u0131n\u0131 saklarken, hayati \u00f6nem ta\u015f\u0131r. Nginx konfig\u00fcrasyonlar\u0131n\u0131 k\u00fc\u00e7\u00fck par\u00e7alara b\u00f6lmek d\u00fczeni korur. G\u00fcncellemeleri d\u00fczenli almak, beklenmedik g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 erkenden kapat\u0131r.<\/p>\n<p>\u0130lgili ba\u015fka bir not: Panel giri\u015fini zamana yaymak ve ba\u015far\u0131s\u0131z denemelerde k\u00fc\u00e7\u00fck beklemeler eklemek sald\u0131rgan\u0131n enerjisini t\u00fcketir. Bu konuda daha \u00f6nce payla\u015ft\u0131\u011f\u0131m\u0131z <a href=\"https:\/\/www.dchost.com\/blog\/nginx-rate-limiting-ve-fail2ban-ile-wp%E2%80%91login-php-ve-xml%E2%80%91rpc-brute%E2%80%91force-saldirilarini-nasil-saksiya-alirsin\/\">rate limiting ve Fail2ban fikirleri<\/a> mTLS ile birlikte g\u00fcvenlik dengesini \u00e7ok g\u00fczel tamamlar.<\/p>\n<h2 id=\"section-12\"><span id=\"Gelistirme_Ortami_ve_Sahne_Staging_Icin_Kucuk_Kisayollar\">Geli\u015ftirme Ortam\u0131 ve Sahne (Staging) \u0130\u00e7in K\u00fc\u00e7\u00fck K\u0131sayollar<\/span><\/h2>\n<p>Geli\u015ftirmede hayat\u0131 kolayla\u015ft\u0131rmak i\u00e7in isterseniz <strong>k\u0131sa \u00f6m\u00fcrl\u00fc sertifikalar<\/strong> \u00fcretin ve staging ortam\u0131nda da ayn\u0131 mTLS kural\u0131n\u0131 uygulay\u0131n. B\u00f6ylece prod\u2019a ge\u00e7erken s\u00fcrpriz ya\u015famazs\u0131n\u0131z. Taray\u0131c\u0131lara sertifika y\u00fckleme ad\u0131mlar\u0131n\u0131 ekiple payla\u015fan mini bir dok\u00fcman haz\u0131rlay\u0131n; ekran g\u00f6r\u00fcnt\u00fcleri ekleyin. \u201cKurulum sihirbaz\u0131\u201d gibi k\u00fc\u00e7\u00fck bir betik, yeni kat\u0131lan bir arkada\u015f\u0131n yar\u0131m saatte aya\u011fa kalkmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>Uygulama taraf\u0131nda da loglara \u201cHangi sertifika geldi?\u201d bilgisini d\u00fc\u015fmek te\u015fhis i\u00e7in g\u00fczel olur. Bir sorun \u00e7\u0131kt\u0131\u011f\u0131nda hem Nginx loglar\u0131na hem uygulama loglar\u0131na bak\u0131nca, eksik par\u00e7alar daha h\u0131zl\u0131 tamamlan\u0131r.<\/p>\n<h2 id=\"section-13\"><span id=\"Sik_Yapilan_Hatalar_Kucuk_Tuzaklar\">S\u0131k Yap\u0131lan Hatalar: K\u00fc\u00e7\u00fck Tuzaklar<\/span><\/h2>\n<p>Birincisi, <strong>CA zincirini<\/strong> Nginx\u2019e eksik vermek. Nginx\u2019in do\u011frulad\u0131\u011f\u0131 dosyada k\u00f6k ve varsa ara sertifikalar do\u011fru s\u0131rada olmal\u0131. \u0130kincisi, taray\u0131c\u0131ya sadece p12\u2019yi at\u0131p CA\u2019y\u0131 g\u00fcvenilen otoritelere eklemeyi unutmak. Bu durumda taray\u0131c\u0131 sertifikay\u0131 g\u00f6r\u00fcr ama \u201cAaa, bu kime ait?\u201d diye bakar ve sunmad\u0131\u011f\u0131 olur. \u00dc\u00e7\u00fcnc\u00fcs\u00fc, mTLS\u2019i yanl\u0131\u015f lokasyonda a\u00e7mak. Konfig\u00fcrasyonun kapsam\u0131n\u0131 iyi kontrol edin. D\u00f6rd\u00fcnc\u00fcs\u00fc, yedek kap\u0131 b\u0131rakmamak. Gecenin bir yar\u0131s\u0131, k\u00fc\u00e7\u00fck bir yaz\u0131m hatas\u0131 y\u00fcz\u00fcnden i\u00e7eri giremedi\u011finizi hayal etmek bile yorucu.<\/p>\n<p>Bir de \u201cHer \u015fey mTLS, gerisi \u00f6nemli de\u011fil\u201d tuza\u011f\u0131 var. mTLS, g\u00fc\u00e7l\u00fc bir kap\u0131d\u0131r ama i\u00e7erdeki odalarda da d\u00fczen gerekir. \u00d6zellikle CMS veya blog kullananlar i\u00e7in k\u00fc\u00e7\u00fck sertle\u015ftirmeler b\u00fcy\u00fck fark yarat\u0131r. Bu ba\u011flamda <a href=\"https:\/\/www.dchost.com\/blog\/wordpress-guvenlik-sertlestirme-kontrol-listesi-dosya-izinleri-salt-keys-xml-rpc-ufw-fail2ban-nasil-tatli-tatli-kurulur\/\">WordPress g\u00fcvenlik sertle\u015ftirme rehberi<\/a> pratik ve uygulanabilir bir liste sunuyor; \u00f6neririm.<\/p>\n<h2 id=\"section-14\"><span id=\"Ileri_Seviye_Kisa_Omurlu_Sertifikalar_ve_Otomatik_Yenileme\">\u0130leri Seviye: K\u0131sa \u00d6m\u00fcrl\u00fc Sertifikalar ve Otomatik Yenileme<\/span><\/h2>\n<p>Biraz daha ileri gidelim. Kullan\u0131c\u0131 sertifikalar\u0131n\u0131 haftal\u0131k veya ayl\u0131k k\u0131sa \u00f6m\u00fcrl\u00fc verip arka planda otomatik yenilemek, iptal y\u00fck\u00fcn\u00fc ciddi azalt\u0131r. \u201cKayboldu mu, \u00e7al\u0131nd\u0131 m\u0131\u201d endi\u015fesi yerine \u201cZaten birka\u00e7 g\u00fcn sonra ge\u00e7ersiz olacak\u201d rahatl\u0131\u011f\u0131 gelir. B\u00f6yle bir d\u00fcnyada CA servisi (\u00f6r. step-ca) hayat kurtar\u0131r. K\u00fc\u00e7\u00fck bir ajanla cihaz, zaman\u0131 gelince kendini yeniler. Yine de kimlik do\u011frulama ve yetkilendirme ak\u0131\u015flar\u0131n\u0131n net oldu\u011fundan emin olun; kimin hangi cihaza sertifika alabildi\u011fi iyi tan\u0131ml\u0131 olsun.<\/p>\n<p>Uygulama taraf\u0131nda da gelen sertifikan\u0131n \u201csubject\u201d veya \u201cSAN\u201d alanlar\u0131n\u0131 kullanarak rol bazl\u0131 yetkilendirme yapabilirsiniz. \u201cAlice sadece okuma paneline girsin, Bob da\u011f\u0131t\u0131m yapabilsin\u201d gibi. Bunun i\u00e7in Nginx\u2019ten ge\u00e7en ba\u015fl\u0131klar\u0131 kullanmak kolay ve pratiktir.<\/p>\n<h2 id=\"section-15\"><span id=\"Ornek_Bir_Tam_Akis_Sifirdan_Uretime\">\u00d6rnek Bir Tam Ak\u0131\u015f: S\u0131f\u0131rdan \u00dcretime<\/span><\/h2>\n<p>Toparlayal\u0131m. Ad\u0131mlar \u015f\u00f6yle akar: \u00d6nce k\u00fc\u00e7\u00fck bir i\u00e7 CA kurars\u0131n\u0131z. Ekip \u00fcyeleri i\u00e7in p12 paketler haz\u0131rlars\u0131n\u0131z. Nginx\u2019te CA\u2019y\u0131 tan\u0131t\u0131p y\u00f6netim yolu i\u00e7in mTLS\u2019i a\u00e7ars\u0131n\u0131z. Log formatlar\u0131n\u0131 zenginle\u015ftirir, denemeleri curl\u2019la do\u011frulars\u0131n\u0131z. Ard\u0131ndan yedek kap\u0131 ve IP k\u0131s\u0131tlamalar\u0131n\u0131 eklersiniz. Gerekirse CRL veya k\u0131sa \u00f6m\u00fcrl\u00fc sertifikalarla iptal\/yenileme rutinlerini kurars\u0131n\u0131z. Son olarak, olaylar\u0131 merkezi loglamaya al\u0131p k\u00fc\u00e7\u00fck alarmlar yazars\u0131n\u0131z. Hepsi bu.<\/p>\n<p>E\u011fer Nginx ve SSL taraf\u0131yla yeni tan\u0131\u015f\u0131yorsan\u0131z, canl\u0131ya alma s\u00fcre\u00e7lerine dair pratik ipu\u00e7lar\u0131 bulmak i\u00e7in \u015fu rehbere de g\u00f6z atabilirsiniz: <a href=\"https:\/\/www.dchost.com\/blog\/node-jsi-canliya-alirken-panik-yapma-pm2-systemd-nginx-ssl-ve-sifir-kesinti-deploy-nasil-kurulur\/\">Node.js\u2019i canl\u0131ya al\u0131rken Nginx ve SSL ile sakin ilerleme<\/a>. Oradaki ad\u0131mlar, mTLS d\u0131\u015f\u0131nda kalan HTTPS ayarlar\u0131nda da size destek olur.<\/p>\n<h2 id=\"section-16\"><span id=\"Kapanis_Kapinin_Anahtari_Cebinde_Oldugunda\">Kapan\u0131\u015f: Kap\u0131n\u0131n Anahtar\u0131 Cebinde Oldu\u011funda<\/span><\/h2>\n<p>Yaz\u0131n\u0131n ba\u015f\u0131ndaki o sabah\u0131 hat\u0131rl\u0131yorum. Kap\u0131da bekleyen botlar, ba\u015far\u0131s\u0131z denemeler, log dosyalar\u0131nda bitmek bilmeyen sat\u0131rlar\u2026 mTLS\u2019i devreye ald\u0131ktan sonra panel, art\u0131k kalabal\u0131k bir caddeye bakan vitrin gibi de\u011fil; i\u00e7 kap\u0131n\u0131n arkas\u0131ndaki sakin bir oda gibi hissettirdi. Anahtar\u0131 olanlar giriyor, olmayanlar kap\u0131da kal\u0131yor. Basit ama etkili.<\/p>\n<p>Sana \u00f6nerim \u015fu: \u00d6nce k\u00fc\u00e7\u00fck bir pilot kur. Bir ekibe sertifika ver, Nginx\u2019te sadece bir lokasyonda mTLS\u2019i a\u00e7. curl ile test et, taray\u0131c\u0131da dene, loglar\u0131 izle. Sonra bunu \u00fcretime ta\u015f\u0131. Sertifikalar\u0131 d\u00fczenli yenile, kaybolanlar\u0131 iptal et, yedek kap\u0131y\u0131 unutma. Bir de k\u00fc\u00e7\u00fck tavsiye: mTLS\u2019in yan\u0131na, yumu\u015fak dokunu\u015flarla ek \u00f6nlemler yerle\u015ftir. Rate limit, k\u00fc\u00e7\u00fck parola katmanlar\u0131, merkezi loglama\u2026 Hepsi bir araya gelince, zihnin de daha sakin kalacak.<\/p>\n<p>Umar\u0131m bu rehber, y\u00f6netim panelinizi sa\u011flamla\u015ft\u0131r\u0131rken elinizden tutan bir arkada\u015f gibi olmu\u015ftur. Tak\u0131ld\u0131\u011f\u0131n\u0131z yerde not al\u0131n, ad\u0131m ad\u0131m ilerleyin, acele etmeyin. Bir dahaki yaz\u0131da g\u00f6r\u00fc\u015fmek \u00fczere; kap\u0131n\u0131z\u0131n anahtar\u0131 cebinizde, siz huzurlu olun.<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>\u0130&ccedil;indekiler1 Bir Sabah Panikte Uyanmamak \u0130\u00e7in: mTLS ile Tan\u0131\u015fma2 mTLS Neden \u0130\u015fe Yar\u0131yor? K\u0131sa Bir Yol Haritas\u01313 Kendi Mini CA\u2019n\u0131 Kur: \u0130stemci Sertifikalar\u0131n\u0131 \u00dcretme3.1 Basit ve Etkili: \u0130\u00e7 CA (Certificate Authority) ile Ba\u015fla3.2 Root CA Sertifikas\u0131 Olu\u015fturma3.3 Kullan\u0131c\u0131 \u0130\u00e7in \u0130stemci Sertifikas\u01314 Nginx\u2019te mTLS: \u0130nce Ama G\u00fc\u00e7l\u00fc Bir Dokunu\u015f4.1 Temel Mant\u0131k4.2 Yanl\u0131\u015f Sertifika veya Sertifika Yoksa [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1638,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26],"tags":[],"class_list":["post-1637","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-teknoloji"],"_links":{"self":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts\/1637","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/comments?post=1637"}],"version-history":[{"count":0,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts\/1637\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/media\/1638"}],"wp:attachment":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/media?parent=1637"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/categories?post=1637"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/tags?post=1637"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}