背景介绍:
在建筑物前面支持HTTPS代理服务器,通常证书会有一个令人头疼的问题。根据HTTPS的工作原理,浏览器访问HTTPS站点,首先与服务器建立SSL连接,第一步建立对服务器证书的连接请求。服务器发送证书,不知道你的浏览器访问域名是什么,所以不能根据不同的域名发送证书.SNI(服务器)名称指示)是使用多个域名和SSL / TLS证书解决服务器。其工作原理如下:在连接服务器之前建立SSL链接发送访问站点的域名(Hostname)。域名服务器返回合适的证书。目前,大多数操作系统和浏览器都对SNI扩展有很好的支持,OpenSSL 0.9.8还具有内置功能。上面的过程,当客户端使用HTTPDNS解析时main,请求URL的主机将被HTTPDNS解析IP替换,以获取服务器到解析IP的域名,无法找到匹配的证书,只返回默认证书或不返回,所以有将是SSL / TLS握手失败错误。
条件:
我想使用带有ip地址主机名的URL(例如:https://1.2.3.6/index.html)。 要获得正确的证书,我必须在建立socket连接之前设置正确的SNI。 iOS系统不提供SNI接口(NSURLConnection / NSURLSession)。
任何建议我的麻烦?