zoukankan      html  css  js  c++  java
  • 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"

  • 相关阅读:
    1208C Magic Grid
    jsc2019_qualE Card Collector
    jsc2019_qualD Classified
    jsc2019_qualC Cell Inversion
    牛客提高D6t3 分班问题
    牛客提高D6t2 破碎的序列
    牛客提高D6t1 积木大赛
    loj6259「CodePlus 2017 12 月赛」白金元首与独舞
    p4208 [JSOI2008]最小生成树计数
    p4111 [HEOI2015]小Z的房间[简述矩阵树定理]
  • 原文地址:https://www.cnblogs.com/remixnameless/p/14288193.html
Copyright © 2011-2022 走看看