因此SNI需要通信双方均支持!
客户端要能在TLS握手时添加该HOST信息。
服务端能够在TLS握手时解码该HOST并返回匹配的证书。
服务端SNI支持情况:
(1) 目前大部分web服务器(apache、nginx等)均已支持
(2) web服务器依赖的OpenSSL库自 0.9.8版本已支持
nginx可使用如下命令检查:
nginx version: openresty/1.13.6.1
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
也可使用openssl模拟访问
模拟支持SNI方式请求
# openssl s_client -servername www.taobao.com -connect www.taobao.com:443
模拟不支持SNI方式请求
# openssl s_client -connect www.taobao.com:443
客户端支持SNI情况:
主流操作系统和浏览器均支持,个别古老系统如windows XP IE6等除外。
xp未启用TLS1.0(即默认情况)
xp启用TLS1.0时情况如下:
winxp 仍无法打开https站点,因为最新的ssl证书均使用sha2算法,sp3以下不支持
winxp sp2 同上
备注:在特定情况https是可以访问的,如自签sha1或更老算法的ssl证书,但会提示 "证书颁发机构不可验证或过期" 问题
winxp sp3 需要用户点击确定后才可访问,但会提示 "证书颁发机构不可验证或过期" 或 "证书名称和站点不匹配"
升级到IE7,提炼几个重点:
升级IE7并不会更新系统 信任根证书颁发机构列表;
IE7默认启用SSL2.0/TLS1.0;
winxp pro 和 winxp pro sp2 由于不支持sha256,所以即使更新到IE7、现在网站的SSL证书都不能访问,仍失败;
winxp pro sp3更新到IE7后,对于SNI站点证书会报错(仍不支持SNI),对于部署了多域名证书站点正常。
Winxp上IE6默认未启用TLS1.0,始终要引导用户开启 TLS1.0,否则始终存在提示。
工具 — InterNet选项 — 高级 — (安全)使用TLS/1.0 勾选
winxp上第三方浏览器:如360浏览器、qq浏览器、世界之窗等 测试正常,默认支持了TLS1.0。
操作系统会内置一份 信任的根证书颁发机构名单,这些机构签发的证书是被直接信任的。
通过开始——运行 certmgr.msc —— 第三方根证书颁发机构,可以找到他们
信任的根证书颁发机构列表如何更新?
不同wins版本更新机制不一,较新win7及以上,会存在一个服务Cryptographic Services。
而windows xp需要通过 windows update自动更新工具来实现更新,是以补丁包方式。如KB931125
为什么windows xp会提示 “证书颁发机构不可验证 或过期”?
是因为windows xp内置列表太老了、而且不全面(当前时间来看)
因为不全面,没有收录最新的DigiCert CA,所以提示证书颁发机构不可验证
因为太老已过期,虽然曾经信任、奈何已过当年,所以提示证书已到期或还未生效
xp如何解决?
Windows xp上需要手动打开 windows update即更新功能,保持最新。
也可单独安装 KB931125补丁包(xp最后一次更新的根颁发机构信任列表)
官网这个补丁包已不存在了,可以参考 https://support.kaspersky.com/13727
只需下载、解压、安装http://media.kaspersky.com/utilities/CorporateUtilities/rootsupd.zip?_ga=2.115985348.358175183.1586428012-779687598.1585880745
安装完毕查看新列表
可以看到更新完毕后,补充了很多新的 CA Root,以及我们的证书签发机构DigiCert。
正常情况下,此时 https页面已正常(无任何提示)即可加载了。
此处不考虑被劫持等网络异常情况 (如DNS劫持导致该问题)。
最大问题是:客户端不支持SNI,而web服务器部署了多https站点的情况
SNI特性是:客户端在4层TLS协商时,在拓展字段携带上主机HOST,这样web服务器能响应指定证书。这需要客户端和服务端都支持。
而winXP是不支持 SNI的,服务器返回的默认证书无法匹配请求域名,因此报错。
xp如何解决?
在不动客户端的情况下,可以将web服务器的默认ssl证书替换为 多域名证书,比如
综上所述,在xp里面 要想无感(无用户提示)的加载和使用https页面,条件比较苛刻:
windows xp SP3系统
要求信任的根证书颁发机构列表已更新 参考补丁KB931125
web服务器使用多域名证书部署
公有CDN默认是不支持的,需要联系客服说明情况来针对性部署,会产生一定额外费用。
考虑我们自身业务特殊性和兼容,我们也顺利切换到多域名SSL证书(作为web服务器和cdn节点的默认证书),从而用户访问正常。
GeoTrust和Symantec目前都已成为DigiCert公司的子品牌。
高性价比可选GeoTrust,兼顾大品牌效应(和有限期重复签发的特点)可选DigiCert,土豪不差钱的高端必选Symantec。
引用自:https://www.sslzhengshu.com/brand/index.html
单域名证书:保护具体单个域名,如果申请证书的域名是www.example.com,默认可以保护不带www的主域名,即example.com。
多域名证书:一张证书中可添加多个域名,甚至来自不同域,一般最大支持150~250个不同域名!通常称之为SAN SSL 或UCC SSL。其实SAN和UCC略有差异,UCC是微软术语,差异参考https://knowledge.digicert.com/solution/SO13974.html。
比如taobao.com的多域名证书
通配符证书:保护一个域名和次级子域名
比如 *.example.com可保护 example.com和random.exmaple.com 但仅支持次级子域名,不能保护 l2.l1.exmaple.com形式!可以单独购买 *.l1.exmaple.com 来实现保护!
多域名通配符证书:即多域名证书里添加有通配域名。
IP SSL证书:没想到吧!没有域名、针对单IP(或多IP)也能签发证书,满足加密需求。
但使用场景相对局限,仅是为了防域名解析失败、解析劫持而使用IP访问的话,要考虑IP在全网的联通性和延迟。如果是anycast IP + 搭配 IP SSL倒是不错的选择。
比如https://1.1.1.1 和 https://8.8.8.8
各品牌的SSL产品细节略有不同,熟悉上面几点、捂住口袋,相信选购一张证书应该不是难事!
基于访问日志,评估可能异常的用户数据占比
提供页面引导,异常时提示用户升级浏览器或更新版本
web服务器和CDN部署多域名证书作为默认证书实现更好的兼容性等等
用更稳妥、低成本(采购成本、实现成本、用户接受和改造成本等)的方式来服务于业务,也是我们技术的更高要求呢!
END
全中国只有不到1% 的人关注了运维军团
你是个有眼光的人!
(由于交流群人数已超100人,需要进群的小伙伴可以添加运维小编的微信:)
如果你喜欢我们的文章,请转发到朋友圈
微信扫一扫
关注该公众号