最近遇到多次HTTPS域名访问异常的情况,针对此类问题汇总一下CDN侧排查思路:常见HTTPS证书配置异常的分类:
1 证书过期
2 用户自有证书未生效(已经走京东证书)
3 证书缺失
一 、当通过浏览器访问https域名时候,出现证书过去报错:
原因:
1、当前电脑系统时间错误,所有的http安全证书都有颁发日期和截止日期,电脑系统时间在证书有效时间区间之外有可能导致浏览器提示网站https安全证书已过期或还未生效。
2、网站的https安全证书确实已经过期,根据https安全证书签发国际标准,https安全证书颁发不能超过39个月。
3、站点引用其它部署了https安全证书的外链,如果这个外链的证书过期了也会提示相应的错误。 能检测出外链有证书错误的终端设备有:手机浏览器、PC端IE6 (IE6以上的不提示)。
解决:
1、 电脑系统时间不对:将电脑系统的时间调整至https安全证书有效期之内。
2、 https安全证书过期:需要网站所有者到https安全证书签发机构CA续签证书。
3、 当前站点外链网站的https证书过期:需要网站所有者撤销外链或者外链网站所有者到CA机构替换或续费证书。
测试方法:
openssl s_client -connect 183.214.145.195:443 -servername cdnimg.liehu.ijinshan.com
可以看到如果用户有自有证书,设备生效后,不应该出现CN=*.jdcloud.com,而应该是用户提供的证书,如:CN=*
解决:
此类问题需要运维看一下我们设备是否配置未生效或是证书未同步。
三、证书部分缺失首先,我们要了解完整的证书链=【根 中间 域名】,浏览器自带根证书,由于其他https网站也会是这个结果,所以中间证书也基本是那几个,浏览器访问时会保存中间证书,所以当创世云只有域名证书时,浏览器已经自带了https访问需要的根证书和中间证书。(参考https://www.v2ex.com/t/314604),所以当用户通过浏览器访问,由于节点配置的证书链不完整,大多数浏览器由于此前访问过其他https,因此都保留了根证书和中间证书,不一定会出问题。但部分客户端访问会存在问题。
1、测试方法:openssl s_client -connect 59.63.167.5:443 -servername f6.market.xiaomi.com
报错信息:
正确返回值:
此方法可以即验证设备证书是否正常,同事可以未来设备证书配置是否正确的一个方法。
2、测试方法:
同时我们也可以通过curl命令针对故障的节点抓取验证
curl -v -o /dev/null 'https://f6.market.xiaomi.com/download/ThemeMarket/0969c41560b28f09d64241cbf06c1efbd2243c862/1.jpg' --resolve 'f6.market.xiaomi.com:443:59.63.167.5'
3、故障现象:
这个命令会验证完整证书链,如果加-k,只会验证域名证书。您给到我方的只有域名证书,因此,如果用这个命令,会提示证书有问题,-k则不会提示
3 本地hosts固定节点,通过浏览器访问
敲黑板,注意了:
(1)关于证书校验,客户端或者浏览器会校验整个证书链(比如,从域名证书,到中间证书,到根证书,逐个验证),只有整个证书链完整,且完全可信,浏览器或者客户端才会认可。所以 《证书校验,其实是证书链校验》
(2) 根证书,中间证书有一定的通用性。由同一个中间证书签发的所有域名证书都可以被该中间证书进行验签。
(3)一般来说,浏览器(chrome, safari, 或者系统) 会预装根证书,而中间证书我个人感觉不会预装。 在我们使用浏览器浏览各种各样的网站时,浏览器《有可能》会保存一些 中间证书,留着给一些没提供中间证书的 http服务器使用。 对于本案例浏览器访问200正常,有可能浏览器协助补全的证书链。
解决:
1 用户提供完整的证书,重新配置
2 我们提供其他用户提供的正常服务器,自己补全--需要研发提供补全日志。
方法:openssl s_client -connect 180.149.158.172:443 -servername f6.market.xiaomi.com -showcerts