-
(BOOL)getProxyStatus {
NSDictionary *proxySettings = NSMakeCollectable([(NSDictionary *)CFNetworkCopySystemProxySettings() autorelease]);
NSArray *proxies = NSMakeCollectable([(NSArray *)CFNetworkCopyProxiesForURL((CFURLRef)[NSURL URLWithString:@"http://www.google.com"], (CFDictionaryRef)proxySettings) autorelease]);
NSDictionary *settings = [proxies objectAtIndex:0];NSLog(@"host=%@", [settings objectForKey:(NSString *)kCFProxyHostNameKey]);
NSLog(@"port=%@", [settings objectForKey:(NSString *)kCFProxyPortNumberKey]);
NSLog(@"type=%@", [settings objectForKey:(NSString *)kCFProxyTypeKey]);if ([[settings objectForKey:(NSString *)kCFProxyTypeKey] isEqualToString:@"kCFProxyTypeNone"])
{
//沒(méi)有設(shè)置代理
return NO;
}
else
{
//設(shè)置代理了
return YES;
}
}
+(AFSecurityPolicy*)customSecurityPolicy
{
// /先導(dǎo)入證書
NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"cer"];//證書的路徑
NSData *certData = [NSData dataWithContentsOfFile:cerPath];
// AFSSLPinningModeCertificate 使用證書驗(yàn)證模式 (AFSSLPinningModeCertificate是證書所有字段都一樣才通過(guò)認(rèn)證,AFSSLPinningModePublicKey只認(rèn)證公鑰那一段,AFSSLPinningModeCertificate更安全。但是單向認(rèn)證不能防止“中間人攻擊”)
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
// allowInvalidCertificates 是否允許無(wú)效證書(也就是自建的證書),默認(rèn)為NO
// 如果是需要驗(yàn)證自建證書,需要設(shè)置為YES
securityPolicy.allowInvalidCertificates = YES;
//validatesDomainName 是否需要驗(yàn)證域名,默認(rèn)為YES;
//假如證書的域名與你請(qǐng)求的域名不一致,需把該項(xiàng)設(shè)置為NO;如設(shè)成NO的話,即服務(wù)器使用其他可信任機(jī)構(gòu)頒發(fā)的證書,也可以建立連接,這個(gè)非常危險(xiǎn),建議打開。
//置為NO,主要用于這種情況:客戶端請(qǐng)求的是子域名,而證書上的是另外一個(gè)域名。因?yàn)镾SL證書上的域名是獨(dú)立的,假如證書上注冊(cè)的域名是www.google.com,那么mail.google.com是無(wú)法驗(yàn)證通過(guò)的;當(dāng)然,有錢可以注冊(cè)通配符的域名*.google.com,但這個(gè)還是比較貴的。
//如置為NO,建議自己添加對(duì)應(yīng)域名的校驗(yàn)邏輯。
securityPolicy.validatesDomainName = YES;
NSSet<NSData*> * set = [[NSSet alloc]initWithObjects:certData , nil];
securityPolicy.pinnedCertificates = set;
return securityPolicy;
}