【问题标题】:SocketRocket and pinning certificate error?SocketRocket和固定证书错误?
【发布时间】:2015-10-10 15:56:56
【问题描述】:

我正在使用 SocketRocket,到目前为止一切正常,今天我想尝试确定一个(自签名)证书,但出现错误:

- (void)connectWebSocket {
    webSocket.delegate = nil;
    webSocket = nil;

    NSString *urlString = [NSString stringWithFormat: @"wss://%@:%@", server_ip, server_port];

    //NSLog(@"%@", urlString);

    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]
                                             cachePolicy: NSURLRequestUseProtocolCachePolicy
                                         timeoutInterval:5.0];


    // pin down certificate
    NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"myOwnCertificate" 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]];

    SRWebSocket *newWebSocket = [[SRWebSocket alloc] initWithURLRequest: request];
    newWebSocket.delegate = self;

    [newWebSocket open];

    socketIsOpen = true;

}

错误:“NSURLRequest”没有可见的@interface 声明选择器“setSR_SSLPinnedCertificates:”

我错过了什么吗?

谢谢!

【问题讨论】:

    标签: objective-c socketrocket


    【解决方案1】:

    你需要#import "SRWebSocket.h"

    SR_SSLPinnedCertificateshttps://github.com/square/SocketRocket/blob/master/SocketRocket/SRWebSocket.hNSURLRequest (CertificateAdditions) 类别的属性

    【讨论】:

      【解决方案2】:

      request 必须是 NSMutableURLRequest 类型。当您的requestNSURLRequest 类型时,SR_SSLPinnedCertificates只读,因此您可以设置它。

      #pragma mark - NSURLRequest (CertificateAdditions)
      
      @interface NSURLRequest (CertificateAdditions)
      
      @property (nonatomic, retain, readonly) NSArray *SR_SSLPinnedCertificates;
      
      @end
      
      #pragma mark - NSMutableURLRequest (CertificateAdditions)
      
      @interface NSMutableURLRequest (CertificateAdditions)
      
      @property (nonatomic, retain) NSArray *SR_SSLPinnedCertificates;
      
      @end
      

      将您的代码更改为:

      NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString]
                                                   cachePolicy: NSURLRequestUseProtocolCachePolicy
                                               timeoutInterval:5.0];
      

      这应该可行:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-21
        • 2017-12-17
        • 1970-01-01
        • 2018-10-28
        • 2020-06-01
        • 2017-11-14
        • 1970-01-01
        • 2021-02-10
        相关资源
        最近更新 更多