• golang gin 框架的 https 配置


    目录

    1. 概述
    2. https 证书的生成
      1. 第一步:下载证书生成软件
      2. 第二步:创建测试证书
      3. 第三步:导出证书
      4. 总结
    3. https 证书在 gin 框架中的部署
      1. 构建简单的 web 服务
      2. 证书转换
      3. 改成 https 服务

    概述

    目前, https 几乎已经是 web 站点的标配了, http 的站点和服务少之又少.
    所以, 现在发布站点或者服务, https 是绕不开的一个点.

    其实, 发布 https 还是 http, 对代码来说, 基本没有变化.
    https 难度的更多的是在如何创建和部署 SSL 证书上.

    下面, 通过简单的例子来演示如何将一个简单 golang gin 服务部署成 https 服务.

    https 证书的生成

    证书的生成和具体的代码没有任何关系.

    第一步:下载证书生成软件

    通过 keymanager 来生成证书.

    下载安装 keymanager 之后, 打开界面如下:
    keymanager 界面

    这里面有 1 个证书, 是我之前创建的, 新安装之后应该是空的.
    这时, 你可以点击 【创建测试证书】 创建一个测试证书来实验发布 https 服务,
    也可以点击 【证书申请】,申请一个真正的 https 证书(需要 freeSSL 帐号,也是免费的)

    第二步:创建测试证书

    本文主要演示 https 服务的发布过程,避免多余的步骤,所以使用测试证书。用真实证书的也一样,只是申请的过程有区别。
    点击 【创建测试证书】之后,只要输入域名,然后点击下面的【创建证书】按钮即可。

    输入域名

    创建证书

    第三步:导出证书

    在证书列表页面点击【更多】,选择【导出证书】
    导出证书

    选择 IIS 格式,并且输入密钥,作为测试我输入的是【12345678】
    导出格式选择

    总结

    借助 keymanager 工具,证书的制作非常简单,到这里为止,证书就算制作完成并导出了。

    https 证书在 gin 框架中的部署

    构建简单的 web 服务

    为了验证证书是否可用,创建一个简单的基于 gin 框架的 web 服务。

    package main
    
    import (
      "strconv"
    
      "github.com/gin-gonic/gin"
      "github.com/unrolled/secure"
    )
    
    func main() {
      GinHttps(false) // 这里false 表示 http 服务,非 https
    }
    
    func GinHttps(isHttps bool) error {
    
      r := gin.Default()
      r.GET("/test", func(c *gin.Context) {
        c.String(200, "test for 【%s】", "https")
      })
    
      if isHttps {
        r.Use(TlsHandler(8000))
    
        return r.RunTLS(":"+strconv.Itoa(8000), "/path/to/test.pem", "/path/to/test.key")
      }
    
      return r.Run(":" + strconv.Itoa(8000))
    }
    
    func TlsHandler(port int) gin.HandlerFunc {
      return func(c *gin.Context) {
        secureMiddleware := secure.New(secure.Options{
          SSLRedirect: true,
          SSLHost:     ":" + strconv.Itoa(port),
        })
        err := secureMiddleware.Process(c.Writer, c.Request)
    
        // If there was an error, do not continue.
        if err != nil {
          return
        }
    
        c.Next()
      }
    }
    

    刚开始,以 http 的方式运行,启动后再浏览器输入 http://localhost:8000/test
    http 服务

    证书转换

    导出的 IIS 格式的证书无法直接使用,使用以下命令转换出相应的 pem 和 key 文件即可。

    openssl pkcs12 -in test.pfx -nocerts -out key.pem -nodes
    openssl pkcs12 -in test.pfx -nokeys -out test.pem
    openssl rsa -in key.pem -out test.key
    

    test.pfx 是我们导出的证书,如果不是这个名字,替换成你导出的证书名字即可。
    使用的命令需要安装 openssl 工具。

    改成 https 服务

    只需将 main 函数中的调用参数改成 true 即可,其他不用变。
    注意上面步骤转换出的 pem 和 key 文件的路径要放对。

    func main() {
      GinHttps(true) // 这里true 表示 https 服务
    }
    

    https 服务

    注意,这里浏览器上显示【不安全】是因为此 SSL 证书是测试证书,实际项目中使用正式的证书就不会有【不安全】的提示了。

  • 相关阅读:
    linux基础命令笔记
    linux日常常用命令分析
    43.QQ聊天软件GUI窗口编写
    42.线程概念及线程池
    pycham中报:ModuleNotFoundError: No module named 'pymysql'
    python os模块
    python用类的方式创建线程---自创建类
    python server端并发聊天
    python文件上传
    python编码--解码
  • 原文地址:https://www.cnblogs.com/wang_yb/p/14593606.html
Copyright © 2020-2023  润新知