Golang gRPC with mutual TLS
개요
준비사항
Source Code
Server Source
func main(){
port := 40000
ip := "0.0.0.0"
rootCAFile := "./test/certs/rootCa.crt"
certFile := "./test/certs/server.crt"
keyFile := "./test/certs/server.key"
// read keypair
x509KeyPair, err := tls.LoadX509KeyPair(certFile, keyFile)
// read rootCA
rootCACertData, err := os.ReadFile(rootCAFile)
if err != nil {
log.Fatal(err)
}
// create cert pool
certPool := x509.NewCertPool()
certPool.AppendCertsFromPEM(rootCACertData)
// create cert pool
certPool := x509.NewCertPool()
certPool.AppendCertsFromPEM(rootCACertData)
// create tls config
tlsConfig := &tls.Config{
Certificates: []tls.Certificate{x509KeyPair},
ClientCAs: certPool,
CipherSuites: []uint16{
tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
},
ClientAuth: tls.RequireAndVerifyClientCert,
}
tlsCredentials := credentials.NewTLS(tlsConfig)
// create listener
serverAddress := fmt.Sprintf("%s:%d", ip, port)
lis, err := net.Listen("tcp", serverAddress)
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
// create server
grpcServer := grpc.NewServer(grpc.Creds(tlsCredentials))
// register service
// pma.NewEventListenerService()는 gRPC로 구현된 서비스 객체이다.
pm.RegisterPmAgentEventServiceServer(grpcServer, pma.NewEventListenerService())
fmt.Printf("PM Server Start listen...%s\n", serverAddress)
// start server
grpcServer.Serve(lis)
}
Client Source
암호가 있는 개인키의 경우
Last updated