2011-06-13 21 views
9

Synapse'ı test ediyorum ve nasıl güvenli bir bağlantı kurabilirim bilmek istiyorum. SSL'yi desteklediğini fark ettim, ancak gereksinimlerime uygun olup olmadığından emin değilim. CA’dan sertifika almıyorum. Sadece sunucu programım ve istemci programım arasındaki tüm verileri şifrelemek istiyorum. Elbette verileri göndermeden önce şifreleyebilirim. Ancak SSL verileri şifreleyebilirse, belki de kullanabilirim. Bildiğim kadarıyla SSL, "şifreleme" ve "kimlik doğrulama" içindir. İhtiyacım olan sadece "şifreleme" dir. Synapse ile mümkün mü?Synapse kullanarak güvenli bir bağlantı nasıl kurulur?

GÜNCELLEME: daemon_x ve Synapse, Lukas Gebauer yazarı yardımcı olmak için

sayesinde, nihayet o iş yapmak düşünüyorum. İşte ne yaptım şunlardır:

Sunucu Tarafı:

1) Biriminizde ssl_openssl kullanır ve exe dosyasının aynı dizine 'libeay32.dll' ve 'SSLeay32.dll' koydu

2) Bir bağlantı kabul edildikten sonra, yeni oluşturulan soket için aşağıdaki kod satırlarını ekleyin.

fclient.SSLAcceptConnection; 

İstemci tarafı:

1) Biriminizde ssl_openssl kullanır ve exe dosyası

2) aynı dizine 'libeay32.dll' ve 'SSLeay32.dll' koymak Sunucuya bağlandıktan sonra, aşağıdaki satırı ekleyin.

fclient.SSLDoConnect; 

Hata yoksa, bağlantı güvenlidir. Ancak, Synapse belgesinde belirtildiği gibi kodunuzu çalıştırdığınızda, SSLAcceptConnection öğesinin geri dönmek için biraz zaman aldığını fark edebilirsiniz. Yani, bir şeyleri hızlandırmak istiyorsanız, bir sertifika dosyası ve özel anahtar dosyasını önceden oluşturmalısınız. Bir sertifika ve özel anahtarı yoksa Ve SSLAcceptConnection

fclient.SSL.CertificateFile := 'bs-cert'; 
    fclient.SSL.PrivateKeyFile := 'bs-privatekey'; 

önce aşağıdaki kodu ekleyin, kendinden imzalı sertifika ve özel anahtar almak için ssl_openssl içinde "CreateSelfSignedCert" bakınız. Örneğin WriteStrToStream, FCertificate ve FPrivatekey dosyalarını dosyalara kaydedebilir ve daha sonra kullanabilirsiniz.

cevap

6

Evet; Synapse ile birlikte verilen the plugins'dan birini kullanabilirsiniz. Orada da belirtildiği gibi, en iyi ssl_openssl.pas kullanmaktır. Bunu takip etmeye karar verirseniz, Sysapse ve ayrıca OpenSSL library. Yazar, OpenSSL 0.9.7'u önermektedir ancak yerel forumumuzda da belirttiği gibi OpenSSL 1.0.0d ile de çalışmaktadır.

Not D2009'u kullanıyorsanız, sürümde tam olarak desteklenmeyen bir Unicode desteğine ihtiyacınız olacaktır. Bunun yerine latest version'u indirin.

Aşağıdaki örnek kod, SSL şifrelemesi kullanan güvenli bir web sitesinin HTTP GET yöntemine bir yanıt olarak ilk 1024 bayt'ı alır. latest version of Synapse ile OpenSSL 0.9.8h için kullandım. Not: ve libeay32.dllOpenSSL paketinden doğru şekilde çalışmasını sağlamak için çıkış dizininize koymanız gerekir. Sonuç aldığımız bir düğme ve not içeren bir form alalım.

uses blcksock, synautil, synsock, ssl_openssl, ssl_openssl_lib; 

procedure TForm1.Button1Click(Sender: TObject); 
var Socket: TTCPBlockSocket; 

begin 
    Socket := TTCPBlockSocket.Create; 

    try 
    Socket.Connect('www.yousendit.com', '443'); // connect to the host 
    Socket.SSLDoConnect; // start SSL connection; only server has a certificate 

    if Socket.LastError = 0 then 
     begin 
     Socket.SendString('GET' + CRLF); // request GET method 
     Memo1.Text := Socket.RecvBufferStr(1024, 1000); // receive 1024 bytes 
     end; 

    finally 
    Socket.Free; 
    end; 
end; 
+0

Yardımlarınız için minnettarım. Benim için en fazla karışıklık, sertifikam olmadığı zaman şifrelenmiş kanalı nasıl kullanabileceğimi bilmem. Sunucu tarafında bir bağlantı kabul edildikten sonra "SSLAcceptConnection" u çağırmayı denedim. Ve sunucuya bağlı sonra istemci tarafında "SSLDoConnect" çağırdı. Çalışmak için "görünüyor". Ama şifreyi nerede kurabilirim? "SSL.Password" ı denedim, ancak şifrenin şifresini çözmek için görünüyor. Şifre farklı olsa bile bağlantı kurulur. – trudger

+0

@trudger Kendinden imzalı sertifikalar oluşturabilirsiniz. – Harriv

+0

Sertifikayı oluşturmak için programıma entegre edebileceğim herhangi bir bileşen/kod var mı? Kullanıcıların sertifikayı kendilerinin oluşturması biraz karmaşık bir durum. – trudger