我用C写了一个原始的HTTPS客户端,这个程序获取域名,将其解析为IP地址(通过DNS),连接到端口443 ( SSL )上的IP地址,执行SSL握手,然后通过SSL套接字发送HTTP请求。
为了尝试这个程序,我有一个托管在网络服务器上的域。我为域安装了Let's encrypt证书。
我发现有许多域名与我的域名共享相同的IP地址。因此,当我连接到端口443上的IP地址以执行SSL握手时,谁能确保mydomain的SSL证书将从服务器发送到客户端,而不是属于共享相同IP地址的其他域名的另一个证书?
发布于 2016-08-25 23:54:52
存在被广泛使用的称为Server Name Indication (SNI)的TLS扩展(并且例如http/2客户端需要该扩展)。您可以在RFC 6066中找到此扩展的正式规范。
使用SNI,客户端可以在其Hello请求中发送所需的主机名,这允许服务器为此连接选择匹配的密钥/证书组合。
https://stackoverflow.com/questions/39149706
复制相似问题