问题描述
我有一个使用 ISAPI DLL 托管在 IIS 上的 Delphi Intraweb 应用程序。此应用程序通过 IndyClient
在内部与 Windows 服务应用程序连接。 Windows 服务充当应用服务器,并用 Delphi 本身编写。
我想通过 TLS/SSL 保护 IndyClient
和 IndyServer
(在 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 (将#修改为@)