2011-06-13 105 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