使用 HTTP 协议欣赏消息固然标题不大,但在更敏感的场景中,比方付出或其他涉及隐私的数据传输,就碰面临巨大的安全风险。如果仍然使用平凡的 HTTP 协议,数据在网络传输中极易被黑客截获和窜改。
举个例子,当你发送一个哀求说要点外卖时,这个哀求大概会被黑客截获。黑客可以假冒外卖平台伪装成服务器,提前给你发送一条卖弄的消息,比如:“请提供银行卡号和暗码。”如果你不加防范,真的把银行卡信息发给了黑客,那么很大概丧失惨重。
办理这种安全标题的通用方法就是 加密。加密通常分为两种方式:对称加密 和 非对称加密。
对称加密 是一种简朴高效的加密方式。加密息争密使用雷同的密钥。也就是说,发送方和吸收方共享同一个密钥来对数据举行加解密。为了确保数据安全,密钥必须保密,只有通讯两边知道,不能走漏给其他人。
非对称加密 则更为复杂,使用的是成对的密钥:一个是公开的 公钥,另一个是私密的 私钥。非对称加密的特点是:
- 用公钥加密的数据只能由私钥解密。
- 用私钥加密的数据只能由公钥解密。
这种机制提供了更高的安全性,尤其是在初次创建通讯时。比方,服务器可以使用私钥加密一条消息,客户端通过服务器的公钥解密后,可以确认消息确实来自该服务器,克制受到假冒攻击。
然而,对称加密 在性能上要远高于 非对称加密,因此,在现实的通讯中,通常将两者联合使用。详细流程是:
- 在通讯开始时,使用非对称加密互换对称加密的密钥。
- 接下来的数据传输使用对称加密,以进步服从。
这种组合方式既能包管安全性,又能分身性能,是当代网络中加密通讯的主流方案。比方,HTTPS 协议就是在 HTTP 的根本上通过 SSL/TLS 到场加密机制,既确保了数据安全,又克制了性能斲丧过高的标题。
对称加密
对称加密的安全性标题
假设你和外卖网站事先约定了一个密钥,使用该密钥举行数据加密息争密。如许,即便中心的黑客截获了通讯内容,由于没有密钥,他们也无法破解数据。
看起来这一方法自作掩饰,但标题在于:你们两个怎么安全地共享这个密钥呢?如果密钥通过互联网传输,它大概会被黑客截获。一旦黑客得到密钥,就能假冒你和外卖网站之间的通讯者,盗取敏感信息,比如银行卡账号和暗码。
这种环境类似于谍战剧中的情节,特工破译暗码后,通过暗码本破解无线电台的加密信息。关键标题在于,怎样安全地通报这个暗码本?这个标题只能通过线下讨论来办理。
比如,你和外卖网站大概会约定一个见面所在,亲身交给你一个写有密钥的纸条,两边还大概约定一个标语,比方“天王盖地虎”,以确保纸条不被窜改。然而,标题在于,标语本身就成了新的密钥。那么,怎样确保标语的安全性呢?这种一对一的讨论方式,在特工天下中或允许行,但在互联网应用中,面临成千上万的用户,显然不可行。
非对称加密
对称加密固然能包管信息的安全,但由于密钥须要在发送方和吸收方之间共享,这就引发了一个安全标题——怎样安全地互换密钥。这个标题使得对称加密无法彻底办理通讯中的安全标题,直到非对称加密的出现。
在非对称加密中,外卖网站将私钥生存在本身的体系中,这个私钥永久不会在互联网上传输,包管了其安全性。而与私钥配对的公钥可以公开流传,外卖网站只需将公钥提供给你,你就可以开始安全地通讯。
比方,你用外卖网站的公钥加密信息:“我要定外卖”,纵然黑客截获了这个信息,由于没有私钥,黑客也无法解密。因此,信息可以或许安全地传送到外卖网站,外卖网站使用本身的私钥解密后,可以复兴你:“请提供银行卡和付出暗码。”
然而,这个方法仍然有一些安全隐患。标题在于,外卖网站的复兴同样是通过私钥加密的,任何人(包罗黑客)都可以解密。这就意味着,黑客可以窃听到“银行卡和付出暗码”的哀求。
那么,外卖网站可否用本身的公钥来加密信息呢?答案是否定的。由于只有外卖网站的私钥才华解密它本身加密的信息,公钥是公开的,任何人都能解密。
更复杂的是,黑客也能拥有外卖网站的公钥,模仿发送“我要定外卖”的哀求。这就意味着,纵然黑客截获了你的哀求,它也能用外卖网站的公钥加密,伪造一个看似正当的消息。
为了办理这些标题,仅仅依靠外卖网站的一对公钥和私钥是远远不敷的。客户端也须要拥有一对公钥和私钥,并将本身的公钥提供给外卖网站。如许,当你向外卖网站发送哀求时,使用外卖网站的公钥加密,而当外卖网站复兴你时,它则使用你的公钥加密。
通过这种方式,纵然黑客截获了通讯内容,它也无法解密,由于没有私钥。这包管了通讯两边的隐私和安全。、
数字证书
在非对称加密中,公钥的传输仍然面临一个紧张标题:怎样确保你收到的公钥是真正的外卖网站公钥?常见的传输方式包罗:
- 将公钥放在公开的所在,供用户下载。
- 在创建毗连时,直接传送公钥。
但无论哪种方式,作为平凡用户,你怎样确保收到的公钥是精确的?如果黑客假冒外卖网站,发送给你一个伪造的公钥,那么你们之间的通讯看似没有标题,现实上却已被黑客窃听。
举个例子,假设我搭建了一个网站 cliu8site,起首可以通过以下下令天生私钥:
- openssl genrsa -out cliu8siteprivate.key 1024
复制代码 接着,从私钥天生对应的公钥:
- openssl rsa -in cliu8siteprivate.key -pubout -out cliu8sitepublic.pem
复制代码 在这种环境下,任何人都可以通过类似的下令天生本身的公钥和私钥,并提供给你。那么,怎样证实公钥确实来自外卖网站呢?这就须要权势巨子机构的参与,类似于身份证的作用。固然每个人都可以本身天生公钥,但只有颠末权势巨子机构认证的公钥才是可信的。
证书的作用与天生过程
数字证书可以明白为“带有公钥的身份证”,它包罗了以下关键信息:
公钥:外卖网站的公钥。
证书全部者:如外卖网站的名称和身份信息。
证书的发布机构:证书颁发机构(CA)的信息。
证书的有效期:证书的有效日期。
数字证书是由一个可信的第三方——证书颁发机构(CA)颁发的。为了得到证书,外卖网站须要向CA提交证书哀求,并通过CA的稽核。
天生证书哀求的下令如下:
- openssl req -key cliu8siteprivate.key -new -out cliu8sitecertificate.req
复制代码 接着,将证书哀求发送给CA,CA使用本身的私钥对哀求举行署名。署名的过程是使用CA的私钥对信息举行加密,确保只有CA可以或许天生精确的署名。
CA证书署名过程
CA使用其私钥对证书哀求举行署名。证书的署名包管了公钥的真实性,类似于公安局给身份证盖章。
署名的下令如下:
- openssl x509 -req -in cliu8sitecertificate.req -CA cacertificate.pem -CAkey caprivate.key -out cliu8sitecertificate.pem
复制代码 乐成实验后,返回 Signature ok,证书就天生好了。
此时,cliu8sitecertificate.pem 就是签过名的证书,CA使用它的私钥给外卖网站的公钥署名,相称于为外卖网站背书。
检察证书内容
可以使用以下下令检察证书的详细内容:
- openssl x509 -in cliu8sitecertificate.pem -noout -text
复制代码 证书的内容包罗:
Issuer:证书颁发机构。
Subject:证书的全部者。
Validity:证书的有效期。
Public-key:公钥。
Signature Algorithm:署名算法。
验证证书
通过获取证书后,用户不直接使用公钥,而是先获取该证书的署名,并用CA的公钥举行解密。如果乐成解密而且哈希值同等,分析该公钥是真实有效的。
不外,这里另有一个新标题:怎样确保CA的公钥是可靠的?如果我们不信托某个CA的公钥,该怎样验证?
为了办理这个标题,CA的公钥同样须要被其他更权势巨子的CA署名。通过层层授信,终极形成信托链,包管了每个证书的可靠性。
根证书与信托链
终极,全部的CA证书都会链式验证,从最顶层的根证书(root CA)开始,不停到终极的证书。这种方式类似于在政府认证机构的层层背书,确保了整个证书体系的安全性。
根证书通常由环球着名的几个CA(如VeriSign、Symantec等)举行背书,这些被称为“根CA”。
自署名证书
除了由CA署名的证书外,另有一种证书称为自署名证书(Self-Signed Certificate)。这类证书并不颠末CA署名,通常用于非公开环境,或是“我就是我,你信不信”的场所。
固然自署名证书可以或许提供加密掩护,但它缺乏CA背书的可靠性,不得当在公开互联网上使用。
HTTPS 的工作模式
我们知道,非对称加密在性能上不如对称加密。那么,是否可以将两者联合起来呢?答案是肯定的。现实上,公钥和私钥重要用于传输对称加密的秘钥,而现实的大数据量通讯则使用对称加密。
这就是 HTTPS 协议的总体思绪。当你登录一个外卖网站时,使用 HTTPS 协议时,客户端和服务器会举行一系列的加密握手,确保安全通讯。以下是 HTTPS 握手的过程:
客户端发送 Client Hello 消息到服务器,消息内容包罗:
- 明文传输的 TLS 版本信息。
- 加密套件候选列表(支持的加密算法)。
- 压缩算法候选列表(支持的数据压缩方法)。
- 一个随机数,用于后续的密钥协商。
这一步类似于客户端说:“您好,我想定外卖,但你要保密我吃的是什么。这是我的加密套路,再给你个随机数,你留着。”
服务器返回 Server Hello 消息,内容包罗:
- 选择的协议版本。
- 服务器选择的加密套件和压缩算法。
- 一个服务器随机数,供后续密钥协商使用。
这类似于服务器回应:“您好,保密没标题,你的加密套路还挺多,咱们就按套路 2 来吧,我这里也有个随机数,你也留着。”
接着,服务器会发送其 服务器证书,并表现 Server Hello Done,完成该阶段的协商。
客户端收到服务器的证书后,必须验证证书的有效性。客户端通过从本身信托的 CA 证书库 中获取 CA 的公钥,用来解密服务器证书中的署名。如果验证乐成,证实外卖网站是可信的。
如果证书验证通过,客户端就会天生一个 Pre-master secret,并通过服务器的公钥加密后发送给服务器。服务器使用其私钥解密该数据。
到如今为止,客户端和服务器各自拥有了三个随机数:
- 客户端天生的随机数。
- 服务器天生的随机数。
- 客户端天生的 Pre-master secret。
基于这三个随机数,客户端和服务器都可以盘算出雷同的对称密钥,用于后续的加密通讯。
一旦对称密钥天生,两边会通过 Change Cipher Spec 消息告知对方:“咱们以后都接纳协商的通讯密钥和加密算法举行加密通讯了。”
然后,客户端发送一个 Encrypted Handshake Message,用协商的密钥加密,并将参数等信息发送给服务器举行验证。
同样,服务器也会发送 Change Cipher Spec,确认接纳协商的密钥加密通讯,并发送加密的握手消息给客户端,确认两边都已经预备好举行加密数据传输。
一旦握手完成,两边就可以开始通过对称密钥加密的数据传输。此时的加密解密过程和平凡 HTTP 哀求类似,只不外全部数据都使用协商的对称密钥举行加密。
上面的过程涉及的是 单向认证,即客户端仅验证服务器的证书,这是大多数场景下的使用模式。
在须要更严格安全性要求的环境下,可以启用 双向认证,也就是说,客户端和服务器相互验证对方的证书。如许,两边不光确保了通讯的加密性,还能确保两边身份的真实性。
重放与窜改
在加密通讯中,固然加密息争密可以或许包管数据的机密性,但仍然存在一些埋伏的安全标题,尤其是重放攻击和窜改攻击。
重放攻击是指攻击者截获了正当的加密数据包,并将其重复发送给服务器。由于加密过程本身无法防止数据被重复发送,攻击者大概通过这种方式重复实验某些使用,导致数据被不妥使用。
为了办理重放攻击,通常会使用时间戳 (Timestamp) 和随机数 (Nonce) 的联合:
- Nonce 随机数包管每个哀求的唯一性。
- Timestamp 时间戳纪录哀求的时间。
这两个元素的联合,确保每次哀求都是唯一的,不大概重复。当服务器吸收到哀求时,会查抄哀求中的时间戳和随机数,如果发现重复的时间戳和随机数组合,就会拒绝哀求,防止重复使用。
窜改攻击是指攻击者在传输过程中改变了数据内容。比方,攻击者修改哀求中的一些字段,伪造哀求内容,乃至改变传输的数据。纵然攻击者无法解密数据,但它仍然可以实验修改数据后再发送。
为了防止窜改攻击,通常会接纳署名机制。署名用于包管哀求的数据在传输过程中未被修改。详细实现方式如下:
- 在哀求中到场时间戳和随机数,并对这些数据举行署名。
- 使用不可逆的哈希算法天生署名,再使用私钥对署名举行加密,形成数据包的署名。
- 服务器收到哀求后,用服务器的公钥解密署名,验证数据是否未被窜改。
如果攻击者修改了哀求内容,署名就会不匹配,服务器便无法通过验证,终极拒绝该哀求。
通过使用时间戳 (Timestamp) 和随机数 (Nonce) 防止重放攻击,联合署名机制包管数据的不可窜改性,我们可以或许有效地进步加密通讯的安全性,防止重放和窜改等常见攻击。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金 |