【发布时间】:2018-02-09 20:16:09
【问题描述】:
我正在设置一个 golang grpc 服务器,它将使用 TLS 进行客户端授权/身份验证。我见过的所有服务器设置示例都使用net.Listen() 而不是tls.Listen()。这是为什么呢?
import (
"crypto/tls"
"github.com/pkg/errors"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
"net"
)
func startGRPCListener(hostport string, tlsconfig *tls.Config) (grpcServer *grpc.Server) {
listener, _ = net.Listen("tcp", hostport)
cred := grpc.Creds(credentials.NewTLS(tlsconfig))
grpcServer := grpc.NewServer(cred)
go func() {
serveErr := grpcServer.Serve(listener)
log.WithError(serveErr).Info("GRPC server exited")
}()
return
}
我在几个工作示例中注意到,如果我切换到 tls.Listen,则无法再建立连接。但是,在其他情况下,这不会导致问题!
我想我的问题是“我应该使用 net.Listen 还是 tls.Listen,还是没有区别?”
【问题讨论】:
-
为什么一个例子做一件事或另一件事的问题是特定于那个例子的,只有例子的作者才能真正回答,而且通常完全不相关。也许如果您发布有关您的 TLS 问题的问题,那么 SO 社区实际上可以提供帮助。