微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?