HTTP就是我们平时浏览网页时候使用的一种协议。HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全。
问题出在,如果我们需要在网页上输入一些敏感信息,如我们的银行卡账号和密码,发送给服务器,就会在中间节点中存在泄漏的风险
为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS
https总体来说分成两步:第一步为握手,握手(采用非对称加密算法:服务器有公钥和私钥,客户端用公钥)的目的是确定加密算法,和随机序列号。
第二步根据确定的加密算法,和随机序列号进行通信(通信过程采用对称加密算法)
HTTPS具体过程:
1,客户端首先会将自己支持的加密算法,打个包告诉服务器端
2,服务器端从客户端发来的加密算法中,选出一组加密算法和HASH算法,并将自己的身份信息以证书的形式发回给客户端。而证书中包含了网站的地址,加密用的公钥,以及证书的颁发机构等.(在服务器就会存在一个公钥和私钥)
3、客户端收到了服务器发来的数据包后
验证一下证书是否合法(如,颁发机构,过期时间):如果证书合法,或者客户端接受和信任了不合法的证书,则客户端就会随机产生一串序列号,使用服务器发来的公钥进行加密;
最后使用服务器挑选的HASH算法,将刚才的消息使用刚才的随机序列号,生成相应的消息校验值,与刚才的消息一同发还给服务器(服务器会利用自己的私钥解密这个随机序号)。
4,服务器接受到客户端发来的消息后,会做这么几件事情:
使用私钥解密公钥中加密的消息,得到客户端产生的随机序列号;
使用该随机序列号,对该消息进行加密,验证的到的校验值是否与客户端发来的一致。如果一致则说明消息未被篡改,可以信任;
最后,使用该随机序列号,加上之前第2步中选择的加密算法,加密一段握手消息,发还给客户端。同时HASH值也带上
5、客户端收到服务器端的消息后,接着做这么几件事情:
1)计算HASH值是否与发回的消息一致
2)检查消息是否为握手消息
6、握手结束后,客户端和服务器端使用握手阶段产生的随机序列号以及挑选出来的算法进行对称加解密的传输。
HTTPS 缺点:
1,证书费用以及更新维护
2,降低用户访问速度。
对称算法:加密用的密钥和解密用的密钥是一个
非对称算法:加密用的密钥(公钥)和解密用的密钥(私钥)是两个不同的密钥;通过公钥加密的内容一定要使用私钥才能够解密
Hash:就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值
问题出在,如果我们需要在网页上输入一些敏感信息,如我们的银行卡账号和密码,发送给服务器,就会在中间节点中存在泄漏的风险
为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS
https总体来说分成两步:第一步为握手,握手(采用非对称加密算法:服务器有公钥和私钥,客户端用公钥)的目的是确定加密算法,和随机序列号。
第二步根据确定的加密算法,和随机序列号进行通信(通信过程采用对称加密算法)
HTTPS具体过程:
1,客户端首先会将自己支持的加密算法,打个包告诉服务器端
2,服务器端从客户端发来的加密算法中,选出一组加密算法和HASH算法,并将自己的身份信息以证书的形式发回给客户端。而证书中包含了网站的地址,加密用的公钥,以及证书的颁发机构等.(在服务器就会存在一个公钥和私钥)
3、客户端收到了服务器发来的数据包后
验证一下证书是否合法(如,颁发机构,过期时间):如果证书合法,或者客户端接受和信任了不合法的证书,则客户端就会随机产生一串序列号,使用服务器发来的公钥进行加密;
最后使用服务器挑选的HASH算法,将刚才的消息使用刚才的随机序列号,生成相应的消息校验值,与刚才的消息一同发还给服务器(服务器会利用自己的私钥解密这个随机序号)。
4,服务器接受到客户端发来的消息后,会做这么几件事情:
使用私钥解密公钥中加密的消息,得到客户端产生的随机序列号;
使用该随机序列号,对该消息进行加密,验证的到的校验值是否与客户端发来的一致。如果一致则说明消息未被篡改,可以信任;
最后,使用该随机序列号,加上之前第2步中选择的加密算法,加密一段握手消息,发还给客户端。同时HASH值也带上
5、客户端收到服务器端的消息后,接着做这么几件事情:
1)计算HASH值是否与发回的消息一致
2)检查消息是否为握手消息
6、握手结束后,客户端和服务器端使用握手阶段产生的随机序列号以及挑选出来的算法进行对称加解密的传输。
HTTPS 缺点:
1,证书费用以及更新维护
2,降低用户访问速度。
对称算法:加密用的密钥和解密用的密钥是一个
非对称算法:加密用的密钥(公钥)和解密用的密钥(私钥)是两个不同的密钥;通过公钥加密的内容一定要使用私钥才能够解密
Hash:就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值