【问题标题】:How to establish a secure connection by using Synapse?如何使用 Synapse 建立安全连接?
【发布时间】:2011-09-14 02:48:47
【问题描述】:

我正在测试 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 保存到文件中并在以后使用它们。

【问题讨论】:

    标签: delphi ssl public-key-encryption synapse


    【解决方案1】:

    是的,是的;您可以使用 Synapse 附带的the plugins 之一。正如那里也提到的,最好使用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.8h 和latest version of Synapse。请注意,您需要将 OpenSSL 包中的 libssl32.dll 和 libeay32.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;
    

    【讨论】:

    • 感谢您的帮助。对我来说最困惑的是,当我没有证书时,我不知道如何使用加密通道。在服务器端接受连接后,我尝试调用“SSLAcceptConnection”。并且,在连接到服务器后在客户端调用“SSLDoConnect”。他们“似乎”工作。但是我在哪里可以设置密码?我试过“SSL.Password”,但似乎是为了解密证书。即使密码不同,连接仍然建立。
    • @trudger 您可以创建自签名证书。
    • 是否有任何组件/代码可以集成到我的程序中以生成证书?我认为用户自己生成证书有点复杂。
    • @trudger - SSLAcceptConnection 用于服务器端。关于证书;还有一种方法是 Synapse creates ad-hoc 为您提供证书。原则上应该可以使用Connect与主机建立连接,指定SSL.Username,SSL.Password并调用SSLDoConnect。还要检查您的 SSL 库是否正常工作;它不会抛出任何错误,而是不会工作。您可以通过SSL.LibName查看;这应该返回 ssl_none 以外的其他内容。
    • @daemon_x 我想我已经成功了。连接到服务器后,在客户端使用“SSLDoConnect”。并且,服务器在接受连接后调用“SSLAcceptConnection”。现在,问题是,正如 Synpase 文档中所述,它减慢了连接速度。我的 i3 笔记本中的“SSLAcceptConnection”大约需要 2 秒才能返回。它太慢了,我想我最好先创建一个自签名证书来加快速度。我可以通过 Synapse 生成证书吗?我不知道如何获取 CertificateFile、PrivateKeyFile 和 CertCAFile。
    猜你喜欢
    • 2020-10-14
    • 2018-01-27
    • 2012-07-13
    • 1970-01-01
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多