数字证书申请过程:操作系统中本就存在机构的证书,其中有机构的公钥,现在我生成一个公钥,把自己的公钥和个人信息用机构公钥加密然后发给机构,然后机构用自己的私钥解密,然后机构把我的数据用hash算法生成一个字符串,摘取其中的部分信息再用机构私钥加密就成了数字签名,把数字签名,个人信息,公钥,颁发机构信息等等组成了数字证书,然后交给我并且给我一个我生成的公钥对应的私钥。(万一给机构公钥和信息的途中被黑客掉包怎么办?检查一下机构返回的证书的公钥是否是自己当时给的公钥和信息就可以了)
https大致过程:
浏览器:发出请求(将客户端所支持的SSL最高版本,以及支持的密码组合,加密算法以及密钥长度等信息发送给服务器)。
服务器:把能与客户端匹配的SSL最高版本以及最佳匹配的密码组合信息,服务器端证书发给浏览器。
然后浏览器验证证书:
浏览器读取证书中的Issuer(发布机构)比如为"CA" ,浏览器在操作系统中受信任的发布机构的证书中去找CA的证书,如果找不到,那说明证书的发布机构是个水货发布机构,证书可能有问题,浏览器会给出一个错误信息。找到的话浏览器就从操作系统中取出CA证书的公钥对服务器发来的证书中的数字签名解密生成一个字符窜,并且浏览器也将服务器发来的证书的信息进行hash算法生成一个字符窜,如果两个相同则服务器发来的证书内容没有被修改过,确认是服务器的证书,但没证明对方是服务器,可能是黑客从截取了服务器的证书并发了过来。黑客不可能伪造证书,比如用黑客的公钥和服务器的信息组成证书,合法机构不会颁发给他的,因为他不是服务器。而黑客可以乱修改服务器发来的证书内容,但是通过hash可以知道是否被修改。
然后浏览器验证对方身份:
浏览器:生成一个字符窜用服务器公钥加密后发给对方(用来证明对方是服务器),然后服务器用私钥解出这个字符串,然后服务器不直接加密收到的字符串,而是加密这个字符串的一个hash值,然后发给浏览器。浏览器也计算自己发出的字符窜的hash值,并用服务器公钥解出服务器发来的hash值,如果相同则对方确实是有服务器的私钥的,所以证明了是服务器。其实也可以是黑客截取到服务器返回给浏览器的信息后再发给浏览器但是黑客起不到什么作用,但肯定是有发到服务器的,因为用服务器私钥才能知道字符窜内容,相当于浏览器发给服务器后,黑客对服务器返回来的数据再原封不动的给浏览器,相当于搬运工。
验证“服务器”的身份后,“浏览器”生成一个对称加密算法和密钥,用于后面的通信的加密和解密。这个对称加密算法和密钥,“浏览器”会用服务器公钥加密后发送给“服务器”,别人截获了也没用,因为只有“服务器”手中有可以解密的私钥。这样,后面“服务器”和“客户”就都可以用对称加密算法来加密和解密通信内容了。
总体来说https过程: 浏览器请求,服务器发证书过来,浏览器验证证书内容,浏览器验证对方身份,生成对称加密算法。
先用公钥加密技术通信再用对称加密技术通信。
注:这里所说的浏览器可以换成客户,应用程序等。