Delphi Intraweb ISAPI DLL 无法使用 TLS/SSL 与服务器连接

问题描述

我有一个使用 ISAPI DLL 托管在 IIS 上的 Delphi Intraweb 应用程序。此应用程序通过 IndyClient 在内部与 Windows 服务应用程序连接。 Windows 服务充当应用服务器,并用 Delphi 本身编写。

我想通过 TLS/SSL 保护 IndyClientIndyServer(在 Windows 服务端)之间执行的通信。为此,我在客户端使用 TIdSSLIOHandlerSocketopenSSL,在服务端使用 TIdServerIOHandleRSSLOpenSSL。下面的代码已经写在服务端 -

IdServerIOHandleRSSLOpenSSL1.SSLOptions.CertFile := Config.ServerCertificate; 
IdServerIOHandleRSSLOpenSSL1.SSLOptions.KeyFile := Config.ServerKey;

IdServerIOHandleRSSLOpenSSL1.SSLOptions.Mode := sslmServer;
IdServerIOHandleRSSLOpenSSL1.SSLOptions.VerifyMode := [];
IdServerIOHandleRSSLOpenSSL1.SSLOptions.VerifyDepth  := 0;
IdServerIOHandleRSSLOpenSSL1.SSLOptions.SSLVersions := [sslvTLSv1_2];

IndyServer.IOHandler := IdServerIOHandleRSSLOpenSSL1;
IndyServer.OnConnect := ServerConnect;

// Config object gets the correct path for certificate and key file

// Code for ServerConnect event 
if (AContext.Connection.IOHandler is TIdSSLIOHandlerSocketBase) then
   TIdSSLIOHandlerSocketBase(AContext.Connection.IOHandler).Passthrough := False;

下面的代码写在 ISAPI DLL 中以连接 IndyServer

  IdSSLIOHandler.SSLOptions.VerifyMode := [];
  IdSSLIOHandler.SSLOptions.VerifyDepth := 0;
  IdSSLIOHandler.SSLOptions.SSLVersions := [sslvTLSv1_2];
  IdSSLIOHandler.SSLOptions.Mode := sslmClient;
  IndyClient.IOHandler := IdSSLIOHandler;
  TIdSSLIOHandlerSocketBase(IndyClient.IOHandler).Passthrough := False;

当我在 IIS 上托管 ISAPI DLL 并尝试连接 Windows 服务时,在 Windows 服务端代码中收到以下错误消息 -

EIdOSSLAcceptError with message 'Error accepting connection with SSL.EOF was observed that violates the protocol'

我有一个桌面客户端应用程序,它使用在客户端编写的相同代码成功连接到同一个 Windows 服务。

我正在使用自签名证书并尝试将 IIS 配置为也使用 HTTPS。我的 Delphi 版本是 Delphi 10.2 Tokyo

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...