Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 如何使用Synapse建立安全连接?_Delphi_Ssl_Public Key Encryption_Synapse - Fatal编程技术网

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

Delphi 如何使用Synapse建立安全连接?,delphi,ssl,public-key-encryption,synapse,Delphi,Ssl,Public Key Encryption,Synapse,我正在测试Synapse,想知道如何建立安全连接。我注意到它支持SSL,但我不确定它是否适合我的需要。我没有CA的证书。我只想加密服务器程序和客户端程序之间的所有数据。当然,我可以在发送之前自己加密数据。但是如果SSL可以加密数据,也许我可以直接使用它。据我所知,SSL用于“加密”和“身份验证”。我需要的只是“加密”。Synapse有可能吗 更新: 感谢daemon_x和Synapse的作者Lukas Gebauer的帮助,我想我终于成功了。以下是我所做的: 服务器端: 1) 在您的单元中使用s

我正在测试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”以获取自签名证书和私钥。例如,您可以通过将FCertificate和FPrivatekey写入文件并在以后使用来保存它们。

是的;您可以使用Synapse附带的其中一种。正如上面提到的,最好是使用。如果你决定遵循这一点,你将需要除了。作者推荐,但正如他在本地论坛上所说,它似乎也适用于OpenSSL 1.0.0d

注意:如果您使用的是D2009 up,则需要Unicode支持,而该版本不完全支持Unicode。请下载

以下示例代码接收前1024个字节,作为对使用SSL加密的安全网站的
HTTPGET
方法的响应。我已经用过了。注意:您需要将
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证书。原则上,通过使用
Connect
、指定
SSL.Username
SSL.Password
和调用
SSLDoConnect
与主机建立连接就足够了。还要检查SSL库是否正常工作;它不会抛出任何错误,相反,它不会工作。您可以通过SSL.LibName检查它;这应该会返回除
ssl\u none
@daemon\u x之外的其他内容,我想我已经让它工作了。连接到服务器后,在客户端使用“SSLDoConnect”。并且,服务器在接受连接后调用“SSLAcceptConnection”。现在的问题是,正如Synpase文档中提到的,它会减慢连接速度。我的i3笔记本中的“SSLAcceptConnection”花了大约2秒钟才恢复。它太慢了,我想我最好先创建一个自签名证书来加速它。我可以通过Synapse生成证书吗?我不知道如何获得CertificateFile、PrivateKeyFile和CertCAFile。