1.伺服器會給一個證書,一般為.pem格式證書 2.將.pem格式的證書轉換成.cer格式的證書 打開電腦自帶終端 ,進入到桌面 cd Desktop 回車回到桌面Desktop Admin$ 輸入命令 openssl x509 -in 你的證書.crt -out 你的證書.cer -outform ...
1.伺服器會給一個證書,一般為.pem格式證書
2.將.pem格式的證書轉換成.cer格式的證書
打開電腦自帶終端 ,進入到桌面 cd Desktop 回車回到桌面Desktop Admin$
輸入命令 openssl x509 -in 你的證書.crt -out 你的證書.cer -outform der
這句話的意思是 將你的證書.pem格式轉換成.cer格式的證書
3.雙擊打開在鑰匙串中可以看到你的這個證書 ,右鍵導出證書 註意存儲為名字格式為 www.baidu.com
導出後,將證書拖入你的工程項目中
4.在你的網路工具類.m文件中
// 封裝的網路請求工具類 #import "YYCHttpTool.h" #import "AFNetworking.h" #import "YYCCommon.h" /** * 是否開啟https SSL 驗證 * * @return YES為開啟,NO為關閉 */ #define openHttpsSSL YES /** * SSL 證書名稱,僅支持cer格式。“app.bishe.com.cer”,則填“app.bishe.com” */ #define certificate @"baidu.com" @implementation YYCHttpTool /** * GET請求 * * @param url 請求路徑 * @param params 請求參數 * @param success 請求成功 * @param failure 請求失敗 */ +(void)GET:(NSString *)url params:(NSDictionary *)params success:(void (^)(id))success failure:(void (^)(NSError *))failure { // 1.創建請求管理者 AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager]; //設置載入時間 mgr.requestSerializer.timeoutInterval = 5.0f; mgr.responseSerializer = [AFHTTPResponseSerializer serializer]; // 加上這行代碼,https ssl 驗證。 if(openHttpsSSL) { [mgr setSecurityPolicy:[self customSecurityPolicy]]; } // 2.發送請求 [mgr GET:url parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) { if (success) { //序列化 返回dict NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseObject options:kNilOptions error:nil]; success(dict); } } failure:^(AFHTTPRequestOperation *operation, NSError *error) { if (failure) { failure(error); } }]; } /** * POST請求 * * @param url 請求路徑 * @param params 請求參數 * @param success 請求成功 * @param failure 請求失敗 */ +(void)POST:(NSString *)url params:(NSDictionary *)params success:(void (^)(id))success failure:(void (^)(NSError *))failure { // 1.創建請求管理者 AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager]; //設置載入時間 mgr.requestSerializer.timeoutInterval = 5.0f; mgr.responseSerializer = [AFHTTPResponseSerializer serializer]; // 加上這行代碼,https ssl 驗證。 if(openHttpsSSL) { [mgr setSecurityPolicy:[self customSecurityPolicy]]; } // 2.發送請求 [mgr POST:url parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) { if (success) { //序列化 返回dict NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseObject options:kNilOptions error:nil]; success(dict); } } failure:^(AFHTTPRequestOperation *operation, NSError *error) { if (failure) { failure(error); } }]; } + (AFSecurityPolicy*)customSecurityPolicy { // /先導入證書 NSString *cerPath = [[NSBundle mainBundle] pathForResource:certificate ofType:@"cer"];//證書的路徑 NSData *certData = [NSData dataWithContentsOfFile:cerPath]; // AFSSLPinningModeCertificate 使用證書驗證模式 AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate]; // allowInvalidCertificates 是否允許無效證書(也就是自建的證書),預設為NO // 如果是需要驗證自建證書,需要設置為YES securityPolicy.allowInvalidCertificates = YES; //validatesDomainName 是否需要驗證功能變數名稱,預設為YES; //假如證書的功能變數名稱與你請求的功能變數名稱不一致,需把該項設置為NO;如設成NO的話,即伺服器使用其他可信任機構頒發的證書,也可以建立連接,這個非常危險,建議打開。 //置為NO,主要用於這種情況:客戶端請求的是子功能變數名稱,而證書上的是另外一個功能變數名稱。因為SSL證書上的功能變數名稱是獨立的,假如證書上註冊的功能變數名稱是www.google.com,那麼mail.google.com是無法驗證通過的;當然,有錢可以註冊通配符的功能變數名稱*.google.com,但這個還是比較貴的。 //如置為NO,建議自己添加對應功能變數名稱的校驗邏輯。 securityPolicy.validatesDomainName = NO; securityPolicy.pinnedCertificates = @[certData]; return securityPolicy; } @endView Code
完畢