GCDAsyncSocket客户端公钥

时间:2014-05-01 13:12:04

标签: objective-c cocoa ssl gcdasyncsocket

我使用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 :(得分:0)

  1. 您确定有SSL连接吗?您的didSecure委托方法是否被调用?
  2. 执行trust功能后,检查NULL引用是否为SSLCopyPeerTrust
  3. 有关于Apple提供的Certificate, Key, and Trust Services Reference SecTrustCopyPublicKey的讨论。
  4.   

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