GO 中如何设置 HTTPS 分享

本文介绍了HTTPS的基本概念,包括其作用、与HTTP的区别,以及SSL协议。重点讲解了在Golang中如何利用Secure中间件设置HTTPS,并实现HTTP到HTTPS的自动重定向。通过代码示例展示了配置过程,并分享了实际运行效果。
摘要由CSDN通过智能技术生成

GO 中如何设置 HTTPS 分享

先回顾一下上次说到关于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

img

Golang 中设置HTTPS,需要用到一个中间件,

没错,不用我们自己实现底层,我们可以站在巨人的肩膀上进行绘制宏伟蓝图

这个中间件是 Secure

是 Go 的 HTTP 中间件,可促进快速获得安全性。

Secure是一个标准的net / http Handler,可以与许多框架一起使用,直接与 Go 的 net / http 包一起使用也是没有问题的

package main

import (
   "github.com/unrolled/secure"
   "net/http"
)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值