随着HTTPS网站建设成本的降低,现在大部分网站都使用HTTPS协议。图片来自Pexels大家都知道HTTPS比HTTP安全,也听说过HTTPS协议相关的概念有SSL、非对称加密、CA证书等。但是,我可能无法回答以下三个拷问问题:为什么使用HTTPS是安全的?如何实现HTTPS的底层原理?使用HTTPS安全吗?说清楚。HTTPS的实现原理你可能听说过HTTPS协议是安全的,因为HTTPS协议对传输的数据进行了加密,加密过程是使用非对称加密实现的。但实际上,HTTPS在内容传输的加密中采用的是对称加密,非对称加密只是在证书验证阶段使用。HTTPS的整体流程分为证书验证和数据传输两个阶段。具体交互过程如下:证书验证阶段:浏览器发起HTTPS请求。服务器返回HTTPS证书。客户端验证证书是否有效,如果无效则提示告警。数据传输阶段:验证证书合法后,在本地生成一个随机数。用公钥对随机数进行加密,并将加密后的随机数传送给服务器。服务器用私钥解密随机数。服务器端通过客户端传入的随机数构造对称加密算法,对返回的结果内容进行加密后传输。为什么数据传输使用对称加密?首先,非对称加密的加解密效率很低,而且在HTTP应用场景中,终端之间通常会有大量的交互,非对称加密的效率难以接受。另外,在HTTPS场景下,只有服务器保存私钥,一对公私钥只能实现单向加解密。因此,HTTPS中的内容传输加密采用对称加密,而不是非对称加密。为什么需要CA证书颁发机构颁发证书?HTTP协议被认为是不安全的,因为传输过程容易被监听者和假冒服务器监听,而HTTPS协议主要解决网络传输的安全问题。首先,我们假设没有证书颁发机构,任何人都可以创建证书。由此带来的安全风险就是经典的“中间人攻击”问题。“中间人攻击”的具体过程如下:过程原理如下:本地请求被劫持(如DNS劫持等),所有请求都发送到中间人的服务器.中间人服务器返回中间人自己的证书。客户端创建一个随机数,用中介证书的公钥加密随机数,然后传输给中介,再用随机数构造对称加密,对传输内容进行加密。因为中间人有客户端的随机数,可以通过对称加密算法解密内容。中间人以客户请求的内容向官网发起请求。由于中介与服务器的通信过程是合法的,官网通过建立的安全通道返回加密数据。中间人利用与合法网站建立的对称加密算法对内容进行解密。中间人通过与客户端建立的对称加密算法对正则内容返回的数据进行加密传输。客户端通过与中介建立的对称加密算法对返回的结果数据进行解密。由于没有进行证书校验,虽然客户端发起了HTTPS请求,但客户端并不知道自己的网络已经被拦截,所有的传输内容都被中间人窃取了。浏览器如何保证CA证书的合法性?①证书包含哪些信息?证书包含的信息如下:颁发者信息、公钥、公司信息、域名有效期、指纹……②证书的法律依据是什么?第一,权威机构必须经过认证,不是任何机构都有资格颁发证书,否则就不叫权威机构。另外,证书的可信度是建立在信任体系之上的,权威机构需要对其颁发的证书进行背书。只要证书是由权威机构生成的,我们就认为它是合法的。因此,权威机构会对申请者的信息进行审核,不同级别的权威机构对审核的要求不同,所以证书也分为免费、廉价和昂贵。③浏览器如何验证证书的有效性?当浏览器发起HTTPS请求时,服务器会返回网站的SSL证书。浏览器需要对证书进行如下验证:验证域名、有效期等信息是否正确。此信息包含在证书中,可以更轻松地完成验证。判断证书来源是否合法。每个颁发的证书都可以根据验证链找到对应的根证书。操作系统和浏览器会在本地存储权威机构的根证书,使用本地的根证书完成相应机构颁发的证书的来源验证。判断证书是否被篡改。需要与CA服务器验证。确定证书是否已被吊销。它是通过CRL(CertificateRevocationList)和OCSP(OnlineCertificateStatusProtocol)来实现的。其中在步骤3中可以使用OCSP来减少与CA服务器的交互,提高验证效率。只有满足以上任一步骤,浏览器才认为证书有效。这里有一个问题我想了很久其实答案很简单:证书是公开的,如果我想发起中间人攻击,我从官网下载一个证书作为我的服务器证书,客户端肯定会认同这个证书是合法的,如何避免这种证书被冒用呢?其实这是在非加密对称的情况下使用公钥和私钥。中间人虽然可以拿到证书,但是无法拿到私钥。不可能从公钥推导出相应的私钥。即使中间人拿到了证书,也无法冒充合法服务器,因为他无法解密客户端发送的加密数据。④只能由证书颁发机构生成证书吗?如果浏览器没有提示安全风险,那么只能使用证书颁发机构颁发的证书。但是浏览器通常只会提示安全风险,并不会限制网站的访问,所以技术上任何人都可以生成证书,只要有证书就可以完成网站的HTTPS传输。比如早期的12306就是通过手动安装私有证书来实现HTTPS访问的。本地随机数被盗用怎么办?证书验证采用非对称加密实现,但传输过程采用对称加密,对称加密算法中重要的随机数在本地生成并存储在本地。HTTPS如何保证随机数?会不会被偷?事实上,HTTPS不包括对随机数的安全保证。HTTPS只保证传输过程的安全,随机数存储在本地。本地安全属于另一个安全类别。对策包括安装杀毒软件、杀毒木马、升级浏览器修复漏洞等。使用HTTPS会不会被抓包?HTTPS数据已加密。通常情况下,抓包工具代理请求抓包的内容是加密的,无法直接查看。但是,如前所述,浏览器只会提示存在安全风险,如果用户授权,仍然可以继续访问网站并完成请求。所以,只要客户端是我们自己的终端,我们授权了,就可以组成中间人网络,抓包工具就是中间人的代理。通常使用HTTPS抓包工具生成证书,用户需要手动将证书安装到客户端,终端发起的所有请求都通过证书完成与抓包工具的交互。然后抓包工具将请求转发给服务器,最后将服务器返回的结果在控制台输出后返回给终端,这样就完成了整个请求的闭环。既然HTTPS不能阻止抓包,那么HTTPS有什么意义呢?HTTPS可以防止用户在他们不知情的情况下在通信链接上被监视。它不对主动信用抓包操作提供保护,因为在这种场景下,用户已经意识到了风险。通知。为防止数据包被抓包,需要采用应用层的安全防护,比如使用私有对称加密,同时做好移动端的反反编译加固,防止本地算法被泄露破解。小结以下为全文小结,以问答的形式进行:问:为什么HTTPS是安全的?A:因为HTTPS保证传输安全,防止传输过程被监听,防止数据被窃取,可以确认网站的真实性。Q:HTTPS的传输过程是怎样的?A:客户端发起HTTPS请求,服务端返回证书,客户端验证证书。验证通过后,在本地生成一个随机数,用于修改对称加密算法。随机数通过证书中的公钥加密传输给服务器。服务端收到后通过私钥解密随机数,后续的数据交互通过对称加密算法加密解密。问:为什么需要证书?A:防止“中间人”攻击,为网站提供身份证明。Q:使用HTTPS会不会被抓包?A:我会被抓的。HTTPS只是防止用户在他们不知情的情况下被监控。如果用户主动授信,就可以构建“中间人”网络,代理软件可以对传输的内容进行处理解密。分享一张学习HTTPS的过程图:
