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

标签 delphi ssl public-key-encryption ararat-synapse

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

更新:

感谢 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 保存到文件中,并在以后使用它们。

最佳答案

是的;您可以使用 the plugins 之一随 Synapse 一起提供。正如那里也提到的那样,最好的办法是使用 ssl_openssl.pas .如果你决定遵循这个,你将需要除了 Sysapse还有 OpenSSL library .作者推荐OpenSSL 0.9.7但正如他在我们本地论坛上所说,它似乎也适用于 OpenSSL 1.0.0d。

请注意,如果您使用的是 D2009 以上版本,您将需要 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;

关于delphi - 如何使用 Synapse 建立安全连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6334141/

相关文章:

c# - X509Certificate2 - 如果使用 ECC 证书,则拒绝访问异常

Delphi 7 - 何时使用 .create(Application) 以及何时使用 .create(nil)?

sql-server - 提供程序 : SSL Provider, 错误:0 - 现有连接被远程主机强行关闭

multithreading - 为什么 Delphi 应用程序有多个线程?

javascript - node.js中tls模块的newSession事件返回的session id类型

ssl - Libvirt 和 TLS 忽略 CA 文件设置

c++ - 公钥完整性 - 中间人攻击

swift - 使用 SwiftyRSA 的 RSA 加密

delphi - 从未构建的包 [xxx] 必须重新编译/共享违规 [Delphi 文档问题]

xml - 使用带有命名空间的 ChildNodes 从 XML 中读取值