Golang gRPC框架3-自簽證書驗證


TLS證書認證

什么是TLS

TLS(Transport Layer Security,安全傳輸層),TLS是建立在傳輸層TCP協議之上的協議,服務於應用層,它的前身是SSL(Secure Socket Layer,安全套接字層),它實現了將應用層的報文進行加密后再交由TCP進行傳輸的功能。

TLS的作用

TLS協議主要解決如下三個網絡安全問題。

  • 保密(message privacy),保密通過加密encryption實現,所有信息都加密傳輸,第三方無法嗅探;
  • 完整性(message integrity),通過MAC校驗機制,一旦被篡改,通信雙方會立刻發現;
  • 認證(mutual authentication),雙方認證,雙方都可以配備證書,防止身份被冒充;

Win版自簽證書網址測試使用

http://slproweb.com/products/Win32OpenSSL.html

自簽證書配置

進入bin目錄

1、執行openssl
2、執行genrsa -des3 -out server.key 2048(會生成server.key,私鑰文件)

3、創建證書請求:req -new -key server.key -out server.csr (會生成serve.csr)其中common name也就是域名:我填的是xgrpc.com

4、刪除密碼rsa -in server.key -out server_no_passwd.key

5、執行x509 -req -days 365 -in server.csr -signkey server_no_passwd.key -out server.crt(會生成server.crt)

自此自簽證書完成

服務端構建TLS證書

func main(){
    //構造TLS憑證
	creds,err := credentials.NewServerTLSFromFile("keys\\server.crt","keys\\server_no_passwd.key")
	if err != nil {
		log.Fatal(err)
	}
    // 新建gRPC服務器實例,並開啟TLS認證
	grpcServer := grpc.NewServer(grpc.Creds(creds))
	....
}

客戶端配置TLS連接

沒有配置證書之前使用 //grpc.WithInsecure()設置禁止安全驗證傳輸

服務端配置證書之后客戶端再次訪問報錯:rpc error: code = Unavailable desc = connection closed

func main()  {
    //證書驗證
	creds,err := credentials.NewClientTLSFromFile("keys\\server.crt","xgrpc.com")
	if err != nil {
		log.Fatal(err)
	}
    conn,err := grpc.Dial(Address,grpc.WithTransportCredentials(creds))
	....	
}

go.15 以上已經啟用了 CommonName 了,上述的方式生成的證書需要添加GODEBUG=x509ignoreCN=0 這樣的環境變量才能正常運行。

否則報錯

rpc error: code = Unavailable desc = connection error: desc = "transport: authentication handshake failed: x509: certificate relies on legacy Common Name field, use SANs or temporarily enable Common Name matching with GODEBUG=x509ignoreCN=0"


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM