【问题标题】:Error creating SSL context (140A90F1:lib(20):func(169):reason(241))创建 SSL 上下文时出错 (140A90F1:lib(20):func(169):reason(241))
【发布时间】:2020-02-17 21:53:39
【问题描述】:

我们其中一个位置的单个用户在全天随机发送电子邮件时收到“创建 SSL 上下文时出错”。一旦发生错误,他们需要重新启动程序。该例程适用于我们的其他(电子邮件)用户。

完整的错误是:

Error creating SSL context.
error:140A90F1:lib(20):func(169):reason(241)

该错误映射到“错误:140A90F1:SSL 例程:SSL_CTX_new:无法加载 ssl2 md5 例程”

这给了我更多的继续,我发现了一些有趣的结果。相当多的结果是针对不同环境的,但在旧版 Embarcadero 支持表单(但针对 HTTP)中,Delphi 用户发生了惊人相似的问题。 Dave Nottage (TeamB) 甚至在某个时候插话说他的一个客户也遇到了这个问题。

Remy 讨论了不应将 OpenSSL 用于 SSLv2 甚至 SSLv3,然后讨论转移到正在使用的 DLL 版本,然后跌落悬崖。至于线程的第一部分,我的用户正在使用 Office365,IdSMTP.UseTLS 设置为 utUseExplicitTLS,IdSMTP.AuthType 设置为 satDefault。 IOHandler (TIdSSLIOHandlerSocketOpenSSL) SSL 方法已设置为 sslvTLSv1_2,但没有成功。至于线程的后半部分,我的用户从here 收到了最新的 Indy OpenSSL DLL。

Over on the OpenSSL github 用户也遇到了同样的问题,包括它来来去去的事实。他们甚至更新了他们的 Indy 库,但没有运气。

这是 OpenSSL 的东西、Indy 的东西、Delphi 的东西还是我的东西?根据 Google 返回的多个结果,我可以看出这是所有开发环境(包括 Delphi 10.1)中的一个常见问题。

我可以做些什么来调试这个?我能够放下软件的私有版本。有什么我可以尝试的冰雹设置吗?

【问题讨论】:

  • 我的客户仍然遇到同样的问题,但它一年只发生几次。我注意到原因 241 是“UNEXPECTED_MESSAGE” - 不确定这是否有帮助
  • 这可能有点牵强,但是找出你的程序在做什么的一种方法是运行 Wireshark 来捕获本地端和远程端之间的完整 TCP/SSL 连接 - 能够看到什么客户端提供的密码和 TLS 版本以及服务器协商的内容可能会建议您需要更改的设置。
  • 在大多数平台上,Indy 通过外部 DLL 动态使用 OpenSSL。您的主应用程序是否可能正在执行某些操作,例如在 DLL 中使用 Indy 本身,这会导致 Indy 动态卸载 OpenSSL?卸载 OpenSSL 后,重新加载它会导致重大问题。 OpenSSL 的设计或意图是在进程终止之前卸载(OpenSSL 1.1.x 甚至会竭尽全力防止卸载)。
  • 感谢 Remy 的回复,即使在这么长时间之后。这最终证明是由于在我的主程序和辅助 DLL 中使用 OpenSSL DLL 引起的。对于将来可能正在阅读的任何人,请参阅stackoverflow.com/questions/60401489/…

标签: delphi openssl indy10 delphi-xe3


【解决方案1】:

我有同样的问题,但后来使用:

libcrypto-1_1.dll + libssl-1_1.dll

而不是旧的:

libeay32.dll + ssleay32.dll

问题消失了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-23
    • 2016-12-12
    • 2016-03-03
    • 2018-05-20
    相关资源
    最近更新 更多