将Delphi THTTPClient与TLS/SSL和自己的DNS主机名一起使用

将Delphi THTTPClient与TLS/SSL和自己的DNS主机名一起使用,http,delphi,ssl,dns,Http,Delphi,Ssl,Dns,是否可以将Delphi System.Net.HttpClient.THTTPClient类与TLS/SSL和自己的DNS主机名解析一起使用?当时我没有让它工作。Http“主机”头是不够的-这似乎是SNI的问题。因此,我必须为TLS协商过程单独设置主机名 Url示例: https://api.ipgeolocationapi.com --> https://172.64.111.34 对于第二个,我必须>>设置主机名仅在标题行“host”中是HTTP请求的一部分。因此,您可以简单地将该标

是否可以将Delphi System.Net.HttpClient.THTTPClient类与TLS/SSL和自己的DNS主机名解析一起使用?当时我没有让它工作。Http“主机”头是不够的-这似乎是SNI的问题。因此,我必须为TLS协商过程单独设置主机名

Url示例:

https://api.ipgeolocationapi.com
-->
https://172.64.111.34

对于第二个,我必须>>设置主机名仅在标题行“host”中是HTTP请求的一部分。因此,您可以简单地将该标题行添加到请求中,并在URL中使用IP。如果Indy component添加主机头行,则必须将该值(在您的情况下是IP)更改为主机名。

您可以修改
主机
文件。目前还不清楚实际问题是什么。请澄清。由于证书问题,在大多数情况下,仅通过ip访问https web服务是不可能的。因此,必须为TLS握手过程提供主机名。在我当前的项目中,我喜欢完全控制DNS名称解析等。我使用Indy IdDNSResolver作为DNS客户端功能,用于SMTP、SNTP等。理想情况下,我也希望将其用于https。OP指的是,这是TLS协商的一部分。如果握手因此失败,连接将关闭,您甚至没有机会发送HTTP查询。当组件启动TLS协商时,它必须找到主机名。这可以通过解析URL来完成,如果给出了硬编码的IP,组件应该解析“主机”行的头或者提供一个事件来获取它。不幸的是,主机头在大多数情况下都不起作用(例如,Google可以这样做,我这里的示例使用的是ipgeolocationapi)。主机名是SNI谈判的一部分,因此我必须将该信息提供给“流程”。也许在这一部分是可能的:
{TURLRequest}。。。FLocalCredential:=tcredentialstorage.TCredential.Create(TAuthTargetType.Server',AURI.Host,AURI.Username,AURI.Password);结束我已在Embarcadero:RSP-33210-System.Net.HttpClient.THTTPClient中的TLS/SNI主机名支持中创建了一个功能请求,用于自己的DNS/IP使用