本文是关于 gRPC 内置安全验证的概述。这里非常感谢 Thomas French ,在阅读完官方文档之后,感到了晦涩且非常 toy,而他写的博客则较为全面,降低了对于 gRPC 安全认证这个功能学习的门槛。
首先我们来讲下大致的一个流程:
1. 生成认证文件和一个私有密钥
2. 定义一个 RPC 服务
3. 书写服务端代码
4. 书写客户端代码
这里不知道为啥,通过命令行生成的 ssl 生成的证书有点问题。命令行如下:
openssl req -newkey rsa:2048 -nodes -keyout server.key -x509 -days 365 -out server.crt
此时确实生成了 ssl 相关的证书,但是并不能使用,抛出了如下的异常:
details = "failed to connect to all addresses"
debug_error_string =
"{"created":"@1619071291.415000000","description":"Failed to pick subchannel"
此时就直接使用了官网示例当中的密钥文件。
下面我们来看下 RPC 的服务定义,也就是说写一个 .proto
文件:
syntax = "proto3";
message Empty {
}
service Server {
rpc Foo (Empty) returns (Empty) {}
}
server:
from concurrent import futures
import grpc
import service_pb2
import service_pb2_grpc
# 这里需要对抽象方法进行实现
class ServerServicer(service_pb2_grpc.ServerServicer):
def Foo