【发布时间】:2017-06-19 10:19:06
【问题描述】:
我有一个使用 gRPC 与服务器通信的 iOS 应用。为了确保连接安全,服务器已颁发绑定到主机名的证书。我需要根据 iOS 设备上的根证书验证该证书。
看起来可以使用gRPC在iOS上提供的以下方法进行验证:
open class func setTLSPEMRootCerts(_ pemRootCert: String?, forHost host: String) throws
所以要使用它,我需要提供要用于验证的根证书,以及服务器已针对其颁发证书的主机。主机部分很简单——它应该只是服务器颁发的证书绑定到的主机名。但是我一直在获取根证书。
我找到了以下访问根证书的示例:
NSString *certsPath = [[NSBundle mainBundle] pathForResource:@"cacert_product" ofType:@"pem"];
NSError *error;
NSString *contentInUTF8 = [NSString stringWithContentsOfFile:certsPath
encoding:NSUTF8StringEncoding
error:&error];
在示例中,生成的contentInUTF8 然后可以用作上述方法的证书参数。但是,示例中的资源名称cacert_product 似乎是一个占位符;无论如何,我的设备上没有这样的资源,而且我认为它不会引用我想要使用的资源。
我要使用的证书是 iOS 10 随附的受信任根证书 this list 上的受信任根证书之一。但我不明白如何访问它。
所以我的问题是:如何为 iOS 设备上包含的受信任根证书之一获取 PEM 文件?
【问题讨论】:
标签: ios objective-c swift ssl grpc