ssl是怎么实现安全的?
答:
参考
首先, 服务器去找ca进行认证,获得证书。主要步骤如下:
-
服务器发送自己得公钥和对应的服务器信息,域名等给ca服务器。
-
ca服务器对其选择一种hash算法,进行数据摘要
-
ca服务器将hash算法和生成的摘要(指纹)用ca服务器的密钥加密,生成签名。
-
返回签名+信息(服务器的信息和ca服务器补充的一些签发者之类的信息)。这两个加起来就是证书了。
然后,浏览器验证证书,过程:
-
在证书信息中找到签发者,浏览器从自己系统中由底到顶递归找出对应签发者的公钥;(找不到则认为是自签名的认证,有风险)
-
对证书签名部分进行解密,获得hash算法(一个函数)和hash指纹(即摘要);(解密成功,也代表证书确实是对应机构颁发的)
-
用hash算法对证书信息部分进行摘要,得到新的指纹,比较两个指纹,如果一致,则信息部分没有被修改。(因为信息部分是明文,极易被修改,所以要用签名验证)
-
验证证书信息部分中的url,和浏览器要访问的url是否是同一个。是的话,可以信任
-
对证书信息再次进行判断:是否吊销,是否过期,是否已经被记录为黑名单。
最后,浏览器和服务器之间建立https的过程:
答:
-
首先是浏览器访问对应服务器,发送一个随机数1和自己支持的加密算法;
-
服务器接收到访问,返回消息,随机数2和自己选择的加密算法;
-
服务器再发送证书;
-
客户端验证证书,过程参考上方;
-
客户端验证成功,生成随机数3,将1,2,3组成密钥,用证书内的公钥加密发送给服务器;
-
服务器对信息解密,获得对称密钥;
-
客户端对要发送的信息,用(对称)加密算法加密(其中,加密的核心是三个随机数),同时对信息进行用非对称公钥签名;
-
服务器用对称密钥解密,获得信息。同时用非对称私钥验证签名(签名过程参看1),查看是否密文有直接被人修改(就算不知道内部具体内容,也可以直接修改破坏信息)。