【发布时间】:2016-03-14 12:23:36
【问题描述】:
我的平台是这个
- OS X Yosemite 10.10.5
- 最新的 Indy(10.6.2.0,2016 年 3 月 13 日下载 - Indy10_5346.zip)
- 拉撒路 1.4.4
关于我尝试过的 OpenSSL 版本:
- HomeBrew OpenSSL 安装如下:"brew install openssl --通用”
- /usr/lib/ 中提供的内置 (0.9.8) OS X
我收到错误:
EIdOSSLConnecError 连接 SSL 时出错 - 观察到 EOF 违反协议
在文件 Protocols/IdSSLOpenSSLHeaders.pas 的第 19418 行
但是,由于我使用的是最新版本 - 为什么会出现此错误?
(在调用 OpenEncodedConnection 时发生)
以下是我设置 Indy HTTP 客户端 OpenSSL 处理程序的方法:
FIOHandlerOpenSSL := TIdSSLIOHandlerSocketOpenSSL.Create;
FIOHandlerOpenSSL.SSLOptions.SSLVersions := [sslvSSLv23,sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2]
FIOHandlerOpenSSL.Mode := sslmClient;
FIOHandlerOpenSSL.VerifyMode := [];
FIOHandlerOpenSSL.VerifyDepth := 0;
【问题讨论】:
-
看看 Remy Lebeau 在这里给出的答案 - forums.embarcadero.com/message.jspa?messageID=682440
-
会尝试(谢谢!)我还会发布更多代码
-
到目前为止没有运气...我相信我现在使用了所有推荐的设置
-
FIOHandlerOpenSSL.SSLOptions.SSLVersions[sslvSSLv23,sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2]不是有效的代码语法。您需要:=运算符。并且不要指定sslvSSLv23:FIOHandlerOpenSSL.SSLOptions.SSLVersions := [sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2] -
SSLv23 是 OpenSSL API 中的通配符,它不是通过网络发送的实际协议版本。它是一种包含其他版本并通过网络提供版本协商的机制。如果服务器端未使用 SSLv23,则无法与客户端协商版本。客户端需要匹配其
SSLVersions设置以匹配服务器实际使用的内容。
标签: macos delphi openssl indy lazarus