Dün gece, yeni entegre etmem gereken bir servisin API'sini test etmek için basit bir Python scripti yazıyordum. Her şey normaldi, ta ki `verify=False` yazana kadar. Meğer o üç satırlık masum kod, şirketin güvenlik duvarında kıyamet koparacakmış.
Bilirsiniz, bazen geliştirme ortamlarında geçersiz veya self-signed sertifikalar olur. Can sıkar. Ben de hızlıca işimi göreyim diye Requests kütüphanesinde şu meşhur (ve aslında tehlikeli) parametreyi kullandım:
Python:
response = requests.get('https://api.test.com/data', verify=False)
"Bir kerelik çalışsın da, sonra düzgün yaparım" mantığı. Çalıştı da... Hem de fazlasıyla!
Script'i çalıştırdıktan yaklaşık 30 saniye sonra, makinemden tüm dış bağlantılar kesildi. Slack, tarayıcı, her şey durdu. Önce "ağ mı gitti?" diye düşündüm. Sonra terminaldeki eski SSH bağlantımın da koptuğunu fark ettim. İçimden "Yok artık" dedim.
Tam panik halindeyken, IT güvenlik ekibinden bir arkadaş aradı. Sesi ciddiydi: "Abi, senin IP'den şüpheli bir trafik algılandı. Güvenlik duvarı, MITM (Man-in-the-Middle) saldırısı veya sertifika doğrulamasını atlatma girişimi olarak işaretledi ve otomatik olarak seni karalisteye aldı."
Kafayı yiyecektim! Meğerse `verify=False` kullanmak, güvenlik duvarının derin paket inceleme (DPI) sistemleri tarafından aktif bir güvenlik ihlali girişimi olarak yorumlanabilirmiş. Şaka gibi ama gerçek.
Neyse ki IT ekibi anlayışlıydı, durumu açıkladım ve erişimimi geri açtılar. Asıl çözüm, geliştirme ortamı için geçerli olan CA sertifikasını sistemime eklemek ve `verify` parametresini doğru sertifika yoluna yönlendirmekti.
Python:
response = requests.get('https://api.test.com/data', verify='/path/to/dev_certificate.pem')
Özetle: `verify=False` asla, ama asla production kodu veya kurumsal ağda "hızlı test" için bile kullanılmamalı. Güvenlik sistemleri bunu ciddiye alıyor. Ben de aldım başıma geleni.
Siz de benzer bir "hızlı çözümün" başınızı ağrıttığı oldu mu? Ya da geliştirme ortamında SSL sertifikalarıyla uğraşmak için daha temiz bir yönteminiz var mı?