如何使用Synapse建立安全连接?

tru*_*ger 9 delphi ssl apache-synapse public-key-encryption

我正在测试Synapse并想知道如何建立安全连接.我注意到它支持SSL,但我不确定它是否适合我的需求.我没有CA的证书.我只想加密我的服务器程序和客户端程序之间的所有数据.当然,我可以在发送之前自己加密数据.但是如果SSL可以加密数据,也许我可以使用它.据我所知,SSL用于"加密"和"身份验证".我需要的只是"加密".Synapse有可能吗?

更新:

感谢daemon_x和Synapse的作者Lukas Gebauer的帮助,我想我终于让它发挥了作用.这是我做的:

服务器端:

1)在你的单元中使用ssl_openssl并将'libeay32.dll'和'ssleay32.dll'放到exe文件的同一目录中

2)接受连接后,为新创建的套接字添加以下代码行.

fclient.SSLAcceptConnection;
Run Code Online (Sandbox Code Playgroud)

客户方:

1)在你的单元中使用ssl_openssl并将'libeay32.dll'和'ssleay32.dll'放到exe文件的同一目录中

2)连接到服务器后,添加以下行.

fclient.SSLDoConnect;
Run Code Online (Sandbox Code Playgroud)

如果没有发生错误,则连接现在是安全的.但是当您运行代码时,如Synapse文档中所述,您可能会注意到SSLAcceptConnection需要一些时间才能返回.因此,如果您想加快速度,最好先预先创建证书文件和私钥文件.并在SSLAcceptConnection之前添加以下代码

  fclient.SSL.CertificateFile := 'bs-cert';
  fclient.SSL.PrivateKeyFile := 'bs-privatekey';
Run Code Online (Sandbox Code Playgroud)

如果您没有证书和私钥,请参阅ssl_openssl中的"CreateSelfSignedCert"以获取自签名证书和私钥.您可以通过WriteStrToStream将FCertificate和FPrivatekey保存到文件中,稍后再使用它们.

小智 6

是的; 你可以使用Synapse附带的一个插件.正如它在那里也提到的那样,最好是使用ssl_openssl.pas.如果你决定采用这种之一,你将需要除了SysapseOpenSSL库.作者推荐OpenSSL 0.9.7,但正如他在我们的本地论坛上所说,它似乎也适用于OpenSSL 1.0.0d.

请注意,如果您使用的是D2009,则需要Unicode支持,版本中不完全支持.请改为下载最新版本.

以下示例代码接收前1024个字节作为对HTTP GET使用SSL加密的安全网站的方法的响应.我已经使用OpenSSL 0.9.8h最新版本的Synapse.注意你需要把libssl32.dlllibeay32.dllOpenSSL包装到你的输出目录,以使其正常工作.让我们有一个带有按钮和备忘录的表单,我们会收到一个结果.

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;
Run Code Online (Sandbox Code Playgroud)