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

经得起折磨的HTTPS原理解析

时间:2023-03-18 20:33:52 科技观察

HTTPS在HTTP和TCP之间建立了一个安全层。HTTP与TCP通信时,首先要经过一个安全层,对数据包进行加密,然后将加密后的数据包发送给TCP,相应的TCP必须对数据包进行解密才能传递给上面HTTP。一、基本概念及理解TLS/SSL的功能实现主要依赖于三类基本算法:散列函数、对称加密和非对称加密。非对称加密用于实现身份认证和密钥协商。密钥对数据进行加密,并根据哈希函数验证信息的完整性。非对称加密是为了实现身份认证和密钥协商;对称加密是对信息进行加密;image.pngSSL和TLS有什么区别?SSL和TLS都是加密协议。在有网络请求的地方,可以利用这两种协议在传输层进行加密,保证数据传输的安全。SSL是TLS的前身。Netscape在1995年直接发布了SSL2.0版本,1.0版本一直没有对外发布。由于存在漏洞,2.0版本只是昙花一现,1996年Netscape发布了SSL3.0。然后在1999年,在SSL3.0版本的基础上,Netscape发布了TLS1.0版本(虽然TLS1.0的变化基于SSL3.0的变化不是太大,但这些变化非常重要)。我们现在应该使用TLS协议,因为SSL2.0和SSL3.0分别在2011年和2015年被弃用,并且由于漏洞,如果你的服务器配置了SSL协议,你必须手动禁用它们。所以我们只是为服务器配置TLS协议。某些服务对TLS版本有要求。您可以在SSLServerTest中检查服务器证书和协议配置。SSL服务器测试:https://globalsign.ssllabs.com/现在主流的TLS版本是1.2。SSL/TLS协议与证书的关系为了保证网络安全,我们需要给服务器颁发证书。这个证书可以自己生成,但是自己颁发证书不安全,可以被别人伪造,所以我们一般都是通过第三方认证机构购买证书。那么问题来了,证书跟协议有关系吗?我们需要区分SSL证书和TLS证书吗?答案是不。证书不依赖于协议,与协议关系不大。我们不需要担心是使用SSL证书还是TLS证书。协议由服务器配置决定,证书与协议一起使用。私钥、公钥和对称密钥有什么区别?这些是什么?对称密钥只有一个,可以是字符串也可以是数字,对应的加密方式是对称加密。公钥和私钥成对出现。公钥称为公钥,私钥称为私钥。例如:A和B要进行系统间通信。基于安全考虑,通信采用数据加密。此时A有自己的公钥和私钥,分别为Apublic和Aprivate,B也有自己的公钥和私钥,分别为Bpublic和Bprivate。在通信之前,双方需要交换公钥。此时A的密钥为:A的私钥和B的公钥,B的密钥为:B的私钥和A的公钥。已加密,使用A私有签名。B收到信息后,用B的private解密敏感信息,用A的public验证签名。反之亦然。从以上可以得出结论:1.公钥和私钥成对出现。公钥称为公钥,只有自己知道的称为私钥。2.公钥用于加密敏感信息,私钥用于签名。所以公钥密钥的作用是保证数据安全,私钥的作用是标记信息的发送者。3.只有对应的私钥才能解密用公钥加密的数据,只有对应的公钥才能用私钥验证签名。4、用公钥和私钥加解密的方法称为非对称加密。5.事实上,双方也可以使用同一对公钥和私钥。对称加密使用相同的密钥进行加密和解密。加密和解密都使用密钥。使用对称加密进行加密时,还必须将密钥发送给对方。Q1:不可能有多个客户端使用同一个密钥加密信息,怎么办?解决方案:一个客户端使用一个密钥进行加密Q2:由于不同的客户端使用不同的密钥,如何传输对称加密密钥?解决办法:只能是“在一端生成秘钥,然后通过HTTP传输给另一端”。Q3:密钥传输过程中如何保证加密?“如果被中间人截获了,那么key也会得到”,那你会说key是加密的,那怎么省去加密key的过程,是不是加密过程呢?解决方案:非对称加密为什么非对称加密要用对称加密加密,为什么一定要把密钥发给对方。怎样才能安全移交?当密钥在互联网上转发时,如果通信被拦截,密钥就可能落入攻击者手中,同时也就失去了加密的意义。此外,我们必须尽量安全地保存收到的密钥,因此我们使用非对称加密。非对称加密使用的算法是RSA、ECC、DH等使用一对非对称密钥的加密。一个称为私钥,另一个称为公钥。顾名思义,私钥不能被其他任何人知道,而公钥可以随意发布,任何人都可以获得。具体做法是发送密文的一方用公钥加密“钥匙”,对方收到加密后的信息后,用自己的私钥解密。这样,在保证交换密钥安全的前提下,采用对称加密方式进行通信和消息交换。这样就不需要发送用于解密的私钥,也不用担心密钥被攻击者窃听窃取。非对称加密有以下特点:有一对秘钥,【公钥】和【私钥】。用公钥加密的内容只能用私钥解开,用私钥加密的内容可以用所有公钥解开。【这里可以解锁的公钥指的是一对秘钥】。公钥可以发送给所有客户端,私钥只保存在服务器端。信息传输是一对多的,服务端只需要维护一个私钥就可以与多个客户端进行加密通信。非对称加密有以下缺点:公钥是公开的,黑客截取私钥加密后的信息,可以用公钥解密,获取内容;公钥不包含服务器信息,因此采用非对称加密算法无法保证服务器身份的合法性,存在中间人攻击的风险。服务端发送给客户端的公钥在传输过程中可能会被中间人拦截和篡改;使用非对称加密在数据加解密过程中需要一定的时间,降低了数据的安全性。传输效率;对称加密和非对称密钥的区别:对称加密需要将生成的密钥发送给对方;非对称加密不需要发送私钥进行解密。安全性:对称加密的发送密钥容易落入攻击者手中,失去加密的意义;非对称加密的公钥可以随意公开,任何人都可以获得对称加密的优势。解密的效率比较快;非对称加密的好处是可以让传输的内容不可破解,因为即使截获了数据,但是没有对应的私钥,是无法破解对称加密+非对称加密的内容(HTTPS采用这种方式)HTTPS将对称加密和非对称加密结合起来,充分利用各自的优势。在密钥交换环节采用非对称加密方式,在后续的通信建立和消息交换阶段采用对称加密方式。具体做法是:发送密文的一方用公钥加密“钥匙”,对方收到加密信息后,用自己的私钥解密。这样,在保证交换密钥安全的前提下,采用对称加密方式进行通信和消息交换。因此,HTTPS采用了一种混合加密机制,既使用对称加密又使用非对称加密。CA认证和第三方认证有什么区别?第三方认证是指与交易双方没有实际利益关系,由国家授权进行资质审核和认证的单位,包括很多如CA认证、CE认证、QA/QC认证等。以CE认证为例,产品要想在欧盟市场自由流通,就必须通过国家认证,必须加贴“CE”标志,表明产品符合欧盟基本要求《技术协调与标准化新方法》指令,这是欧盟法律对产品的要求。强制性要求。CA认证是由CA中心进行的认证。CA(CertificateAuthority),即电子商务认证中心,是负责颁发和管理数字证书的权威机构,作为电子商务交易中的可信第三方,承担验证公钥有效性的责任。公钥系统。CA认证是第三方认证的一种,用在电子商务中。附:我觉得第三方认证也可以叫第三方数字证书认证。2、数字签名+第三方认证数据无法解密,但可能被篡改,从而解决报文可能被篡改的问题——网络传输过程中比较数字签名需要经过很多中间节点。虽然数据无法解密,但有可能被篡改。如何验证数据的完整性?即验证数字签名。先普及一下摘要的意思:对于要传输的文本,做一个HASH计算(SHA1,SHA2)数字签名如何生成一段文本----哈希函数----》消息摘要----私钥加密---》数字签名首先对一段文本使用Hash函数生成消息摘要,然后用发送方的私钥加密生成数字签名,与原件一起传送给接收方文本。下一步是接收方验证数字签名的过程。其实这里的发送方是Sever,接收方是Client。验证(比对)数字签名过程收到原文和数字签名后,需要进行比对和验证。步骤:1.数字签名----发送方公钥解密----》消息摘要12.原文----哈希函数----》消息摘要23.比较消息摘要1和消息摘要2,如果是相同,则说明接收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,所以数字签名可以验证信息的完整性。接收方只能用发送方的公钥对加密后的摘要信息进行解密,然后利用HASH函数对接收到的原文生成摘要信息,并与上一步得到的摘要信息进行比较。举个例子:假设消息传递发生在科比和詹姆斯之间。詹姆斯将消息连同数字签名一起发送给科比。科比收到消息后,可以通过验证数字签名来验证收到的消息是詹姆斯发送的。当然,这个过程的前提是科比知道詹姆斯的公钥。问题来了,就像消息本身一样,公钥不能在不安全的网络中直接发送给科比,或者如何证明得到的公钥是詹姆斯的?此时需要引入证书颁发机构(CertificateAuthority,简称CA)。CA的数量不多,Kobe客户端内置了所有可信CA的证书。CA对James的公钥(和其他信息)进行数字签名以生成证书。为什么发件人的公钥?请求公钥的过程是数字签名还是验证数字签名的过程?下面的【数字证书认证机构业务流程】可以给出答案,请继续阅读。解决通信方身份可能被伪装的问题——数字证书(第三方认证)image.png客户端无法识别返回的公钥是属于中间人还是服务端,即客户端的公钥可能获取的是假的,这才是问题的根源,我们可以通过一定的规范,让客户端和服务端都遵循一定的约定,即通过“第三方认证方式”,数字证书的认证机构是首先,客户端和服务器都可以信任。三方机构的立场。image.png数字证书认证机构业务流程1、服务器运营商向第三方机构CA提交公钥、组织信息、个人信息(域名)等信息,申请认证;验证申请人所提供信息真实性的手段多种多样,如组织是否存在、企业是否合法、是否拥有域名权属等;3.如果信息被批准,CA将向申请人颁发证明文件-证书。证书包含以下信息:申请人的公钥、申请人的组织信息和个人信息、发证机构CA的信息、有效期、证书序列号的明文等信息,还包括签名。签名生成算法:首先使用哈希函数计算公开明文信息的信息摘要,然后使用CA的私钥对信息摘要进行加密,密文即为签名;【数字签名生成过程】4.客户端当客户端向服务器服务器发送请求时,服务器返回证书文件;5、client客户端读取证书中的相关明文信息,使用相同的哈希函数计算出信息摘要,然后使用对应CA的公钥解密签名数据,比较证书的信息摘要,如果它们是一致的,可以确认证书的有效性,即服务器的公钥是可信的。【验证数字签名的过程】6、客户端还会对证书相关的域名信息、有效时间等信息进行验证;客户端会内置可信的CA证书信息(包括公钥),如果CA不可信,将无法找到对应CA的证书,也会判断该证书非法。如果只是第三方认证,则没有数字签名(只是用第三方机构的私钥加密网站信息)。第三方认证机构是一个开放平台,中间商可以获取。数字签名:将网站的信息通过特定的算法加密,如MD5,再用服务器的私钥加密,形成“加密数字签名”。可能会出现以下几种情况image.png从上面我们知道,因为没有比对的过程,所以中间人也向第三方认证机构申请,然后把所有的信息都截取替换成自己的,客户端还是可以解密的,并且无法判断是来自服务器还是中??间人,最终导致数据泄露的数字签名功能可以确认消息确实是发送者签名发送的,因为其他人无法伪造发送者的签名.数字签名可以确认信息的完整性,证明数据是否未被篡改。客户端如何比较这两个数字签名?浏览器会安装一些权威的第三方认证机构的公钥,如VeriSign、Symantec、GlobalSign等。在验证数字签名时,会直接在本地获取相应第三方的公钥,对私钥加密的数字签名进行解密,得到真正的签名。然后客户端使用签名生成规则生成签名,看两个签名是否匹配。如果匹配则认证通过,如果不匹配则证书获取失败。概要CA是CertificateAuthority的缩写。客户端会内置可信的CA证书信息(包括公钥),服务器返回的证书中会包含申请者的公钥。证书的合法性取决于信息摘要的比对。CA是否可信取决于客户端的内置信任。CA公钥由服务器请求的数字签名生成:网站信息经过特定算法加密,如MD5。加密后通过第三方加密。组织私钥(Server'sprivatekey)重加密数字证书包含两个特别重要的信息:网站公钥、数字签名通信方身份可能被伪装——第三方证书数据无法解密,但可能被篡改with消息可能被篡改——如果验证数字签名只是第三方认证,没有数字签名(只是用第三方私钥加密网站信息),导致数据泄露,所以HTTPS使用[证书+数字签名】保障安全3.HTTPS工作流程(TLS1.2握手过程)image.png1.客户端发起HTTPS请求,连接到443端口,这个过程可以理解为【请求公钥的过程】。2、服务器端收到请求后,将申请的数字证书(也可以认为是公钥证书)返回给客户端。3、浏览器安装后,会自动带上一些权威的第三方机构公钥,使用匹配的公钥解密数字签名。根据签名生成规则为网站信息生成一个本地签名,然后将两者[(解密后的签名与网站信息的哈希函数生成的签名进行比较,其实这也是数字化的过程签名验证,上面写的数字签名验证的实例没有通过CA)]。通过比较两者的签名,匹配则认证通过[(也可以说证书合法,客户端内置的CA是可信的)],如果不匹配,获取证书失败。4、客户端安全获取服务器公钥后,使用伪随机数生成器随机生成对称密钥,使用【服务器公钥】(证书的公钥)加密【对称密钥】,将其发送到服务器(服务器)。5、服务端用自己的私钥对信息进行解密,得到【对称密钥】。此时,他们都拥有相同的【对称密钥】。接下来,对称密钥对可用于传输信息的加密/解密。6、服务端用对称密钥加密“明文内容A”发送给客户端。7、客户端使用对称密钥对响应的密文进行解密,得到“明文内容A”。8、客户端再次发起HTTPS请求,使用对称密钥对请求的“明文内容B”进行加密,然后服务端使用对称密钥对密文进行解密,得到“明文内容B”。请求公钥的作用:解密数字签名(匹配公钥是服务器获取的与浏览器自带的第三方机构的公钥成功匹配的公钥)加密客户端使用一对由伪随机数密钥随机生成的对称秘密(这一步启动对称加密,并将对称密钥发送到服务器。这一步通过非对称加密后变得安全)HTTPS中的非对称加密和对称加密何时起作用?服务端安全获取对称密钥后,即客户端和服务端都拥有相同的【对称密钥】后,开始对称加密;在它被识别之前,它是非对称加密。也就是说,在密钥交换环节采用非对称加密方式,而在后续的通信建立和消息交换阶段采用对称加密方式。4、HTTP和HTTPS的区别HTTP是一种明文传输协议,而HTTPS协议是由SSL+HTTP协议构建的可以进行加密传输和身份认证的网络协议,比HTTP协议更安全。HTTPS比HTTP更安全,对搜索引擎更友好,有利于SEO。谷歌和百度首先索引HTTPS页面;HTTPS需要SSL证书,而HTTP不需要【(HTTPS是安装了SSL的服务器,HTTP是没有安装SSL的服务器)】;HTTPS标准端口443,HTTP标准端口80;HTTPS基于传输层,HTTP基于应用层;HTTPS在浏览器中显示绿色安全锁,HTTP不显示;五、既然HTTPS这么安全可靠,为什么不是所有的网站都使用HTTPS1、首先,很多人仍然认为HTTPS的实现是有门槛的。这个门槛在于需要权威CA颁发的SSL证书。从证书选择、购买到部署,传统模式费时费力。2、其次,一般认为HTTPS比HTTP更消耗性能,因为加密通信比纯文本通信消耗更多的CPU和内存资源。如果每次通信都加密,会消耗大量的资源,而当它在一台计算机上传播时,可处理的请求数肯定会相应减少。但这种情况并非如此。用户可以通过优化性能和在SLB或CDN上部署证书来解决这个问题。举一个实际的例子,在“双十一”期间,淘宝、天猫这些都是HTTPS的,依然保证了网站和手机访问、浏览、交易等操作顺畅顺畅。通过测试发现,很多页面优化后的性能与HTTP相当甚至略有提升,所以HTTPS优化后其实并不慢。3.另外,还有一个原因是可以节省购买证书的成本。证书对于HTTPS通信必不可少。使用的证书必须从证书颁发机构(CA)购买。4.最后,安全意识。与国内相比,国外互联网行业的安全意识和技术应用相对成熟,HTTPS部署趋势是社会、企业、政府共同推动的。总结一下,HTTPS就是使用SSL/TLS协议进行加密传输的一般过程:客户端拿到服务器的公钥(是正确的),然后客户端随机生成一个“对称加密密钥”,并使用“公钥”进行加密。传输到服务器,服务器通过解密得到“对称密钥”,之后的所有信息都通过“对称密钥”进行加密和解密,完成整个HTTPS过程。“第三方认证”,最重要的是“数字签名”,避免了得到的公钥成为中间人。