GCDAsyncSocket客户端公钥

4

我使用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获取?

1个回答

0
  1. 你确定有SSL连接吗?你的didSecure委托方法被调用了吗?
  2. 在执行SSLCopyPeerTrust函数之后,请检查您的trust引用不是NULL
  3. 关于Certificate,Key和Trust Services Reference的讨论由苹果提供。

在调用此函数之前,必须调用SecTrustEvaluate函数。当您调用此函数时,它会尝试返回叶证书的公钥,即使信任评估不成功。即使信任评估成功,此函数仍可能返回NULL-例如,如果无法出于某种原因提取叶证书的密钥。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接