我使用代码来读取JSON数据:
[[DVAPIManager sharedManager] setUsername:user andPassword:pass];
NSLog(@"Using %d pinned certificates", [[DVAPIManager sharedManager].securityPolicy.pinnedCertificates count]);
[[DVAPIManager sharedManager] GET:@"/areas" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
但我出于调试原因的NSLong给出了:使用0个固定证书
我已经将apache.cer文件复制到项目中,也复制到我的单例类文件中:
- (id)initWithBaseURL:(NSURL *)url
{
self = [super initWithBaseURL:url];
if(!self)
return nil;
self.requestSerializer = [AFJSONRequestSerializer serializer];
[[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES];
AFSecurityPolicy *mySecurityPolicy = [[AFSecurityPolicy alloc] init];
[mySecurityPolicy setSSLPinningMode:AFSSLPinningModeCertificate];
[self setSecurityPolicy:mySecurityPolicy];
return self;
}
当我跑步时,我收到错误:
错误:错误域= NSURLErrorDomain代码= -1012“操作无法完成。(NSURLErrorDomain错误-1012。)
知道为什么不能获取JSON数据以及为什么系统无法读取my.cer文件?
当我尝试手动读取.cer文件时
[mySecurityPolicy setPinnedCertificates:[[NSArray alloc] initWithObjects:@"apache.cer", nil]];
它崩溃!!
答案 0 :(得分:4)
我通过手动加载证书来获得我的证书:
- (void)setupSSL
{
self.securityPolicy.SSLPinningMode = AFSSLPinningModePublicKey;
NSString *sslPublicKeyPath = [[NSBundle mainBundle] pathForResource:@"mydomain" ofType:@"cer"];
NSData *sslPublicKey = [NSData dataWithContentsOfFile:sslPublicKeyPath];
[self.securityPolicy setPinnedCertificates:@[
sslPublicKey
]];
}
我用我的pem生成了我的密钥:
openssl x509 -in mydomain.pem -out mydomain.cer -outform der
答案 1 :(得分:1)
我解决了在我的单例类中添加此代码以读取证书文件:
NSString* fileRoot = [[NSBundle mainBundle] pathForResource:@"apache" ofType:@"cer"];
NSData *certData = [[NSData alloc] initWithContentsOfFile:fileRoot];
self.requestSerializer = [AFJSONRequestSerializer serializer];
[[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES];
AFSecurityPolicy *mySecurityPolicy = [[AFSecurityPolicy alloc] init];
[mySecurityPolicy setSSLPinningMode:AFSSLPinningModeCertificate];
[mySecurityPolicy setAllowInvalidCertificates:YES];
[mySecurityPolicy setPinnedCertificates:[[NSArray alloc] initWithObjects:certData, nil]];
可能是.cer文件的默认读取它不起作用,你必须手动完成(如上面的代码)