您好,登錄后才能下訂單哦!
簡介
現(xiàn)在的網(wǎng)站沒有 HTTPS 都不好意思見人了.
超文本傳輸安全協(xié)議(英語:HyperText Transfer Protocol Secure,縮寫:HTTPS;常稱為 HTTP over TLS、HTTP over SSL 或 HTTP Secure)是一種通過計算機網(wǎng)絡進行安全通信的傳輸協(xié)議。HTTPS 經(jīng)由 HTTP 進行通信,但利用 SSL/TLS 來加密數(shù)據(jù)包。HTTPS 開發(fā)的主要目的,是提供對網(wǎng)站服務器的身份認證,保護交換數(shù)據(jù)的隱私與完整性。這個協(xié)議由網(wǎng)景公司(Netscape)在 1994 年首次提出,隨后擴展到互聯(lián)網(wǎng)上。
HTTPS 的信任基于預先安裝在操作系統(tǒng)中的證書頒發(fā)機構(CA)。因此,到一個網(wǎng)站的 HTTPS 連接僅在這些情況下可被信任:
主要目的在于:
實踐
在 Go 中使用 HTTPS 也很簡單, 接口如下:
func (srv *Server) ListenAndServe() error func (srv *Server) ListenAndServeTLS(certFile, keyFile string) error
對比一下就知道了, 只需要兩個參數(shù)就可以實現(xiàn) HTTPS 了.
這兩個參數(shù)分別是證書文件的路徑和私鑰文件的路徑.
通常要獲取這兩個文件需要從證書頒發(fā)機構獲取.
雖然有免費的, 但還是比較麻煩, 通常還需要域名.
為了簡單起見, 這里使用自簽名證書, 當然, 這樣的證書是不會被瀏覽器信任的.
生成證書和私鑰
如果是 window 系統(tǒng), 可以在 git bash 中運行.
MSYS_NO_PATHCONV=1
是專為 git bash 設置的環(huán)境變量, 沒有的話會報錯.
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 相關的參數(shù).
tls: addr: :443 # HTTPS 綁定端口 cert: conf/server.crt # 自簽發(fā)的數(shù)字證書 key: conf/server.key # 私鑰文件
HTTPS 的默認端口就是 443, 這里也配置成 443, 就可以在 URL 中省略端口號了.
修改啟動函數(shù)
一開始, 啟動函數(shù)是在 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 結尾的函數(shù)就行了.
也可以只使用 HTTPS, 禁止 HTTP 對外服務,
修改 HTTP 的配置參數(shù) addr 為 localhost:port 就行.
當前部分的代碼
作為版本v0.10.0
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。