如何在Android/iOS上为C++gRPC连接使用默认SSL证书管理



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);

不幸的是,该代码不允许我的应用程序连接到服务器。只有当我提供SslCredentialsOptionspem_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

最新更新