1

Protobufs と組み合わせて Websockets に切り替えました。IOS では魅力的に機能しますが、SocketRocket Lib を介して SSL ハンドシェイク (NSURLConnection など) を実装する方法がわかりません。誰かがそれを経験したことがありますか、それともまだサポートされていませんか。

TSL 接続は既に機能しており、SSL ピニングも機能しますが、SocketRocket を介して Web ソケットを使用して SSL チェーンを正しく検証することにより、正しい SSL ハンドシェイクを実装するにはどうすればよいでしょうか?!

ブラジル

4

1 に答える 1

4

編集:以前の回答のエラーを修正します。

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;
于 2014-10-23T21:00:33.070 に答える