grpc 開發進階 - 加密傳輸

現在網上大部分都是 grpc 相關的介紹,真正涉及到 grpc 的配置使用的文章還是比較少的
所以本系列着重介紹 grpc 開發時可以能會用到的一些配置

不使用任何加密

客戶端創建連接的時候默認必須使用加密傳輸,否則會直接報錯

2020/04/28 15:59:53 did not connect: grpc: no transport security set (use grpc.WithInsecure() explicitly or set credentials)
exit status 1

禁用安全傳輸

// client
conn, _ := grpc.Dial("localhost:50051", grpc.WithInsecure())

開啓 TLS/SSL 加密

TLS 是一種常見的端對端安全傳輸協議
grpc 可以使用 credentials.TransportCredentials 結構來方便的開啓安全傳輸

服務端

使用 credentials.NewServerTLSFromFile 生成 credentials.TransportCredentials
調用 grpc.NewServer 時傳遞 grpc.Creds

creds, err := credentials.NewServerTLSFromFile(certFile, keyFile)
if err != nil {
  log.Fatalf("Failed to generate credentials %v", err)
}

lis, err := net.Listen("tcp", ":0")
server := grpc.NewServer(grpc.Creds(creds))

// ignore Serve error
server.Serve(lis)

客戶端

生成 credentials.TransportCredentials

// serverNameOverride 用於測試, 通常爲 "" 空字符串
func NewClientTLSFromCert(cp *x509.CertPool, serverNameOverride string) TransportCredentials

func NewClientTLSFromFile(certFile, serverNameOverride string) (TransportCredentials, error)

調用 grpc.Dial 時傳遞 grpc.WithTransportCredentials

creds, _ := credentials.NewClientTLSFromFile(certFile, "")
conn, _ := grpc.Dial("localhost:50051", grpc.WithTransportCredentials(creds))

example: encryption

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章