Selamlar, Sunucuya Letsencryt ile domain ile ilişkili ücretsiz olarak SSL kurabiliyorum fakat aklıma takıldı; domain olarak tanımlı olmayan sunucular arasında SSL ile nasıl güvenli iletişim kanalları oluşturabilirim? Self-signed sertifikalar oluşturmak mı gerekiyor? Bunun güvenli olmadığını okumuştum. Nasıl bir yol izlememi nerirsiniz? RockZs tarafından 04/Oca/17 20:10 tarihinde düzenlenmiştir

@moi bilgilendirme için çok teşekkürler hocam banada lazımdı byle birşey Rica ederim hocam, yardımcı olabildiysem ne güzel. Sadece paranoyaklar hayatta kalır...

@moi bilgilendirme için çok teşekkürler hocam banada lazımdı byle birşey Andolsun kuşluk vaktine ve dindiği zaman o geceye ki, Rabbin sana veda etmedi ve darılmadı! Ve kesinlikle senin için sonu nünden daha hayırlıdır. ileride Rabbin sana verecek de hoşnut olacaksın! O, seni bir yetim iken barındırmadı mı? Seni, yol bilmez iken yola koymadı mı? Seni bir yoksul iken zengin etmedi mi? yle ise, sakın yetime kahretme ! El açıp isteyeni de azarlama! Fakat Rabbinin nimetini anlat da anlat!

var crypto = require , algorithm = 'aes-256-ctr', password = 'tbttbttbt123123123'; Bu şekilde aradaki veriyi gayet güzel şifreliyorsun hocam. Anladığım kadarıyla password ü iki tarafta da sen belirtiyorsun , yani bir yandan da iki taraf da birbirlerininin kimliğinden emin oluyor. Amaç sadece şifreleme ise bundan tesi karmaşık olabilir. Tek bir şey var, 32byte lık random bir password kullansan iyi olur. Buradan sonrasıyla kendi isteğinle uğraşmakta zgürsün. Şu ana noktalar nemli; - Hep aynı password ü kullanırsan, bağlantıyı yeterince dinleyen biri, işe yarar bazı çıkarımlar yapabilir. - AES-256-CTR ile veri şifreleniyor fakat sadece bu algoritma verinin bütünlüğünden, değiştirilip değiştirilmediğinden emin olamazsın. Sadece dinlemek yerine paketlere müdahale etmeye çalışanlar da olabilir. Bunlara çzüm de senin de dediğin gibi SSL/TLS kullanmak. Ve bu senaryoda self-signed sertifika kullanmaktan korkmana gerek yok, çünkü sadece iki sunucun arasında kullanılacak. Bağlantı bekleyecek olan sunucunda, bir sertifikayla birlikte private-public key ikilisi yaratıp, bu public key'i de diğer sunucunda tanımlarsan, sadece senin oluşturduğun private key e sahip sunucuyla konuşabilecektir. Bu son cümle biraz karışık oldu ama zetle senin private key'ine sahip olmayan sunucuyla konuşamıyor olacak. İçime sinmedi, bir de şema üstünden anlatayım şu son paragrafı; (Şu andaki konfigürasyonunla doğrudan 9. adımdan başlamış oluyorsun. İki tarafta da simetrik password ile direk şifrelenmiş mesajlar alınıp verilmeye başlanıyor.) Anlatmaya çalıştığım şey aslında şu, 3. adımdaki sunucu sertifikası doğrulaması bir CA(https://eksisozluk.com/certificate-authority--162613) kanalıyla yapılır. Konuştuğun sunucunun gerçekten www.abc.com veya belli bir IP olduğundan bu şekilde emin olursun. Senin bu doğrulama sırasında CA doğrulaması yerine şunu yapman gerekiyor; 1) Sunucunun sertifikasını nceden istemci ile paylaşmak. 2) 3. adımdaki doğrulama esnasında sertifikayla birlikte gelen public key'in nceden belirlediğinle aynı olup olmadığını kontrol etmek. Bir de farkettiysen 5. ve 6. adımlarda istemci de kendi sertifikasını yolluyor. Sunucu da eğer isterse istemci sertifikasını doğruluyor. Yukarıdaki iki adımı bir de istemci için yaparsan, her iki taraf da birbirlerinin kimliklerinden emin olarak konuşacaklardır ki sanırım bu senin senaryona daha uygun. Yani, 1) İstemcinin sertifikasını nceden sunucu ile paylaşmak. 2) 6. adımdaki doğrulama esnasında sertifikayla birlikte gelen public key'in nceden belirlediğinle aynı olup olmadığını kontrol etmek. Burada da detaylı bir anlatım yapmışlar nasıl kodlayacağın ile ilgili: https://www.sitepoint.com/how-to-use-ssltls-with-node-js/ . "ssl-root-cas" başlığı altında da kendi oluşturduğun self-signed sertifikaları nasıl güvenilir kılacağını anlatmış. Dipnot: Bu yazıda ekşi szlükten link vermek istemezdim ancak acı bir şekilde türkçe kaynaklar pek yetersiz. Dipnot2: Şemadaki SSL server bağlantıyı bekleyen sunucun, SSL Client ise bağlantı isteği gnderen sunucun. moi tarafından 05/Oca/17 02:13 tarihinde düzenlenmiştir Sadece paranoyaklar hayatta kalır...

sunucular arasi derken, sunucular sadece birbirleri ile mi konusacak hocam? yoksa isteyen baglanabilecek mi? iletisim HTTP protokolu ustunden mi olacak yoksa baska bir protokol mu? bunlari cevaplarsan yardim edebilirim. sunucular websocket protokolü üzerinden sadece birbirleri ile konuşacaklar ama http de olur. SSL in domain olmadan en verimli şekilde nasıl kurulacağını bilemiyorum. yani maksat sniff edilince ne konuşulduğu anlaşılmasın. bunun için aşağıdaki gibi bir native crpyto modülü ile koruma yapabiliyorum ama daha güvenli/performanslı birşey var mı, onu araştırıyorum: var crypto = require , algorithm = 'aes-256-ctr', password = 'tbttbttbt123123123'; RockZs tarafından 04/Oca/17 22:34 tarihinde düzenlenmiştir

sunucular arasi derken, sunucular sadece birbirleri ile mi konusacak hocam? yoksa isteyen baglanabilecek mi? iletisim HTTP protokolu ustunden mi olacak yoksa baska bir protokol mu? bunlari cevaplarsan yardim edebilirim. Sadece paranoyaklar hayatta kalır...

@moi, kapsamlı yanıtın için çok teşekkür ederim. aklımdaki bir çok soruya yanıt vermiş oldun.