現在網上大部分都是 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