@gy-ban
2017-08-20T07:55:43.000000Z
字数 1542
阅读 448
https
上周有同事反映说,使用https访问的时候,会提示证书链不可达,而导致请求发送不出去,问我是不是证书没有配置对?一开始我也是一脸懵逼,网页都可以访问的好好的,怎么手机访问就会有这个问题。
要弄清楚这个问题,我们首先得清楚什么是https证书,为什么要用到证书。
大部分的人都知道,https是加密传输,而http是明文传输,那这又和证书有什么关系了?
首先我们来讲讲https通讯的原理。
简单点说就是先用非对称加密的方式验证身份,然后再使用对称加密传输信息。
还是不太懂?好我们来细讲;
当客户端要和服务器使用ssl加密方式通讯的时候主要步骤如下:
1、客户端首先会发送一个随机的字符串给服务器
2、服务器用自己的私钥进行加密发送给客户端
3、客户端用服务器的公钥解密,对比是不是一致,一直则继续通讯,不一致就断开
(注意,上面三步只是验证服务器是真实服务器,并没有起到信息的加密,因为服务器的公钥大家都有)
4、客户端确认服务器身份可信之后,接下来就会告诉服务器,我们用xx算法和密钥(对称加密)来加密通讯,这一段信息使用服务器的公钥加密发给服务器
5、服务器接收到之后用私钥解密,让后下面就是真正的加密通讯了。。。
上面的步骤大致很接近https的通讯了,当然还有很多小细节我就不罗嗦出来了。
说了这么多,那到底证书干嘛用的啊?
我们前面三步主要是验证服务器是真是服务器,那这个验证有漏洞吗?
有,假如黑客入侵你的电脑,把你本地的保存的真实服务器的公钥给替换了,换成他自己的公钥(这个时候你是不知道)然后他用自己的私钥加密信息冒充真实服务器把信息发给你,你照样可以解开,这个时候你的信息都被他截获了。
那这个时候,就得需要一个第三方机构要证明这个服务器是真实的服务器。
这个机构就叫做数字证书认证机构(Certificate Authority,缩写为CA)
数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。数字证书还有一个重要的特征就是只在特定的时间段内有效。
简单点说,CA给我的(实际要出钱买的)数字证书里面主要有我的公钥,我的域名和一些身份信息。
实际在https通讯的第一步,服务器会把证书发给客户端,客户端用证书里面的公钥来验证服务器的真实性。
说道数字签名,我们得来说说数字证书的颁发过程,CA颁发给我们的数字证书里面会包涵三个部分:证书内容(F),加密算法(A,其实有两个,一个哈希算法,一个加密算法),F加密密文(F')。首先,F会被散列算法SHA1计算出hash值h1(称为128bit的摘要),然后h1会被发布这个数字签名的CA认证机构的用私钥进行RSA加密,注意:是发布这个数字签名的CA认证机构,如果现在被加密的数字证书是属于二级CA认证机构的,那么用来加密这个证书的私钥是根CA认证机构的私钥!RAS加密完后,就形成密文F'。
当你要验证这个数字证书可信/合法性时,你需要找到你的上一层CA认证中心的数字证书,并且从中获取公钥,把数据证书中的密文F'进行RSA解密,如果得出的值h2和h1比较(h1可以立即用数据证书中的F现场算出来),如果相等,则认为证书是可信的,合法的。
那实际生活中,给我们颁发证书的机构一般是二级CA认证中心,或者三级CA认证中心。
由于一个数字证书是基于上层的数字证书作验证的,那么又怎么验证上层的数字证书是否合法呢?这就会出现一直递归上去的现象,也就是开遍说的证书信任链。事实也是这样的,验证一个证书是否合法,需要验证到他的最顶层的根证书是否合法!所以上面说到根证书是整个证书体系安全的根本。