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.key
和server.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模式...