Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi EIdOSSLUnderlyingCryptoError异常-SSL3\u获取\u记录错误的版本号_Delphi_Multipartform Data_Firemonkey_Tls1.2_Indy - Fatal编程技术网

Delphi EIdOSSLUnderlyingCryptoError异常-SSL3\u获取\u记录错误的版本号

Delphi EIdOSSLUnderlyingCryptoError异常-SSL3\u获取\u记录错误的版本号,delphi,multipartform-data,firemonkey,tls1.2,indy,Delphi,Multipartform Data,Firemonkey,Tls1.2,Indy,我尝试使用TRESTClient连接到使用TLS1.2的HTTPS web服务。但发送多部分/表单数据时运气不佳 所以现在我在尝试印第。我得到了这个错误的版本号错误 我认为代码没有问题,因为它与HTTP一起工作 也许我的德尔福遗漏了什么。我应该安装什么以及如何安装 步骤t对于M10.Button2单击发送者:对象; 变量 HTTP:TIdHTTP; 请求主体:TStream; 响应体:字符串; myssl:TIdSSLIOHandlerSocketOpenSSL; 输入:TIdMultipart

我尝试使用TRESTClient连接到使用TLS1.2的HTTPS web服务。但发送多部分/表单数据时运气不佳

所以现在我在尝试印第。我得到了这个错误的版本号错误

我认为代码没有问题,因为它与HTTP一起工作

也许我的德尔福遗漏了什么。我应该安装什么以及如何安装

步骤t对于M10.Button2单击发送者:对象; 变量 HTTP:TIdHTTP; 请求主体:TStream; 响应体:字符串; myssl:TIdSSLIOHandlerSocketOpenSSL; 输入:TIdMultipartFormDataStream; 开始 响应体:=; 尝试 尝试 HTTP:=TIdHTTP.Create; 尝试 输入:=TIdMultipartFormDataStream.Create; 尝试 输入。清除; Input.AddFormField'Email','xx@xx.com.tr'; 输入.AddFormField'Password','xx'; myssl:=TIdSSLIOHandlerSocketOpenSSL.CreateHTTP; HTTP.IOHandler:=myssl; myssl.SSLOptions.Mode:=sslmUnassigned; myssl.SSLOptions.Method:=sslvTLSv1_2; myssl.SSLOptions.SSLVersions:=[sslvTLSv1_2]; HTTP.HTTPOptions:=[hoForceEncodeParams]; HTTP.Request.CustomHeaders.foldline:=False; ResponseBody:=HTTP.Post'https://xxx.com.tr/api/Mobile/MobileLoginControl,输入; 最后 免费输入; 终止 最后 HTTP.Free; 终止 最后 终止 除了 响应体:='-20'; 终止 终止
代码很好,不过您只在SSLIOHandler上启用了TLS1.2。可能该网站不支持TLS1.2?同时尝试启用TLS 1.0和1.1:

myssl.SSLOptions.SSLVersions := [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2];

而且根本不要设置SSLOptions.Method。设置SSLVersion将更新该方法,反之亦然。因此,设置一个或另一个,而不是两个。

现在就尝试。我收到“ssl23\u获取\u服务器\u hello未知协议”错误。我甚至把端口放在我的url地址中,比如“xxx.com.tr:443”,结果是一样的。未知协议通常意味着OpenSSL接收到的不是有效的服务器握手。例如,如果您尝试在不使用SSL/TLS的端口上协商SSL/TLS握手。你试过嗅探网络流量以查看服务器实际发送的内容吗?实际上,我使用了一个网站来仔细检查服务器正在使用的内容。它使用的是TLS1_2,其他什么都没有。我用IdSSLOpenSSL.OpenSSLVersion检查了我的SSL版本,发现我的版本是“OpenSSL 1.0.0g 2012年1月18日”。我应该升级吗?如果是,如何进行@雷米Lebeau@RuhiGoktas是的,您需要升级OpenSSL,因为1.0.0已经过时。Indy支持的最新版本是1.0.2,对1.1.x的支持正在进行中。您可以从我下载的openssl-1.0.2q-x64_86-win64.zip获得更新的DLL。zip中有ssleay.ddl和libeay.dll,将它们复制到我的Windows/System32文件夹中,然后从代码中再次检查版本,但没有更改。同样的事情也发生在Windows/SysWOW64上。如何使Delphi识别我的SSL更改?