folder Tahribat.com Forumları
linefolder İnternet Güvenliğine Giriş
linefolder Sunucular Arası Güvenli İletişim (SSL) İçin Ne Yapabilirim?



Sunucular Arası Güvenli İletişim (SSL) İçin Ne Yapabilirim?

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    RockZs
    RockZs's avatar
    Kayıt Tarihi: 30/Haziran/2002
    Erkek

    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 (ya da benzer varsa başka şekillerde) 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
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    moi
    moi's avatar
    Kayıt Tarihi: 26/Mayıs/2009
    Erkek

    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...
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    RockZs
    RockZs's avatar
    Kayıt Tarihi: 30/Haziran/2002
    Erkek
    moi bunu yazdı

    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('crypto'),
        algorithm = 'aes-256-ctr',
        password = 'tbttbttbt123123123';

     

    RockZs tarafından 04/Oca/17 22:34 tarihinde düzenlenmiştir
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    moi
    moi's avatar
    Kayıt Tarihi: 26/Mayıs/2009
    Erkek
    var crypto = require('crypto'),
        algorithm = 'aes-256-ctr',
        password = 'tbttbttbt123123123';

    Bu şekilde aradaki veriyi gayet güzel şifreliyorsun hocam. Anladığım kadarıyla password(key) ü iki tarafta da sen belirtiyorsun(simetrik), yani bir yandan da iki taraf da birbirlerininin kimliğinden emin oluyor. Amaç sadece şifreleme ise bundan ötesi karmaşık(bkz. kaş yapayım derken göz çıkarmak) 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(key) ü kullanırsan, bağlantıyı yeterince dinleyen biri, işe yarar bazı çıkarımlar yapabilir.(asimetrik şifrelemeyle her defasında farklı password kullanmak gerek)

    - 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(key) 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ı(public key'ini) ö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.

     

    (Bu kısım şemadan önceki karmaşık paragrafta mevcut değil) Bir de farkettiysen 5. ve 6. adımlarda istemci de kendi sertifikasını(ve tabi onun içinde public key'ini) 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ı(public key'ini) ö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 sözlü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 gönderen sunucun.

     

    moi tarafından 05/Oca/17 02:13 tarihinde düzenlenmiştir

    Sadece paranoyaklar hayatta kalır...
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    MhmdAlmz
    MhmdAlmz's avatar
    Kayıt Tarihi: 09/Ağustos/2015
    Erkek

    @moi bilgilendirme için çok teşekkürler hocam banada lazımdı böyle 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 (ahiret dünyadan) 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 (doğru) yola koymadı mı? Seni bir yoksul iken zengin etmedi mi? Öyle ise, sakın yetime kahretme (onu horlama)! El açıp isteyeni de azarlama! Fakat Rabbinin nimetini anlat da anlat!
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    moi
    moi's avatar
    Kayıt Tarihi: 26/Mayıs/2009
    Erkek
    MhmdAlmz bunu yazdı

    @moi bilgilendirme için çok teşekkürler hocam banada lazımdı böyle birşey 

    Rica ederim hocam, yardımcı olabildiysem ne güzel.


    Sadece paranoyaklar hayatta kalır...
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    RockZs
    RockZs's avatar
    Kayıt Tarihi: 30/Haziran/2002
    Erkek

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

Toplam Hit: 7783 Toplam Mesaj: 7
tls