中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用Go添加HTTPS的實現代碼示例

發布時間:2020-10-05 19:27:28 來源:腳本之家 閱讀:153 作者:帥氣貓咪 欄目:編程語言

簡介

現在的網站沒有 HTTPS 都不好意思見人了.

超文本傳輸安全協議(英語:HyperText Transfer Protocol Secure,縮寫:HTTPS;常稱為 HTTP over TLS、HTTP over SSL 或 HTTP Secure)是一種通過計算機網絡進行安全通信的傳輸協議。HTTPS 經由 HTTP 進行通信,但利用 SSL/TLS 來加密數據包。HTTPS 開發的主要目的,是提供對網站服務器的身份認證,保護交換數據的隱私與完整性。這個協議由網景公司(Netscape)在 1994 年首次提出,隨后擴展到互聯網上。

HTTPS 的信任基于預先安裝在操作系統中的證書頒發機構(CA)。因此,到一個網站的 HTTPS 連接僅在這些情況下可被信任:

  • 瀏覽器正確地實現了 HTTPS 且操作系統中安裝了正確且受信任的證書頒發機構;
  • 證書頒發機構僅信任合法的網站;
  • 被訪問的網站提供了一個有效的證書,也就是說它是一個由操作系統信任的證書頒發機構簽發的(大部分瀏覽器會對無效的證書發出警告);
  • 該證書正確地驗證了被訪問的網站(例如,訪問https://example.com時收到了簽發給example.com而不是其它域名的證書);
  • 此協議的加密層(SSL/TLS)能夠有效地提供認證和高強度的加密。

主要目的在于:

  • 安全傳輸數據
  • 防止中間人攻擊和竊聽
  • 驗證服務器的可信度

實踐

在 Go 中使用 HTTPS 也很簡單, 接口如下:

func (srv *Server) ListenAndServe() error
func (srv *Server) ListenAndServeTLS(certFile, keyFile string) error

對比一下就知道了, 只需要兩個參數就可以實現 HTTPS 了.

這兩個參數分別是證書文件的路徑和私鑰文件的路徑.
通常要獲取這兩個文件需要從證書頒發機構獲取.
雖然有免費的, 但還是比較麻煩, 通常還需要域名.

為了簡單起見, 這里使用自簽名證書, 當然, 這樣的證書是不會被瀏覽器信任的.

生成證書和私鑰

如果是 window 系統, 可以在 git bash 中運行.
MSYS_NO_PATHCONV=1 是專為 git bash 設置的環境變量, 沒有的話會報錯.

MSYS_NO_PATHCONV=1 openssl req -new -nodes -x509 -out server.crt -keyout server.key -days 3650 -subj "/C=CN/ST=SH/L=SH/O=CoolCat/OU=CoolCat Software/CN=127.0.0.1/emailAddress=coolcat@qq.com"

PowerShell 版本, 需要指定配置路徑 -config, 默認應該是 "C:\Program Files\Git\usr\ssl\openssl.cnf".

openssl req -config "C:\Program Files\Git\usr\ssl\openssl.cnf" -new -nodes -x509 -out server.crt -keyout server.key -days 3650 -subj "/C=CN/ST=SH/L=SH/O=CoolCat/OU=CoolCat Software/CN=127.0.0.1/emailAddress=coolcat@qq.com"

Linux 下就可以直接運行吧.

openssl req -new -nodes -x509 -out server.crt -keyout server.key -days 3650 -subj "/C=CN/ST=SH/L=SH/O=CoolCat/OU=CoolCat Software/CN=127.0.0.1/emailAddress=coolcat@qq.com"

這個命令會在當前目錄生成 server.crt 證書文件和 server.key 私鑰文件, 都復制到項目的 conf 目錄下.

修改配置文件

在配置文件 conf/config.yaml 中添加 HTTPS 相關的參數.

tls:
 addr: :443 # HTTPS 綁定端口
 cert: conf/server.crt # 自簽發的數字證書
 key: conf/server.key # 私鑰文件

HTTPS 的默認端口就是 443, 這里也配置成 443, 就可以在 URL 中省略端口號了.

修改啟動函數

一開始, 啟動函數是在 goroutine 中啟動 HTTP 服務器,
這里增加一個 goroutine 來啟動 HTTPS 服務器.

// 啟動 https 服務
cert := viper.GetString("tls.cert")
key := viper.GetString("tls.key")
addrTLS := viper.GetString("tls.addr")
if cert != "" && key != "" {
 go func() {
  // 等待 http 服務正常啟動
  <-wait
  logrus.Infof("啟動服務器在 https address: %s", addrTLS)
  srv.Addr = addrTLS
  if err := srv.ListenAndServeTLS(cert, key); err != nil && err != http.ErrServerClosed {
   logrus.Fatalf("listen on https: %s\n", err)
  }
 }()
}

啟動之后, 就可以通過 https://127.0.0.1/v1/check/cpu 驗證一下了,

瀏覽器中打開肯定是會顯示不安全的, 因為證書無法通過驗證.

總結

HTTPS 是一種趨勢, 也是未來. API 接口為了安全性, 一般都是需要上 HTTPS 的.

而且在 Go 中使用 HTTPS 也挺簡單的, 換個 TLS 結尾的函數就行了.
也可以只使用 HTTPS, 禁止 HTTP 對外服務,
修改 HTTP 的配置參數 addr 為 localhost:port 就行.

當前部分的代碼

作為版本v0.10.0

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

庆元县| 四子王旗| 安仁县| 七台河市| 乌恰县| 开阳县| 施秉县| 大名县| 黑河市| 兴山县| 柏乡县| 武平县| 连江县| 特克斯县| 黄山市| 方山县| 宾川县| 宝丰县| 平阳县| 石狮市| 安康市| 阳曲县| 桐乡市| 沁阳市| 泸州市| 南平市| 辰溪县| 民乐县| 合水县| 雅安市| 汶川县| 若羌县| 镇康县| 忻城县| 鲁山县| 分宜县| 南郑县| 双流县| 乌兰察布市| 麦盖提县| 克山县|