最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Go添加HTTPS的實(shí)現(xiàn)代碼示例

 更新時(shí)間:2019年10月23日 09:18:20   作者:帥氣貓咪  
這篇文章主要介紹了使用Go添加HTTPS的實(shí)現(xiàn)代碼示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

簡(jiǎn)介

現(xiàn)在的網(wǎng)站沒(méi)有 HTTPS 都不好意思見(jiàn)人了.

超文本傳輸安全協(xié)議(英語(yǔ):HyperText Transfer Protocol Secure,縮寫(xiě):HTTPS;常稱為 HTTP over TLS、HTTP over SSL 或 HTTP Secure)是一種通過(guò)計(jì)算機(jī)網(wǎng)絡(luò)進(jìn)行安全通信的傳輸協(xié)議。HTTPS 經(jīng)由 HTTP 進(jìn)行通信,但利用 SSL/TLS 來(lái)加密數(shù)據(jù)包。HTTPS 開(kāi)發(fā)的主要目的,是提供對(duì)網(wǎng)站服務(wù)器的身份認(rèn)證,保護(hù)交換數(shù)據(jù)的隱私與完整性。這個(gè)協(xié)議由網(wǎng)景公司(Netscape)在 1994 年首次提出,隨后擴(kuò)展到互聯(lián)網(wǎng)上。

HTTPS 的信任基于預(yù)先安裝在操作系統(tǒng)中的證書(shū)頒發(fā)機(jī)構(gòu)(CA)。因此,到一個(gè)網(wǎng)站的 HTTPS 連接僅在這些情況下可被信任:

  • 瀏覽器正確地實(shí)現(xiàn)了 HTTPS 且操作系統(tǒng)中安裝了正確且受信任的證書(shū)頒發(fā)機(jī)構(gòu);
  • 證書(shū)頒發(fā)機(jī)構(gòu)僅信任合法的網(wǎng)站;
  • 被訪問(wèn)的網(wǎng)站提供了一個(gè)有效的證書(shū),也就是說(shuō)它是一個(gè)由操作系統(tǒng)信任的證書(shū)頒發(fā)機(jī)構(gòu)簽發(fā)的(大部分瀏覽器會(huì)對(duì)無(wú)效的證書(shū)發(fā)出警告);
  • 該證書(shū)正確地驗(yàn)證了被訪問(wèn)的網(wǎng)站(例如,訪問(wèn)https://example.com時(shí)收到了簽發(fā)給example.com而不是其它域名的證書(shū));
  • 此協(xié)議的加密層(SSL/TLS)能夠有效地提供認(rèn)證和高強(qiáng)度的加密。

主要目的在于:

  • 安全傳輸數(shù)據(jù)
  • 防止中間人攻擊和竊聽(tīng)
  • 驗(yàn)證服務(wù)器的可信度

實(shí)踐

在 Go 中使用 HTTPS 也很簡(jiǎn)單, 接口如下:

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

對(duì)比一下就知道了, 只需要兩個(gè)參數(shù)就可以實(shí)現(xiàn) HTTPS 了.

這兩個(gè)參數(shù)分別是證書(shū)文件的路徑和私鑰文件的路徑.
通常要獲取這兩個(gè)文件需要從證書(shū)頒發(fā)機(jī)構(gòu)獲取.
雖然有免費(fèi)的, 但還是比較麻煩, 通常還需要域名.

為了簡(jiǎn)單起見(jiàn), 這里使用自簽名證書(shū), 當(dāng)然, 這樣的證書(shū)是不會(huì)被瀏覽器信任的.

生成證書(shū)和私鑰

如果是 window 系統(tǒng), 可以在 git bash 中運(yùn)行.
MSYS_NO_PATHCONV=1 是專為 git bash 設(shè)置的環(huán)境變量, 沒(méi)有的話會(huì)報(bào)錯(cuò).

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, 默認(rèn)應(yīng)該是 "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 下就可以直接運(yùn)行吧.

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"

這個(gè)命令會(huì)在當(dāng)前目錄生成 server.crt 證書(shū)文件和 server.key 私鑰文件, 都復(fù)制到項(xiàng)目的 conf 目錄下.

修改配置文件

在配置文件 conf/config.yaml 中添加 HTTPS 相關(guān)的參數(shù).

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

HTTPS 的默認(rèn)端口就是 443, 這里也配置成 443, 就可以在 URL 中省略端口號(hào)了.

修改啟動(dòng)函數(shù)

一開(kāi)始, 啟動(dòng)函數(shù)是在 goroutine 中啟動(dòng) HTTP 服務(wù)器,
這里增加一個(gè) goroutine 來(lái)啟動(dòng) HTTPS 服務(wù)器.

// 啟動(dòng) https 服務(wù)
cert := viper.GetString("tls.cert")
key := viper.GetString("tls.key")
addrTLS := viper.GetString("tls.addr")
if cert != "" && key != "" {
 go func() {
  // 等待 http 服務(wù)正常啟動(dòng)
  <-wait
  logrus.Infof("啟動(dòng)服務(wù)器在 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)
  }
 }()
}

啟動(dòng)之后, 就可以通過(guò) https://127.0.0.1/v1/check/cpu 驗(yàn)證一下了,

瀏覽器中打開(kāi)肯定是會(huì)顯示不安全的, 因?yàn)樽C書(shū)無(wú)法通過(guò)驗(yàn)證.

總結(jié)

HTTPS 是一種趨勢(shì), 也是未來(lái). API 接口為了安全性, 一般都是需要上 HTTPS 的.

而且在 Go 中使用 HTTPS 也挺簡(jiǎn)單的, 換個(gè) TLS 結(jié)尾的函數(shù)就行了.
也可以只使用 HTTPS, 禁止 HTTP 對(duì)外服務(wù),
修改 HTTP 的配置參數(shù) addr 為 localhost:port 就行.

當(dāng)前部分的代碼

作為版本v0.10.0

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • golang實(shí)現(xiàn)PHP數(shù)組特性的方法

    golang實(shí)現(xiàn)PHP數(shù)組特性的方法

    我們做業(yè)務(wù)過(guò)程中,對(duì)應(yīng)強(qiáng)類型語(yǔ)言使用有個(gè)痛點(diǎn),就是使用變量之前一定要定義變量類型,那么本文就來(lái)介紹一下golang實(shí)現(xiàn)PHP數(shù)組特性的方法
    2021-12-12
  • 使用client go實(shí)現(xiàn)自定義控制器的方法

    使用client go實(shí)現(xiàn)自定義控制器的方法

    本文我們來(lái)使用client-go實(shí)現(xiàn)一個(gè)自定義控制器,通過(guò)判斷service的Annotations屬性是否包含ingress/http,如果包含則創(chuàng)建ingress,如果不包含則不創(chuàng)建,對(duì)client go自定義控制器相關(guān)知識(shí)感興趣的朋友一起看看吧
    2022-05-05
  • Go語(yǔ)言中的Struct結(jié)構(gòu)體

    Go語(yǔ)言中的Struct結(jié)構(gòu)體

    這篇文章介紹了Go語(yǔ)言中的Struct結(jié)構(gòu)體,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • Golang使用ttl機(jī)制保存內(nèi)存數(shù)據(jù)方法詳解

    Golang使用ttl機(jī)制保存內(nèi)存數(shù)據(jù)方法詳解

    ttl(time-to-live) 數(shù)據(jù)存活時(shí)間,我們這里指數(shù)據(jù)在內(nèi)存中保存一段時(shí)間,超過(guò)期限則不能被讀取到,與Redis的ttl機(jī)制類似。本文僅實(shí)現(xiàn)ttl部分,不考慮序列化和反序列化
    2023-03-03
  • 一文詳解Golang的中間件設(shè)計(jì)模式

    一文詳解Golang的中間件設(shè)計(jì)模式

    最近在看一些rpc框架的使用原理和源碼的時(shí)候,對(duì)中間件的實(shí)現(xiàn)非常感興趣,所以這篇文章就來(lái)和大家聊聊Golang的中間件設(shè)計(jì)模式,希望對(duì)大家有所幫助
    2023-03-03
  • Golang Mutex互斥鎖深入理解

    Golang Mutex互斥鎖深入理解

    這篇文章主要為大家介紹了Golang Mutex互斥鎖深入理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • gorm 結(jié)構(gòu)體中 binding 和 msg 結(jié)構(gòu)體標(biāo)簽示例詳解

    gorm 結(jié)構(gòu)體中 binding 和 msg 結(jié)構(gòu)體標(biāo)簽示例詳解

    文章介紹了Gin框架中binding和msg結(jié)構(gòu)體標(biāo)簽的使用,包括基本用法、常用驗(yàn)證規(guī)則、自定義驗(yàn)證器、錯(cuò)誤信息自定義、控制器使用示例、組合驗(yàn)證規(guī)則、跨字段驗(yàn)證和初始化驗(yàn)證器等,這些標(biāo)簽主要用于數(shù)據(jù)驗(yàn)證、自定義錯(cuò)誤信息、參數(shù)綁定和表單驗(yàn)證
    2024-11-11
  • golang?channel多協(xié)程通信常用方法底層原理全面解析

    golang?channel多協(xié)程通信常用方法底層原理全面解析

    channel?是?goroutine?與?goroutine?之間通信的重要橋梁,借助?channel,我們能很輕易的寫(xiě)出一個(gè)多協(xié)程通信程序,今天,我們就來(lái)看看這個(gè)?channel?的常用用法以及底層原理
    2023-09-09
  • 15個(gè)Golang中時(shí)間處理的實(shí)用函數(shù)

    15個(gè)Golang中時(shí)間處理的實(shí)用函數(shù)

    在Go編程中,處理日期和時(shí)間是一項(xiàng)常見(jiàn)任務(wù),涉及到精確性和靈活性,本文將介紹一系列實(shí)用函數(shù),它們充當(dāng)time包的包裝器,需要的可以參考下
    2024-01-01
  • golang常用庫(kù)之pkg/errors包第三方錯(cuò)誤處理包案例詳解

    golang常用庫(kù)之pkg/errors包第三方錯(cuò)誤處理包案例詳解

    這篇文章主要介紹了golang常用庫(kù)之pkg/errors包第三方錯(cuò)誤處理包,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03

最新評(píng)論

龙岩市| 修文县| 会泽县| 隆昌县| 庄浪县| 姜堰市| 乐昌市| 鸡西市| 文登市| 恩平市| 日土县| 苗栗县| SHOW| 古田县| 慈利县| 马关县| 鞍山市| 黄山市| 宝应县| 海盐县| 呼玛县| 秦皇岛市| 星子县| 通城县| 濉溪县| 张家口市| 昌宁县| 扎兰屯市| 鹿泉市| 化州市| 双柏县| 灌南县| 大关县| 崇文区| 莆田市| 鹤峰县| 黄冈市| 八宿县| 东城区| 石棉县| 巧家县|