不支持使用 SSL-TLS 1.2 的 DataSnap 独立服务器 (EXE)?

问题描述 投票:0回答:1

我通过使用项目向导并选择 HTTPS 协议以及合适的 SSL 证书创建了一个基本的独立 DataSnap 服务器。

一切正常,除了它仅支持 TLS 1.0。服务器支持 TLS 1.2 对于我的项目至关重要。我需要做什么才能让它使用 TLS 1.2?我已确保使用最新版本的 OpenSSL DLL。

我正在使用 Delphi 10.0 Seattle Update 1。我查看了 Delphi 10.1 Berlin 的错误修复列表,其中提到了这一点:

RSP-12760 IPPeerAPI 缺乏 TLS 1.2 支持

查看 RSP-12760,看起来这可能相关,但我有点认为这是针对 HTTPS 客户端而不是服务器的修复。

任何人都可以确认使用 10.1 Berlin 构建的 DataSnap 服务器是否支持 TLS 1.2?或者它应该在 10.0 西雅图工作吗?

delphi https tls1.2 datasnap
1个回答
0
投票

我设法用 Delphi Rio 10.3.3 做到这一点。 当前的数据快照并不能改变这一点。 Delphi XE 的下一个版本似乎已经允许这样做。 你可以在代码中看到它

procedure TDSHTTPSServerIndy.InitializeServer;
var
 LIOHandler: IIPServerIOHandlerSSLOpenSSL;
begin
 inherited;
 if Server <> nil then
 begin
  LIOHandler := PeerFactory.CreatePeer(IPImplementationID, IIPServerIOHandlerSSLOpenSSL, Server.GetObject as TComponent) as IIPServerIOHandlerSSLOpenSSL;
  

LIOHandler.SSLOptions.Method := TIPSSLVersionPeer.sslvTLSv1;

  LIOHandler.SSLOptions.Mode := TIPSSLModePeer.sslmServer;
  LIOHandler.SSLOptions.CertFile := FCertFile;
  LIOHandler.SSLOptions.RootCertFile := FRootCertFile;
  LIOHandler.SSLOptions.KeyFile := FKeyFile;

  LIOHandler.OnGetPassword := OnGetPassword;
  Server.IOHandler := LIOHandler;
  Assert(not Assigned(Server.OnConnect));
  Server.OnConnect := ServerOnConnect;
end;

结束;

因为无法重新编译datasnap源,所以要在派生类中更改该行。只是:

  1. 创建我们自己的类(例如:TNewClass)来替换 TDSHTTPSServerIndy,然后将代码行更改为:

    LIOHandler.SSLOptions.Method := TIPSSLVersionPeer.sslvTLSv1_2;

  2. 创建新类,派生自TDSHttpService

  3. 覆盖

    function TDSHTTPService.CreateHttpServer
    ,因此它将在第1点使用我们的新类(TNewClass)

注意:TDSHTTPSServerIndy 无法派生,因为该类是在实现部分声明的,因此我们必须重新创建此类。

确保使用最新的 libeay32.dll 和 ssleay32.dll,至少版本 1.0.2.21。

如果您需要完整的代码示例,请给我发电子邮件。

谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.