Node之https协议

34 阅读4分钟

Node之https协议

https 协议是为了保证在进行网络传输时,数据不被窃取和篡改,从而保证数据的传输安全。可以通过加密来防止窃取,而即使篡改也无法生效。
网络传输中是怎么被篡改的呢?a-->b
如果有 a 向 b 发消息。这时出现 c 截取了 a 的消息,然后篡改之后发给 b ,就会导致很严重的安全问题。所以这时出现了对称加密。
对称加密使用一个字符串形式的密钥进行加密和解密。b 先向 a 发送一个密钥,a 收到密钥之后将消息用密钥包裹,b 收到之后再用密钥解开。但这时如果 c 在第一次发送密钥的时候就将密钥拿到,这时 a 再发送消息的时候就会导致 c 将消息使用密钥解开再将篡改之后的消息发给 b 。
所以又出现了非对称加密。这种加密会产生一对密钥,可以是一对字符串。一个是公钥,都可以获取,一个是私钥,不能传播只能自己使用。一个进行加密就必须使用另一个解密。
这时,当 b 发送给 a 公钥,a 拿到公钥,里面放消息传给 b 。只有 b 有私钥可以进行解密,看到消息。但 b 使用公钥发送消息时 a 无法解开。
所以,当 b 向 a 发送公钥之后,a 利用对称加密产生一个新的私钥。在私钥外面包一层之前的公钥发送出去,由于只有 b 有自己之前保存的私钥,b 收到之后使用自己的私钥解开,得到新的私钥。这时,只有 a 和 b 有这个私钥。于是后续就通过新的私钥进行加密解密。
但 c 可以在第一次传输公钥的时候篡改公钥,使得 a 拿到一个篡改后的公钥,这时 a 将包装好的新的公钥传过来的时候就可以用 c 篡改之后的私钥进行解密出来新的公钥。然后再使用原来的公钥包裹新的私钥发送给 b 。b 得到之后解密出新的私钥。这时 c 已经拿到了新的私钥,可以任意篡改他们之后的消息。
所以,出现了叫做 CA 的证书颁发机构。它会拿到你的公钥生成一个钥匙对。它的公钥是公开的,但是私钥却永远不会公开,同时会颁发一个电子证书 DC 。
证书包含服务器网址,颁发机构,私钥加密的服务器公钥和证书签名。所以,只能进行公钥的解密读取,但拿不到私钥就无法重新进行加密伪造,因为一旦伪造就会与原来不符,发生错误。
证书签名包括了服务器网址,CA 公钥,服务器公钥,是为了进行验证用来查看是否被篡改。它的算法是公开的,所以计算的结果也是一致的。
通过这种方式,消息无法被篡改。原来的第一步这时 b 会传送一个证书过去,a 将验证这个证书是否通过,如果被篡改就会发生报错或警告。所以这时第一次的公钥就无法被篡改,可以进行后面的一系列操作。c 这时只能选择不发消息或者回应一个无法解开的消息,这都会被发现。
所以一般流程是发送证书,验证证书,生成新的公钥,私钥解开新的公钥,使用新的公钥传输。
https 协议相对于 http 协议在中间多加了一层 ssl ,握手挥手之后来进行加密,之后再进行请求响应传输。这样就无法进行中间的篡改了。使用 https 协议的网页中,其他资源也应该使用 https 协议获取。
服务器申请证书,客户端更改协议名称,https 协议的默认端口是443。