我使用GCDAsyncSocket制作了一个简单的TLS服务器,并希望获得客户端公钥。我试过用这个:
- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
{
SSLContextRef ref = [sock sslContext];
SecTrustRef trust;
SSLCopyPeerTrust(ref, &trust);
SecKeyRef key = SecTrustCopyPublicKey(trust);
NSLog(@"%@",key);
}
但是我在SecTrustCopyPublicKey方法中得到了一个exc_bad_access。如何将公钥作为NSString / NSData获取?
答案 0 :(得分:0)
didSecure
委托方法是否被调用?trust
功能后,检查NULL
引用是否为SSLCopyPeerTrust
。SecTrustCopyPublicKey
的讨论。在调用此函数之前,您必须调用SecTrustEvaluate函数 功能。当你调用这个函数时,它会尝试返回 即使信任评估是叶子证书的公钥 不成功。即使信任评估成功,也是如此 函数可能仍然返回NULL - 例如,如果叶子 证书的密钥由于某种原因无法提取。