この記事では、我々はHTTPに基づいてHTTPS暗号化通信を実現する方法を説明するためにステップバイ明確なステップで送信されたHTTPを開始します
1、平文(HTTP)
初めに、HTTPは本来、通信の問題を解決するためにのみ設計された、データは平文で送信され、
この場合、非常に簡単にいくつかの悪質な人の場合における当事者の知識がなくては、データを盗みます
データが盗まれていないことを確認するために、唯一の方法は、データの暗号化を転送することです
だから、誰かがデータを盗む場合でも、我々は彼が受け取っ無意味ちんぷんかんぷんのルックスのちょうど束として、コンテンツ配信を知らないこと
2、対称暗号化
(1)対称暗号化
双方はのみ復号化することができ、このキーを使用して、暗号化データには、このキーを使用して、唯一の通信相手が知っている通信キーを、合意しました
(2)対称暗号化の問題
対称暗号化の問題があり、問題が通信プロセスの開始時に発生し、それは双方が鍵を通信することで合意した方法であります
キーはネットワークを介して送信された場合、それはおそらく他の人によって盗まれた最初の鍵となります
3、非対称暗号化
(1)非対称暗号化
ホストが最初に我々はすべて知っているが、公開鍵である鍵ペア(公開鍵と秘密鍵)を生成して通信するには、秘密鍵は自分だけに知られています
データは秘密鍵だけしか解読でき、対応する公開鍵で、秘密鍵で暗号化復号化データに対応し、公開鍵で暗号化
(2)非対称暗号化の問題
非対称暗号化も問題であり、問題と問題がやや似て対称暗号化され、公開鍵は安全にもう一方の手を手渡しする方法です
ネットワークが透過する場合には、公開鍵(中間者攻撃)に置き換えてもよいです
非対称暗号は、公開鍵は、我々はすべて知っているので、盗むのは疑いがない、パスワードのハッキングの問題を解決します
質問は今、「あなたはあなたにある」ことを証明する方法である(アリスと私はボブではなくハッカーよりも通信がどのように知っています)
図4に示すように、デジタル署名
私たちはさておきさておき上記の問題を入れてみましょう、デジタル署名技術についての話をしましょう
デジタル署名の出現は、2つの問題を解決することであり、一つは、コンテンツが改ざんされたか否かを確認するために、第二、コンテンツ生成者を決定することです
これは、特にどのようにそれを行うには?ない心配を行い、我々は、第1のデジタル署名、署名生成及び署名検証を使用して、2つの手順を見て
署名を生成します
その後、送信者自身の秘密鍵でハッシュアルゴリズム要約データ生成部、およびダイジェストを暗号化し、デジタル署名が形成されています。
デジタル署名は、受信機に沿って送信されたデータに付加されています
署名を確認してください
接收方收到后,重新使用哈希算法对数据生成一段摘要 1,同时使用发送方的公钥解密数字签名得到摘要 2
对比摘要 1 和摘要 2 是否相同,如果相同就说明内容没有被修改
怎么验证内容没有被修改,看完上面的两个过程相信大家也已经知道,那么确定内容是谁生成的又是怎么做到的呢
我们注意到一个细节,对摘要进行加密使用的是发送方的私钥,而私钥是自己才有的,这就是唯一性的证明
由于私钥只有自己知道,也就是说只有自己才能签名,而公钥是大家都知道的,所以大家都能验证签名
实际上,数字签名是常规的非对称加密的逆应用,在数字签名中,使用私钥加密,使用公钥解密
5、数字证书
好,我们重新回到之前的问题,怎么证明 “你就是你”,问题的本质其实是公钥怎么安全分发
这时候数字证书就可以派上用场,数字证书是由权威机构颁发给服务器的身份凭证,其实就相当于我们的身份证
服务器拿着身份证就可以证明 “我就是我,是独一无二的烟火”,并且通过数字证书我们还能安全的分发公钥
下面我们先来看看一个服务器是怎么申请证书的,以及客户端是怎么根据证书得到可信的公钥的
服务器申请证书
服务器向权威机构(Certificate Authority,简称 CA)申请一个证书
权威机构把服务器使用的公钥、服务器的信息、权威机构的信息等作为原始数据
权威机构用哈希算法对原始数据计算一个哈希值,然后用自己的私钥加密原始数据,得到数字签名
权威机构把数字签名附加在原始数据后,得到数字证书
权威机构返回数字证书给服务器
客户端验证证书
客户端收到服务器的数字证书
客户端得到该数字证书的颁发机构的公钥,并用公钥解密数字签名,得到原始数据的哈希值
客户端用哈希算法对数字证书的原始数据计算一个哈希值
如果两个哈希值相同,说明数字证书没有被修改,这样就可以得到服务器的公钥
针对上面的两个过程,我们来回答几个问题
1、为什么数字证书不能伪造?
因为数字证书包含权威机构的数字签名,数字签名的特点就是只有自己才能签名,但是大家都能验证签名
2、为什么权威机构是可信的?
这个问题真要从密码学的角度的确难讲,但是这个道理就相当于在现实生活中我们为什么要相信银行一样
3、在验证证书时,需要使用到权威机构的公钥,这个公钥是怎么传输的?
又回到这个问题,公钥怎么安全分发,按照以前的思路,就是让另一个权威机构给这个权威机构颁发证书
那这就是一个无限递归,怎么搞呀?要想结束递归,那就要给递归设置初始条件
权威机构是一个树状分层的结构,高层的权威机构会给低层的权威机构颁发证书
某些顶层权威机构的证书会内置在操作系统或浏览器中,默认使用的人自动相信他们
6、对称加密 + 非对称加密 + 数字签名 + 数字证书(HTTPS)
兜兜转转,一路过来,终于到最后一步了
把我们之前讲的对称加密、非对称加密、数字签名、数字证书综合应用起来,就是 HTTPS 所使用的加密技术
最后,我们把这些东西串联起来,讲一下 HTTPS 通信的全过程
客户端请求建立加密连接
服务器给客户端发送证书
客户端查看证书的有效日期,如果证书已经过期,那么提示失效,如果证书没有过期,继续下面步骤
客户端查看证书的颁发机构
如果客户端知道这个颁发结构,那么就会用对应的公钥验证证书,得到服务端的公钥
若客户端不知道这个颁发机构,那么就会提示这个证书存在风险,让用户选择是否要相信这个证书
如果验证通过,也就意味着客户端已经得到服务端的公钥
那么客户端随机生成一个对称密钥,并用服务端的公钥加密,发送给服务端
服务端收到后,用自己的私钥解密,得到对称密钥
此时,双方都已知道对称密钥 ,之后用它进行加密通信
【 阅读更多计算机网络系列文章,请看 计算机网络复习 】