下面就是总结常见的5中导致SSL证书不信任的原因。
1.SSL证书不是来自公认的证书颁发机构(CA)
我们但凡了解过SSL证书的朋友都明白,我们自己就可以给自己颁发数字证书(SSL证书、邮件证书、客户端证书、代码证书等),自己签发的证书不需要一分钱。然而自签发的数字证书默认是不受到客户端操作系统信任的,所以他们访问我们的站点的时候就会提示不信任。
另一方面,公认的证书颁发机构的CA证书就是默认内置在我们的操作系统或者浏览器当中的,也就是客户端操作系统默认信任的证书。
所以,我们首先需要购买可信的证书颁发机构颁发的数字证书,这一点很重要。常见的公认数字证书颁发机构有Startcom、Comodo、Geotrust、Globalsign等。
2.数字证书信任链配置错误
我们接触了很久的数字证书,基本很少有颁发机构会使用他们的根证书直接签发客户端证书(End User Certificate), 这可能是出于安全考虑,当然也不排除部分证书颁发机构支持这样做(但是价格很惊人)。
如果不配置中级CA,操作系统就无法确定SSL证书的真正颁发者是谁。
这个时候我们的证书和被受到信任的根证书就存在一个中间证书,这个叫中级证书颁发机构CA。如果操作系统默认只内置了根证书颁发机构,而我们直接安装的是自己的域名证书。这个时候证书链就不完整,就会被标记为受信任。为了解决这个问题,我们需要在服务器配置安装SSL证书的时候也同样要使得我们的证书链完整,才能正常使用。相关的各个平台的证书链配置我们也会在后面的文章给大家专门码字说明。
3.证书的域名匹配程度不完整
多数情况下我们的证书颁发机构都会为我们的域名做完整的匹配,但有些时候某些证书颁发机构可能会疏忽,我就遇见过。
4.证书已经过了有效期
如果你的证书不是新买的,你应该注意你的数字证书已经过了有效期或这靠近有效期截止日期,你应该联系提供商进行续费。另外如果你的证书来自某些不正常的渠道,你也应该要确定一下你的证书是否已经被吊销,任何情况你都应该立即联系你的证书服务提供商。
5.客户端不支持SNI协议
这种事情只会发生在客户使用的操作系统是Windows XP SP2以下,Android4.2以下的情况,因为这些操作系统实在是太早了。当时系统厂商并未有支持这个SNI协议。
SNI协议就是让多个支持SSL证书的域名共享同一个独立IP地址的技术,现在已经被几乎所有主流操作系统和浏览器支持了。在很多年以前,SSL证书是需要绑定到独立IP地址使用的,由于IPv4地址池的逐渐不够分配,SNI技术应运而生了。