9

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

更新:

感谢 daemon_x 和 Synapse 的作者 Lukas Gebauer 的帮助,我想我终于成功了。以下是我所做的:

服务器端

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';

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

4

1 回答 1

6

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

请注意,如果您使用的是 D2009,您将需要 Unicode 支持,但版本中不完全支持该支持。请下载最新版本

以下示例代码接收前 1024 个字节作为对HTTP GET使用 SSL 加密的安全网站方法的响应。我已经使用OpenSSL 0.9.8h最新版本的 Synapselibssl32.dll请注意,您需要将libeay32.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;
于 2011-06-13T21:08:27.177 回答