当前位置: 首页 > 科技观察

再次发送HTTPS,不要再说不!

时间:2023-03-16 22:14:12 科技观察

相信大家在面试的时候都会对HTTPS的问题不陌生。也许你只能简单的说说和HTTP的区别,但是真正的原理清楚了吗?它有多安全?这篇文章就让我们用大白话来揭开HTTPS的神秘面纱!图片来自Pexels什么是HTTPS什么是HTTPS?答:HTTPS不就是在HTTP之后多了一个S吗?这里的S指的是SSL/TLS(是一种安全的加密协议,想深入了解的同学可以自行百度),HTTPS是在HTTP的基础上,使用SSL/TLS对数据包进行加密。请记住两个主要目的:加密数据以验证网站服务器的身份HTTPS如何加密数据我们已经知道HTTPS的第一个目的是加密数据。对于数据加密,我们这里讲两种加密方式:对称加密:所谓对称是指发送方和接收方双方使用的密钥相同。相同的密钥用于加密和解密。从头到尾只需要保存一个密钥。非对称加密:发送方和接收方使用一对密钥,一个公钥和一个私钥。一般情况下,私钥是保密的,不能泄露,公钥可以对外传播。我们可以用公钥加密私钥解密(数据加密)或者用私钥加密公钥解密(下面会解释签名)混合加密:在知道了两种加密的优缺点之后方法,我们的HTTPS非常强大,它混合使用了两种加密方式。不是说对称加密的密钥不安全吗?那我们换个思路,在传输过程中,我们只是用非对称加密来传输我们对称加密中的密钥。这句话有点费解,我们看上图:客户端生成的会话密钥就是我们对称加密生成的密钥。用公钥加密后再传输(此时加密的不是数据,而是会话密钥,相当于加密了密钥)。这里的公钥就是非对称加密中的公钥,由服务端传递(公开)。服务器使用非对称加密的私钥解密并获得我们的会话密钥。客户端和服务器端可以使用相同的会话密钥进行加密和解密。即使加密后的会话密钥在传输过程中被攻击者截获,如果没有服务器的私钥,他也无法获得会话密钥。整个过程的巧妙之处在于,之前我们传了钥匙,现在传了保险箱,钥匙在保险箱里。即使拿到了保险箱,没有保险箱的钥匙也拿不到钥匙。HTTPS如何验证网站服务器的身份?HTTPS的第二个目的是验证网站服务器的真实身份。如何才能做到这一点?我们先来看一个问题。上一步我们已经解决了数据加密的问题。攻击者虽然不能解密数据,但是可以篡改数据。我们怎么知道数据没有被篡改?数据被篡改怎么办?这时候,我们就需要用到数字签名。消息摘要然后用发送方的私钥加密生成数字签名,与原始文本一起传输给接收方。两个关键点:哈希算法计算生成信息抽象私钥加密生成数字签名客户端如何验证数字签名?(用服务器私钥加密,用公钥解密)用服务器的公钥解密数字签名得到消息摘要(原件未被篡改)。使用Hash函数对接收到的原文进行计算,生成摘要信息(可能被篡改)。如果两个消息摘要一致,则说明数据没有被篡改。.好吧,你可能认为这一切都在这里!其实最后还有一个很关键的地方:刚才我们所做的所有假设都是建立在客户端的公钥由服务端传递的基础上的,那么如果攻击者伪造了服务端的公钥呢?该怎么办?服务器公钥被篡改怎么办?这时候就必须要用到数字证书了。数字证书证书颁发机构(CA)是客户端和服务器都可以信任的第三方组织。服务器向CA申请数字证书,审核通过后,CA向申请者颁发证书文件-证书,包括以下内容:服务器获得数字证书后,将数字证书传递给客户端.客户端验证数字证书的步骤如下:首先,浏览器读取证书中的证书拥有者、有效期等信息进行验证。浏览器开始寻找操作系统内置的可信证书颁发机构CA,并与服务器发送的证书中的颁发者CA进行比较,以验证该证书是否由合法机构颁发。如果找不到,浏览器会报错,说明服务器发送的证书不可信。如果找到,浏览器会从操作系统中获取颁发者CA的公钥,然后解密服务器发送的证书中的签名。浏览器使用相同的哈希算法根据证书的内容计算出信息摘要,并将这个计算出的值与证书的解密值进行比较。如果比对结果一致,则证明服务器发送的证书是合法的,没有被冒用。此时,浏览器就可以读取证书中的公钥进行后续加密了。HTTPS原理列表如下:作者:大鲨鱼@LX编辑:陶家龙来源:https://juejin.im/post/5eb3c6065188255fd54de543