我正在使用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‘没有可见的@接口声明了选择器'setSR_SSLPinnedCertificates:’
我是不是遗漏了什么?
谢谢!
发布于 2015-05-18 05:23:49
你需要#import "SRWebSocket.h"。
SR_SSLPinnedCertificates是https://github.com/square/SocketRocket/blob/master/SocketRocket/SRWebSocket.h中NSURLRequest (CertificateAdditions)类别的属性
发布于 2015-10-10 15:56:57
request需要是NSMutableURLRequest类型。当你的request是NSURLRequest类型时,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];这应该是可行的:)
https://stackoverflow.com/questions/30288166
复制相似问题