国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

Go語(yǔ)言中怎么實(shí)現HTTPS加密協(xié)議

發(fā)布時(shí)間:2021-09-14 11:25 來(lái)源:億速云 閱讀:0 作者:Leah 欄目: 網(wǎng)絡(luò )安全

Go語(yǔ)言中怎么實(shí)現HTTPS加密協(xié)議,很多新手對此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細講解,有這方面需求的人可以來(lái)學(xué)習下,希望你能有所收獲。

Go語(yǔ)言

Go語(yǔ)言是谷歌推出的一種全新的編程語(yǔ)言,可以在不損失應用程序性能的情況下降低代碼的復雜性。Go語(yǔ)言專(zhuān)門(mén)針對多處理器系統應用程序的編程進(jìn)行了優(yōu)化,使用Go編譯的程序可以媲美C或C++代碼的速度,而且更加安全、支持并行進(jìn)程。

HTTPS

HTTPS是在HTTP下加入SSL(Secure Sockets Layer 安全套接層)層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。

SSL,及其繼任者傳輸層安全(Transport Layer Security,TLS)是為網(wǎng)絡(luò )通信提供安全及數據完整性的一種安全協(xié)議。TLS與SSL在傳輸層對網(wǎng)絡(luò )連接進(jìn)行加密。

客戶(hù)端CA對其服務(wù)端ssl/' target='_blank'>證書(shū)進(jìn)行校驗過(guò)程如下:

一:對其證書(shū)不進(jìn)行校驗

1,簡(jiǎn)易的https web

server.go:

package main

import (

“fmt”

“net/http”

)

/*

只要實(shí)現了 ServerHTTP方法 便可構建web服務(wù)器

*/

func handler(w http.ResponseWriter, r *http.Request) {

fmt.Println(“Hi, This is an example of https service in golang!”)

}

func main() {

http.HandleFunc(“/”, handler) //設置路由及相對應的處理函數 且實(shí)現了ServerHTTP方法

http.ListenAndServeTLS(“192.168.20.162:8001”, “server.crt”,

“server.key”, nil) //server.crt:服務(wù)端證書(shū) 包含服務(wù)端公鑰信息 server.key:服務(wù)端私鑰

/*

生成私鑰:

 openssl genrsa -out server.key 2048

生成證書(shū)信息:

openssl req -new -x509 -key server.key -out server.crt -days 365

    */

}

client.go:

package main

import (

    “crypto/tls”

    “fmt”

    “io/ioutil”

    “net/http”

)

func main() {

    tr := &http.Transport{

        TLSClientConfig: &tls.Config{InsecureSkipVerify: true},

    }

    /*

client與server進(jìn)行通信時(shí) client也要對server返回數字證書(shū)進(jìn)行校驗

因為server自簽證書(shū)是無(wú)效的 為了client與server正常通信

通過(guò)設置客戶(hù)端跳過(guò)證書(shū)校驗

TLSClientConfig:{&tls.Config{InsecureSkipVerify: true}

        true:跳過(guò)證書(shū)校驗

*/

client := &http.Client{Transport: tr}

resp, err := client.Get(“https://192.168.20.162:8002”)

if err != nil {

fmt.Println(err)

return

}

defer resp.Body.Close()

body, err := ioutil.ReadAll(resp.Body)

fmt.Println(string(body))

}

1-1,執行 go run server.go

1-2,瀏覽器訪(fǎng)問(wèn) https://192.168.20.162:8001 如下:

1-3,繼續點(diǎn)擊 添加例外方可繼續進(jìn)行訪(fǎng)問(wèn)

出現這種原因:

瀏覽器利用自身的CA對服務(wù)器返回的 數字證書(shū)進(jìn)行合法性校驗時(shí)發(fā)現 該數字證書(shū)是自簽證書(shū),對其該證書(shū)不信任及認定為無(wú)效證書(shū),因而導致無(wú)法繼續訪(fǎng)問(wèn)

1-4, 執行 go run client.go 便可正常訪(fǎng)問(wèn)服務(wù)器(因為此時(shí)客戶(hù)端跳過(guò)了證書(shū)校驗)

二:對其服務(wù)端證書(shū)進(jìn)行校驗

1,瀏覽器本身內置了一些有權威的CA(如Symantec、Globalsign、GDCA

2,CA證書(shū)自身也包含自己的公鑰信息,及一些證書(shū)的相關(guān)信息如該證書(shū)是由哪個(gè)CA(證書(shū)授權機構)頒發(fā)的,來(lái)自簽發(fā)機構的簽名等

3,客戶(hù)端對來(lái)自服務(wù)端證書(shū)的校驗就是使用CA證書(shū) 校驗對來(lái)自服務(wù)端證書(shū)的簽名是否是 這個(gè)CA簽的

3-1 CA校驗服務(wù)端數字證書(shū)簽名過(guò)程:

1,客戶(hù)端利用自身CA證書(shū)中的簽名算法對 服務(wù)端證書(shū)內容部分(C部分)進(jìn)行相對應的哈希運算得到哈希值(也就是對內容利用自身的哈希算法進(jìn)行簽名)

2,客戶(hù)端利用得到的哈希值與服務(wù)端數字證書(shū)的證書(shū)簽名 進(jìn)行比較

若相同則服務(wù)端證書(shū) 便是由該CA頒發(fā)的 否則不是該CA頒發(fā)的

4,代碼如下

首先準備好服務(wù)端的私鑰及證書(shū) 客戶(hù)端的CA證書(shū)

4-1,使用openssl命令生成相關(guān)私鑰及證書(shū)

1,生成 CA 私鑰

openssl genrsa -out ca.key 2048

2,生成CA證書(shū)

openssl req -x509 -new -nodes -key ca.key -subj “/CN=ca_host” -days 5000 -out ca.crt

CN=ca_host”:設置該證書(shū) 由那臺服務(wù)器生成(若只進(jìn)行客戶(hù)端對服務(wù)端證書(shū)校驗 此處可以隨便填 不影響)

3,生成服務(wù)端私鑰

openssl genrsa -out server.key 2048

4,生成服務(wù)端證書(shū)認證請求

openssl req -new -key server.key -subj “/CN=gc_host” -out server.csr

CN=gc_host:此處必須按真實(shí)填寫(xiě) 服務(wù)端在哪臺服務(wù)器設備起著(zhù)就必須填寫(xiě)哪臺設備的主機

不同的客戶(hù)端設備在調用時(shí) 需在自身設備 /etc/hosts 配置服務(wù)器設備ip及主機名

因為客戶(hù)端在請求url中只識別服務(wù)端證書(shū)的 CN

證書(shū)認證請求并不是證書(shū),需要CA的私鑰進(jìn)行簽名之后方是證書(shū)

5,生成服務(wù)端證書(shū)

openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 5000

server.go:

package main

import (

“fmt”

“net/http”

)

func handler(w http.ResponseWriter, r *http.Request) {

fmt.Fprintf(w,

“Hi, This is an example of http service in golang!”)

}

func main() {

http.HandleFunc(“/”, handler)

http.ListenAndServeTLS(“192.168.20.162:8003”,

“server.crt”, “server.key”, nil)

}

client.go:

package main

import (

“crypto/tls”

“crypto/x509”

“fmt”

“io/ioutil”

“net/http”

)

/*

客戶(hù)端若要對服務(wù)端的數字證書(shū)進(jìn)行校驗 需發(fā)送請求之前 加載CA證書(shū)

*/

func main() {

pool := x509.NewCertPool()

caCertPath := “ca.crt”

caCrt, err := ioutil.ReadFile(caCertPath)

if err != nil {

fmt.Println(“ReadFile err:”, err)

return

}

pool.AppendCertsFromPEM(caCrt) //客戶(hù)端添加ca證書(shū)

tr := &http.Transport{

TLSClientConfig: &tls.Config{RootCAs: pool}, //客戶(hù)端加載ca證書(shū)

DisableCompression: true,

}

client := &http.Client{Transport: tr}

resp, err := client.Get(“https://gc_host:8003/”)

if err != nil {

fmt.Println(“Get error:”, err)

return

}

defer resp.Body.Close()

body, err := ioutil.ReadAll(resp.Body)

fmt.Println(string(body))

}

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。

高潮喷吹一区二区在线观看| 狠狠躁夜夜躁人人爽天天天天97| 国产三级精品三级| 把腿扒开做爽爽视频| 天天爽夜夜爽夜夜爽| 亚洲欧美综合在线天堂|