2011-06-13 28 views
9

我正在測試Synapse並希望知道如何建立安全連接。我注意到它支持SSL,但我不確定它是否適合我的需求。我沒有CA的證書。我只想加密我的服務器程序和客戶端程序之間的所有數據。當然,我可以在發送之前自己加密數據。但是如果SSL可以加密數據,也許我可以使用它。據我所知,SSL是用於「加密」和「認證」的。我需要的只是「加密」。 Synapse可能嗎?如何使用Synapse建立安全連接?

UPDATE:

感謝來自daemon_x和突觸,盧卡斯葛鮑爾筆者幫助,我想我終於使它工作。下面是我所做的:

服務器端

1)採用ssl_openssl在你的單位,並把「的libeay32.dll」和「ssleay32.dll」的exe文件的同一目錄

2)接受連接後,爲新創建的套接字添加以下代碼行。

fclient.SSLAcceptConnection; 

客戶端

1)在你的單元使用ssl_openssl並把 '的libeay32.dll' 和 'ssleay32.dll' 的exe文件

2)相同的目錄連接到服務器後,添加以下行。

fclient.SSLDoConnect; 

如果沒有發生錯誤,連接現在是安全的。但是當你運行你的代碼時,如Synapse文檔中所述,你可能會注意到SSLAcceptConnection需要一些時間才能返回。所以如果你想加快速度,你最好先創建一個證書文件和私鑰文件。而SSLAcceptConnection

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

前添加以下代碼如果沒有證書和私鑰,請參考「CreateSelfSignedCert」在ssl_openssl用於獲取自簽名的證書和私鑰。例如,可以通過WriteStrToStream將FCertificate和FPrivatekey保存到文件中並稍後使用它們。

回答

6

是的,您可以使用Synapse隨附的the plugins之一。正如它在那裏也提到的,最好的是使用ssl_openssl.pas。如果你決定遵循這一步,你將需要除了SysapseOpenSSL library。作者建議OpenSSL 0.9.7,但正如他在我們的本地論壇上所說的,它似乎也適用於OpenSSL 1.0.0d。

請注意,如果您使用的是D2009,則需要Unicode版本中尚未完全支持的Unicode支持。改爲下載latest version

以下示例代碼接收前1024個字節,以使用SSL加密一個安全網站的HTTP GET方法的響應。我用它OpenSSL 0.9.8hlatest version of Synapse。請注意,您需要將OpenSSL包中的libssl32.dlllibeay32.dll放在您的輸出目錄中,以使其正常工作。讓我們用一個按鈕和備忘錄的表單來獲取結果。

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

我感謝您的幫助。我最困惑的是,我不知道如何在沒有證書時使用加密通道。在服務器端接受連接後,我嘗試調用「SSLAcceptConnection」。並且在連接到服務器之後在客戶端調用「SSLDoConnect」。他們「似乎」工作。但我可以在哪裏設置密碼?我試過「SSL.Password」,但似乎是解密證書。即使密碼不同,連接仍然建立。 – trudger 2011-06-14 01:48:04

+0

@trudger您可以創建自簽名證書。 – Harriv 2011-06-14 05:35:57

+0

是否有任何組件/代碼可以集成到我的程序中以生成證書?我認爲用戶自己生成證書有點複雜。 – trudger 2011-06-14 06:02:26

相關問題