編集:以前の回答のエラーを修正します。
Socket Rocket がバックグラウンドで使用する CFStream は、証明書がキーチェーンに追加されていると仮定して、ハンドシェイクを自動的に処理します。証明書を追加する必要がある場合は、次の質問への回答を参照してください: iOS: キーチェーンに SSL 証明書を事前にインストールする - プログラムで
ただし、探しているのがピン留めである場合、これは Socket Rocket で簡単に行うことができます。initWithURLRequest イニシャライザを使用すると、他のすべてが自動的に処理されます。ピン留めされた証明書の場合、SocketRocket は必要な動作である証明書チェーンを検証しません。これは、ピン留めを使用すると、この証明書またはこの証明書によって署名された証明書のみを信頼することを明確に示しているためです。つまり、チェーンの検証に依存しません。
NSURL *url = [NSURL URLWithString: ServerSocketURLString];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"certificatefilename" ofType:@"cer"];
NSData *certData = [[NSData alloc] initWithContentsOfFile:cerPath];
CFDataRef certDataRef = (__bridge CFDataRef)certData;
SecCertificateRef certRef = SecCertificateCreateWithData(NULL, certDataRef);
id certificate = (__bridge id)certRef;
[request setSR_SSLPinnedCertificates:@[certificate]];
self.clientWebSocket = [[SRWebSocket alloc] initWithURLRequest:request];
self.clientWebSocket.delegate = self;