go語言gRPC系列 二 為gRPC新增證書

2022-01-19 03:48:57 字數 2526 閱讀 1135

3. 改造服務端使用自簽證書

4. 改造客戶端**(單向認證)

前情回顧

go語言grpc系列(一) - grpc入門

之前我們演示的客戶端和服務端之間是沒有使用證書的,不是很安全。下面演示一下,服務呼叫之間加入自簽的證書驗證。

生產環境以網上購買的證書為準

登入如下鏈結

安裝到某個目錄

進入安裝目錄的bin資料夾下

在所在的資料夾開啟cmd,並輸入openssl

然後再執行如下的操作, 生成私鑰檔案

genrsa -des3 -out server.key 2048
建立證書請求

genrsa -des3 -out server.key 2048
為了演示簡單,刪除私鑰中的密碼

rsa -in server.key -out server_no_password.key
生成公鑰檔案

x509 -req -days 365 -in server.csr -signkey server_no_password.key -out server.crt
在服務端的目錄下新建乙個keys資料夾,並且上之前生成的server_no_password.keyserver.crt複製到目錄下

改造之前上一節的服務端**,具體改造的部分如下標紅的部分

完整的服務端**:

package main

import (

"gomicro-quickstart/grpc_server/service"

"google.golang.org/grpc"

"google.golang.org/grpc/credentials"

"log"

"net"

)func main()

// 2. new乙個grpc的server,並且加入證書

rpcserver := grpc.newserver(grpc.creds(tls))

// 3. 將剛剛我們新建的prodservice註冊進去

service.registerprodserviceserver(rpcserver, new(service.prodservice))

// 4. 新建乙個listener,以tcp方式監聽8082埠

listener, err := net.listen("tcp", ":8082")

if err != nil

// 5. 執行rpcserver,傳入listener

_ = rpcserver.serve(listener)

}

執行server服務端

這時候我們同樣執行起來client,發現會報如下的錯,因為我們的服務端使用證書加密了

這裡為了剛入門演示方便,採用了單向認證。

在客戶端**下新建keys資料夾

將server.crt複製到keys資料夾下

完整的客戶端**如下:

package main

import (

"context"

"fmt"

"gomicro-quickstart/grpc_client/service"

"google.golang.org/grpc"

"google.golang.org/grpc/credentials"

"log"

)func main()

// 2. 新建連線,埠是服務端開放的8082埠

conn, err := grpc.dial(":8082", grpc.withtransportcredentials(tls))

if err != nil

// 退出時關閉鏈結

defer conn.close()

// 3. 呼叫product.pb.go中的newprodserviceclient方法

productserviceclient := service.newprodserviceclient(conn)

// 4. 直接像呼叫本地方法一樣呼叫getproductstock方法

resp, err := productserviceclient.getproductstock(context.background(), &service.productrequest)

if err != nil

fmt.println("呼叫grpc方法成功,prodstock = ", resp.prodstock)

}

單向認證成功,服務呼叫成功

go語言 grpc入門

go get google.golang.org grpc1.編寫.proto描述檔案 hello.proto syntax proto3 package proto message string service helloservice2.使用protoc工具生成相應的go 生成的 與porto描...

Go語言 gRPC框架使用

上節課已經學習了grpc基本知識,對grpc有了初步的認識。本節課通過程式設計實現grpc程式設計。我們想要實現的是通過grpc框架進行遠端服務呼叫,首先第一步應該是要有服務。利用之前所掌握的內容,grpc框架支援對服務的定義和生成。grpc框架預設使用protocol buffers作為介面定義語...

內網穿透系列 Go語言

軟體在kcp出現後進行了重構,將其底層udp支援替換為了kcp,使其效率大大提高,在某些惡劣的網路環境下依舊能有不錯的效果。當然,它也是支援tcp模式的,另外它也是支援加密的,在p2p打洞失敗的情況下也能夠自動切換為c s模式來使用伺服器中轉。需要了解的是,軟體也提供了lite版本,僅支援p2p模式...