前言-----关于什么是HTTPS协议
传统的HTTP协议是明文的,在网络上传输容易被窃听,篡改。为了更高水平的加密,就有必要采取HTTPS加密协议。SSL安全套接层,主要用于Web的安全传输协议,往往通过证书认证来确保客户端以及服务端之间的通信数据是加密安全的
而HTTPS的安全基础是SSL。
实现原理
两种基本的加解密算法类型
1.对称加密:就是一直只用一个密码,客户端与服务端所有的加密解密只使用一个钥匙,加密解密速度快。
2.非对称加密:密钥是成对出现的,但是根据公钥是无法退出私钥的,反之亦然。加密解密的密码是不同的,公钥是由私钥解密的,私钥通过公钥解密,加密解密速度慢
那么对于两者的优缺点,我们可以进行混合加密,就是交换密钥的时候采用非对称加密,而在客户端以及服务端之间的通信我么采用对称加密
数字证书
为了应对身份伪装的问题,我们引入数字证书的概念。
服务端首先向一个大家都认可的第三方申请一个证书,客户端享服务d端建立通信之前,应该先向服务器请求这个证书,服务端收到请求后发送证书,客户端收到请求后与第三方进行验证,再与服务端进行通信
HTTPS的通信流程
客户端先向服务端发起建立HTTPS请求,服务端向客户端发送数字证书,客户端验证通过后,生成会话密钥(双向验证客户端也会向服务端发送证书),服务端生成回话密钥(双向验证服务端向客户端发送证书),服务端与客户端进行会话,需要注意的是客户端与服务端生成的密钥是不同的,二者相辅相成,参考混合加密以及非对称加密
优点
1.客户端的密钥只有对应的服务端以及客户端自己得到
2.加密的数据也只有二者可以得到明文
3.两者之间的通信是安全的
GO对于HTTPS的支持
go的net/http包中ListenAndServeTLS()函数提供了对于HTTPS的支持,TLS是SSL的升级版,你可以理解两者的作用是无差别的。
func ListenAndServeTLS(addr string, certFile string, keyFile string, handler Handler) error
相比于HTTP,这个函数多了数字证书certFile和私钥文件keyFile这两个参数