浅谈HTTPS、SSL、数字证书

在计算机网络时代,重点要解决两个难题:加密危机和信任危机。加密是为了让拥有解密能力的人能够看懂信息,其他人就算获取了信息,也破解不出明文;信任是为了证明对方是你想要交换信息的人。

        SSL(Secure Socket Layer,安全套接字层)协议工作于传输层与应用层之间,为应用提供数据的加密传输。
        SSL最初是由网景(Netscape)公司针对电子商务安全特别是网上支付安全而设计的互联网数据传输层协议,包括SSLv2.0和SSLv3.0。后来,因特网工程任务组织(Internet Engineering Task Force,IETF)在SSL基础上制定了TLS(Transport Layer Security)协议。TLS协议兼容SSL,因此,二者又合称为SSL/TLS。但是,习惯上,大家仍然统称为SSL。

        HTTPS(HTTP over SSL),简单理解就是在HTTP传输层上增加SSL协议的加密能力。
        HTTPS 区别于 HTTP,它多了加密(encryption)、认证(verification)、鉴定(identification)。它的安全源自非对称加密以及第三方的 CA 认证。

        对称加密算法(如DES)使用相同的密钥对传输内容进行加解密,加解密的效率高,但是密钥是双方都约定好,密钥容易泄露;
        非对称加密算法(如RAS)使用不同的两个密钥,称为公钥和私钥。私钥自己使用,签名或者解密;公钥可以公开,用来加密或者认证签名。
        非对称加密算法的安全性基础是大质数分解的困难性,公钥和私钥是一对大质数函数,计算两个质数的乘积是简单容易的,但是这个过程的逆运算(即将这个乘积分解为两个质数)是非常困难的。
        但是非对称加密算法的加解密效率比较低,只适合对少量数据进行处理。实际上,HTTPS仅仅是把对称密钥用非对称加密算法加密后,再进行传输来建立SSL连接的。

一、下面详细讲解SSL连接的过程
1.浏览器生成相关参数:SSL协议版本号、随机数、加密规则等传输给服务器(明文请求);
2.服务器确认加密方法、生成随机数、CA数字证书等回传给浏览器(明文响应);
3.浏览器校验CA数字证书有效性(用CA的公钥来验证CA的签名,证明这个数字证书是有效的,当然还有验证有效时间等等),(使用浏览器的随机数和服务器的随机数)生成对称加密密钥,使用服务器数字证书中的公钥加密,传输给服务器(公钥加密信息);
4.服务器使用私钥解密,获得对称加密密钥。
5.双方使用约定的加密方法,使用对称密钥开始通信。以后的交流都会校检上面的三个要素(两个随机数和对称密钥)通过算法算出的 session key

SSL过程的几个要点:
        本质是应用非对称加密的方式传输对称密钥,整个过程仅仅使用一次非对称加密算法,之后的所有通信是使用对称加密算法。
        如果网站只靠上图的流程运作,可能会被中间人攻击,试想一下,在客户端和服务端中间有一个中间人,两者之间的传输对中间人来说是透明的,那么中间人完全可以获取两端之间的任何数据,然后将数据原封不动的转发给两端,由于中间人也拿到了三要素和公钥,它照样可以解密传输内容,并且还可以篡改内容。
        为了防止中间人攻击,服务器使用了数字证书。一方面把公钥放在数字证书中,一方面让浏览器认证确认服务器(而不是中间人)。


HTTPS的作用:
        通过上面可以得出,HTTPS可以加密浏览器与服务器之间的通信内容,隐藏URL、Cookie和其他敏感元数据,认证信任关系,防止数据被修改。
        加密是发生在应用层和传输层之间,浏览器与服务器的通信过程是安全的。但是,在应用层的数据还未加密,比如在浏览器的调试工具里面可以看到明文的请求信息。
        HTTPS建立SSL握手过程中,如果有中间人冒充服务器,提供伪造的CA数字证书,而浏览器(用户)选择信任了这个数字证书,那么整个HTTPS安全架构就被破坏,受到中间人攻击。

二、下面讲解一下CA数字证书
        数字证书是如何能在不面对面地情况下安全可靠地鉴别一个网站或用户的身份的呢?我们可用通过现实世界中的一个如下假想例子来加以说明。
        假设A、B两个人可以相互传递信息但又相互看不到对方容貌,比如,A在房间内,B在房间外,没有窗,只有门,门也没有窗,但有门缝;在这种情况下,A需要能够通过居民身份证对房间外B的身份进行鉴别(即确认他就是B,然后打开门让B进来)。为此,B可以把他的身份证通过门缝递给A,但是,这时即便A拿到了B的身份证并确认了这个身份证是真实的,但A仍然不能确认门外的B就是身份证上的人,因为这个身份可能是B捡来或偷来的。但是,如果我们假设公安部门在给每个人颁发身份证时,同时在身份证上印有每个人的手写签名,那么这个问题通过如下过程就比较容易解决了:
       1. A要求B将身份证传递给他;
       2. B通过门缝将自己的身份证传递给A;
       3. A通过一定的方式验证确认这个身份证是真实和有效性;
       4. 对B的身份证进行的验证通过后,A将一张白纸通过门缝传递给B,要求其在上面签上自己的名字;
       5. B接收到白纸后,在纸上签上自己的名,然后将签名后的纸通过门缝递给A;
       6. A将纸上的签名与身份证上的手写签名比对,如果二者一致,则说明门外的确实是身份证上所标识的人。
       基于数字证书的身份认证的工作原理和过程与上面带有手写签名的居民身份证的工作原理和过程非常类似。这时,标识网站或用户身份的数字证书(身份凭证)不是由公安部门或工商部门签发,而是由一个专门从事电子身份认证服务的机构(CA)签发。

        CA(Catificate Authority),它的作用就是提供证书(即服务器证书,由域名、公司信息、序列号和签名信息组成)加强服务端和客户端之间信息交互的安全性,以及证书运维相关服务。任何个体/组织都可以扮演 CA 的角色,只不过难以得到客户端的信任(黑客的很多攻击就是利用用户信任了不该信任的证书),能够受浏览器默认信任的 CA 大厂商有很多,其中 TOP5 是 Symantec、Comodo、Godaddy、GolbalSign 和 Digicert,它们一般作为根证书,提前安装于操作系统上面,通过浏览器可以看到已经安装的证书,或者CMD---CERTMGR.MSC打开当前用户的证书。
一个网站向CA申请一张数字证书的流程:
        1.网站服务器本地生成一对密钥(公钥和私钥);
        2.网站把公钥连同运行机构自身及网站的信息(如机构名称、网站域名及其相关证明材料)一起提交给CA;
        3.CA收到申请后,验证网站真实性,为其签发数字证书(用到了CA的私钥),证书包含网站的身份信息(如域名)、公钥等。
        4.网站把证书安装在Web服务器上。

        当我们通过 HTTPS 访问页面时,浏览器会主动验证证书信息是否匹配,也会验证证书是否有效。
浏览器与CA数字证书认证过程:
        1.浏览器要求基于数字证书对网站进行在线身份鉴别(身份认证);
        2.网站(Web服务器)将数字证书传递给用户浏览器;
        3. 浏览器验证网站数字证书的有效性和可信性,包括验证网站证书是否由可信的电子认证机构签发(用CA的公钥验证签名),证书上的域名是否与用户要访问的网站域名一致,证书是否在有效期内等;
       4.证书有效性和可信性验证通过后,浏览器将一串随机生成的数据(相当予白纸)传递到网站,要求网站对此进行数字签名;
       5.网站用私钥对接收到随机数据进行数字签名(相当于在白纸上签上自己的名字),然后将签名后的数据传送到到用户浏览器;
       6.用户浏览器使用网站证书上的公钥对数字签名后的数据进行验证(相当于用身份证上的手写签名对白纸上的签名进行验证),验证通过则说明用户要访问的网站确实是证书上所标识的网站。
       以上过程都是在浏览器和Web服务器之间自动完成的,以上验证过程只要一个环节不通过,比如数字证书不是由一个受信任的认证机构签发,或者证书上的域名与用户要访问的网站的域名不一致,或者证书过了有效期,那么浏览器或者弹出一个单独的警告窗口,或者显示一个警告页面,提示关于网站所用数字证书的错误警告信息。

        一个假冒网站、钓鱼网站可以劫持另一个网站域名,或注册假冒近似域名,甚至可以复制另一个网站的数字证书,但却无法得到被劫持网站的数字证书私钥。这样在进行在线身份认证的过程中,假冒网站、钓鱼网站也就无法伪造相应的数字签名,用户浏览器对网站的在线身份鉴别也就无法通过。

        证书分为两种:证书和根证书;证书是指颁发者信任被颁发者,根证书是被颁发者信任颁发者。
        信任可以传递,A信任B,给B颁发了证书,B信任C,给C颁发了证书,那么A也是信任C的。这里所说的“信任”,只是说明证书持有人的身份是真实可靠的,至于持有人用这个证书干什么事情,不在“信任”的范畴内。例如,网上很多臭名昭着的恶意软件,现在都带有数字证书(倒是很多正规用途的软件因为开发商缺乏安全观念不带证书),同时因为这些数字证书的“根”都是我们信任的根证书颁发机构,因此,操作系统和浏览器是信任这些公司的身份的,但并不代表这些公司的软件不会干坏事。只要肯花钱,任何人都可以在商业性质的证书颁发机构买到直接被我们的系统所信任的证书。

如何选择CA或者自建CA?
        CA 供应商很多,提供服务的侧重点可能也存在一些差异,比如很多 CA 都没有提供证书吊销的服务,这一点对于安全性要求很高的企业来说是完全不能接受的,那么对 CA 供应商的评估需要注意写什么呢?
        1.内置根。 CA 的根证书内置到各种通用的系统/浏览器中,只有根证书的兼容性够强,它所能覆盖的浏览器才会越多。
        2.安全体系。两个指标可以判断 CA 供应商是否靠谱,一是看价格,价格高自然有它的理由,必然提供了全套的安全保障体系;二是看黑历史,该 CA 供应商有没有爆出过什么漏洞,比如之前的 DigiNotar,被伊朗入侵,签发了 500 多张未授权的证书,结果直接被各系统/浏览器将其根拉入黑名单,毫无疑问公司直接倒闭。

        OpenSSL 是一个免费开源的库,它提供了构建数字证书的命令行工具,其中一些可以用来自建 Root CA,用于测试和学习。
--------------------- 
作者:阿甘亮 
来源:CSDN 
原文:https://blog.csdn.net/aganliang/article/details/84380512 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值