文章目录
GO 中如何设置 HTTPS 分享
先回顾一下上次说到关于HTTP相关的知识点
- HTTP 属于网络模型中的
应用层协议
, 应用层的作用就是规定应用程序使用的用语规范 - HTTP 的建立过程涉及客户端和服务端,需要详细了解的可以查看文章:互联网协议知多少 、来我们一起探究一下net/http 的代码流程
HTTPS 是什么?
说到 HTTPS 我们就来看看 HTTPS 是个啥
HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer),即超文本传输安全协议,是一种通过计算机网络进行安全通信的传输协议
HTTPS 为啥会出现?
正是因为现有的HTTP在安全上有缺陷,为了解决身份认证的问题,保护交换数据的隐私与完整性,HTTPS 便出现了。
HTTP 的原理是啥?
那么我们来说说HTTP简单原理
-
客户端的浏览器先和服务器建立连接,通过传输层的协议TCP来完成的。默认的TCP连接的端口号是80端口
-
建立连接后,客户端发送请求给到服务端,格式为:
- URL(统一资源标识符)
- 协议版本号
- MIME信息 (修饰符,客户端的信息,许可内容)
-
服务器收到请求后,给予回应,回应格式为
- 状态行
- 协议版本号
- 成功/错误 的代码
- MIME信息(服务端信息,实体消息,其他内容)
HTTPS 实际上是怎么实现的呢?
应用安全套接层( SSL )作为 HTTP 应用的子层
-
HTTPS 对应使用使用
443端口
-
HTTP 对应使用
80端口
HTTPS 有啥作用?
- 建立一个信息安全通道,来保证数据传输的安全
- 确认网站的真实性,凡是使用了 HTTPS 的网站,都可以通过点击浏览器地址栏的锁头标志来查看网站认证之后的真实信息,也可以通过 CA 机构颁发的安全签章来进行查询
那么 HTTPS 和 HTTP 有啥区别?
-
HTTP 协议需要到 CA 申请证书,一般免费证书很少,大多是需要花钱买的
-
HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的ssl加密传输协议。
-
HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样
-
HTTP 的连接很简单,是无状态的
-
HTTPS 协议
是由SSL / TLS + HTTP协议
构建的可进行加密传输、身份认证的网络协议,比HTTP 协议
安全。
说到这里,那么 SSL 是个啥?
是一种安全协议
目的是为网络通信提供安全及数据完整性才有的这个协议
SSL协议
分为2层:
- SSL记录协议(SSL Record Protocol)
SSL
他是在传输层协议上面的,他可以为高层协议提供数据封装
、压缩
、加密
等基本功能的支持
- SSL握手协议(SSL Handshake Protocol)
用于在实际的数据传输开始之前,通讯双方进行身份认证
、协商加密算法
、交换加密密钥
等。
SSL协议能够提供哪些服务呢?
简单说下 SSL 协议能够提供哪些服务:
-
认证用户和服务器,确保数据发送到正确的客户机和服务器
-
加密数据以防止数据中途被窃取
-
维护数据的完整性,确保数据在传输过程中不被改变。
那么HTTPS涉及了哪些加密算法呢?
- 加密:RSA / DH
DH算法解决了密钥在双方不直接传递密钥的情况下完成密钥交换,感兴趣的小伙伴的进一步详细了解一下
- 身份验证 / 数字签名:RSA 算法
RSA 签名
的数学逻辑与 RSA加密
完全一致。只是颠倒使用了私钥与公钥。
RSA 公开密钥密码体制的原理是:
根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥
加密简单流程
解密简单流程
RSA 非对称加密算法 原理:
双方都得到了会话密钥,拿到公钥的一方先生成随机的会话密钥,然后利用公钥加密它;再把加密结果发给对方,对方用私钥进行解密
先分享这些基本的点,关于 HTTPS
细节原理,加密算法原理以及代码具体实现,我们后续再进行细化 , 接下来我们继续我们的主题,GO 如何设置 HTTPS
GO 如何设置 HTTPS
Golang 中设置HTTPS
,需要用到一个中间件,
没错,不用我们自己实现底层,我们可以站在巨人的肩膀上进行绘制宏伟蓝图
这个中间件是 Secure
是 Go 的 HTTP 中间件,可促进快速获得安全性。
Secure是一个标准的net / http Handler,可以与许多框架一起使用,直接与 Go 的 net / http 包一起使用也是没有问题的
package main
import (
"github.com/unrolled/secure"
"net/http"
)