mysql 证书双向认证_使用自签CA,Server,client证书和双向认证

43bb52f43e0c53c127c49ee6d6adf541.png

090266ed904e9466f740ff0652ec868c.png

694cabb93b506de27e1fca7a71be8a90.png

服务端代码

package main

import (

"crypto/tls"

"crypto/x509"

"google.golang.org/grpc"

"google.golang.org/grpc/credentials"

"grpcpro/services"

"io/ioutil"

"net"

)

func main() {

cert,_:=tls.LoadX509KeyPair("cert/server.pem","cert/server.key")

certPool := x509.NewCertPool()

ca, _ := ioutil.ReadFile("cert/ca.pem")

certPool.AppendCertsFromPEM(ca)

creds:=credentials.NewTLS(&tls.Config{

Certificates: []tls.Certificate{cert},//服务端证书

ClientAuth: tls.RequireAndVerifyClientCert,

ClientCAs: certPool,

})

rpcServer:=grpc.NewServer(grpc.Creds(creds))

services.RegisterProdServiceServer(rpcServer,new(services.ProdService))

lis,_:=net.Listen("tcp",":8081")

rpcServer.Serve(lis)

//以下注释为grpc提供http服务代码

//mux:=http.NewServeMux()

//mux.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {

// rpcServer.ServeHTTP(writer,request)

//})

//httpServer:=&http.Server{

// Addr:":8081",

// Handler:mux,

//}

//httpServer.ListenAndServeTLS("keys/server.crt","keys/server.key")

}

客户端代码

package main

import (

"context"

"crypto/tls"

"crypto/x509"

"fmt"

"google.golang.org/grpc"

"google.golang.org/grpc/credentials"

"grpccli/services"

"io/ioutil"

"log"

)

func main(){

//creds, err := credentials.NewClientTLSFromFile("keys/server.crt", "localhost")

//if err != nil {

// log.Fatal(err)

//}

cert,_:=tls.LoadX509KeyPair("cert/client.pem","cert/client.key")

certPool := x509.NewCertPool()

ca, _ := ioutil.ReadFile("cert/ca.pem")

certPool.AppendCertsFromPEM(ca)

creds:=credentials.NewTLS(&tls.Config{

Certificates: []tls.Certificate{cert},//客户端证书

ServerName: "localhost",

RootCAs: certPool,

})

conn,err:=grpc.Dial(":8081",grpc.WithTransportCredentials(creds))

if err!=nil{

log.Fatal(err)

}

defer conn.Close()

prodClient:=services.NewProdServiceClient(conn)

prodRes,err:=prodClient.GetProdStock(context.Background(),

&services.ProdRequest{ProdId:12})

if err!=nil{

log.Fatal(err)

}

fmt.Println(prodRes.ProdStock)

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值