【发布时间】:2016-09-16 15:52:36
【问题描述】:
我有一个我发布到的网站,目前支持 TLS v1.1 和 TLS 1.2。他们很快将只允许 TLS ver 1.2 连接。为此,我将 Delphi 5 升级到了 Indy 10。
目前,我在代码中创建组件,每次运行 3 个线程时一切正常:
HTTp := TIdHttp.Create(nil);
HTTP.OnSelectAuthorization := HTTPSelectAuthorization;
HTTP.HTTPOptions := [hoInProcessAuth,hoForceEncodeParams,hoKeepOrigProtocol];
HTTP.OnStatus := HTTPStatus;
HTTP.OnWorkEnd := HTTPWorkEnd;
HTTP.Request.ContentType := 'application/x-www-form-urlencoded';
HTTP.ProxyParams.ProxyPort := ProxyPort;
HTTP.ProxyParams.ProxyUsername := ProxyUserName;
HTTP.ProxyParams.ProxyPassword := ProxyPassword;
HTTP.ProxyParams.BasicAuthentication := ProxyBasicAuth;
end;
If UseSSL and (SSL = nil) then
Begin
SSL := TIDSSLIOHandlerSocketOpenSSL.Create(nil);
SSL.SSLOptions.Mode := sslmClient;
SSL.OnGetPassword := SSLGetPassword;
SSL.SSLOptions.Method := sslvTLSv1_2;
HTTP.IOHandler := SSL;
end;
在发送帖子时,我是否会确切地告诉我当前实际连接的 TLS 版本?当他们最终停止接受 TLS v1.1 连接时,我不想让他们感到意外。
谢谢。
【问题讨论】:
-
sslvTLSv1_2 是否允许 v1.1 和 1.2,或仅允许 1.2?为了确保我会在 Internet 上搜索仅允许 1.2 的 HTTP 服务器并对其进行测试。
-
@mjn
sslvTLSv1_2仅代表 1.2。如果要同时支持 1.1 和 1.2,则需要使用SSLOptions.SSLVersions属性而不是SSLOptions.Method属性。这将允许您一次启用多个版本,以便 OpenSSL 可以执行版本协商以使用最高可用版本。 -
@RemyLabeau,你是说如果我使用 'SSL.SSLOptions.Method := sslvTLSv1_2' 来分配 SSL,如果该服务器不支持 TLS v1.2,我会收到错误消息并且Indy 不会自动尝试切换到 TLSv1_1?如果是这种情况,我不需要检查状态,对吗?