对称加密算法:
加密和解密用的是同一个密钥, 加密和解密算法是公开的,那个密钥是保密的, 只有两人才知道, 这样生成的加密消息(密文) 别人就无法得知了
但是秘钥传输的过程怎么不被偷看?
对称的秘钥怎么传输?
RSA : 有一对钥匙, 一个是保密的,称为私钥,另外一个是公开的,称为公钥。
非对称加密,用私钥加密的数据,只有对应的公钥才能解密,用公钥加密的数据, 只有对应的私钥才能解密
我发给网站的信息, 用网站给的公钥加密, 这样就不怕被中间偷看了, 因为只有网站本身有私钥可以解开公钥加密的信息,
但是RAS较慢, 只用于第一次秘钥传输的时候用, 之后还是用对称加密
但是,虽然公钥是公开的,但是不知道自己得到的公钥是不是真的是网站的公钥,可能是中间人的公钥,如果错信了中间人的公钥,发出去的信息 中间人都能用自己的配套私钥看.
怎么保证公钥是确实是这个网站发的?
有公信力的认证中心(简称CA),它的公钥 事先内置在所有浏览器里面,绝对可信
CA的秘钥对 网站和公钥 的hash进行加密, 这样就能保证信息的真实(如果不是确实是CA的秘钥加密,浏览器解密不了),如果信息被篡改, 和解密的hash一比对也能看出来
码农翻身
https传输的数据 抓包 是看不到的 因为我们没有密钥
https握手过程
1.第一次,浏览器给服务器发自己生成的Random
随机数1 和 支持的Cipher Suites
加密套件
2.服务端的第一个返回
也会提供一个 随机数2
Random
,并从浏览器列出的
Cipher Suites
里面选择一个
Cipher Suite
3.紧接着 服务端第二个返回 返回证书
- 浏览器会验证这个证书
再产生一个随机数3 用服务器刚才发来的公钥加密 传给服务器
Handshake Protocol: Encrypted Handshake Message
看不到了 加密了
服务端收到以后, 用自己的私钥 就能解密得到随机数3, 这样3个随机数双方都有了,就可以得到一个主秘钥, 以后的数据就用主秘钥来传输了,
其中只有 随机数3 是公钥加密传输的 中间人看不到
之所以实际上没按https示意图,而是用了3个随机数 是为了更加随机
与http 比较
SSL(Secure Sockets Layer 安全套接层) , 是操作系统提供的 API, 3.0以后改名为TLS
https 要申请CA证书 要按时间算钱, 默认用443端口
https真的安全吗
不一定
因为浏览器默认填充的http://, 要跳转, 有被劫持的风险
可以使用HSTS优化