gRPC C++示例表明我可以使用默认的SSL凭据来确保连接加密(基于用于验证服务器端证书的设备证书存储(。特定代码(来自https://grpc.io/docs/guides/auth/)是:
// Create a default SSL ChannelCredentials object.
auto channel_creds = grpc::SslCredentials(grpc::SslCredentialsOptions());
// Create a channel using the credentials created in the previous step.
auto channel = grpc::CreateChannel(server_name, channel_creds);
// Create a stub on the channel.
std::unique_ptr<Greeter::Stub> stub(Greeter::NewStub(channel));
// Make actual RPC calls on the stub.
grpc::Status s = stub->sayHello(&context, *request, response);
不幸的是,该代码不允许我的应用程序连接到服务器。只有当我提供SslCredentialsOptions
的pem_root_certs
字段以设置为有效的证书颁发机构密钥(如Baltimore(时,它才有效。
有没有一种方法可以让它像在示例代码中那样工作,从而使用设备自己的证书存储来验证服务器证书?
如果您在iOS上使用gRPC Objc,则可以将GRPCCallOptions.transportType
设置为GRPCTransportTypeChttp2BoringSSL
以使用ssl通道。要使用设备的证书,只需将其传递给GRPCCallOptions.PEMRootCertificates
即可。
https://github.com/grpc/grpc/blob/master/src/objective-c/GRPCClient/GRPCCallOptions.h#L135-L149