iOS https

公司使用https悬秉,但是與后臺調(diào)試接口的時候卻死活調(diào)試失敗。我在Safari打開他們的接口和泌,發(fā)現(xiàn)證書不匹配的警告,于是就判定是他們證書配置有問題梯皿,后來發(fā)現(xiàn)果然是這個問題县恕。
總結(jié)下iOS使用https的問題
用HTTPS有個問題,就是CA證書忠烛。缺省情況下,iOS要求連接的HTTPS站點必須為CA簽名過的合法證書美尸,AFNetworking是個iOS上常用的HTTP訪問庫,由于它是基于iOS的HTTP網(wǎng)絡(luò)通訊庫恕酸,自然證書方面的要求和系統(tǒng)是一致的胯陋,也就是你需要有一張合法的站點證書。
  正式的CA證書非常昂貴惶岭,很多人都知道犯眠,AFNetworking2只要通過下面的代碼,你就可以使用自簽證書來訪問HTTPS
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy defaultPolicy];
securityPolicy.allowInvalidCertificates = YES;
  這么做有個問題鸯旁,就是你無法驗證證書是否是你的服務(wù)器后端的證書,給中間人攻擊铺罢,即通過重定向路由來分析偽造你的服務(wù)器端打開了大門。

瀏覽器中https驗證流程###

1   客戶端輸入網(wǎng)址https://www.domain..com缩滨,連接到server的443端口泉瞻。
2   服務(wù)器返回一個證書(包含公鑰、和證書信息侧巨,如證書的頒發(fā)機構(gòu)鞭达,過期時間等),證書由服務(wù)器所擁有的私鑰非對稱加密生成畴蹭。
3   客戶端對證書進行驗證(首先會驗證證書是否有效,比如頒發(fā)機構(gòu)桨踪,過期時間等等)芹啥。
4   如果客戶端驗證通過,客戶端生成一個隨機數(shù)墓怀,在用服務(wù)器返回的證書(公鑰)進行加密傳輸。
5   因為公鑰是通過服務(wù)器的私鑰生成虱朵,所以服務(wù)器是可以對客戶端的傳回的加密數(shù)據(jù)進行對稱解密的钓账。服務(wù)器拿到由客戶端生成的隨機數(shù),對要傳遞的數(shù)據(jù)使用隨機數(shù)加密梆暮。
6   客戶端收到服務(wù)器使用隨機數(shù)加密的數(shù)據(jù)進行解密啦粹。

不過在app的開發(fā)中因為我們的app通常只需要和一個服務(wù)器端進行交互窘游,所以不必要每次請求都從服務(wù)器那邊獲取證書(公鑰)跳纳,在開發(fā)中app直接將服務(wù)器對應(yīng)生成的證書(公鑰)放在沙盒中,HTTPS請求時只要直接和服務(wù)器返回的證書(公鑰)進行比對寺庄。如果驗證通過則使用公鑰進行加密在傳遞回服務(wù)器。
這樣即使app中的證書(公鑰)被截取饶深,中間人使用證書冒充了服務(wù)器與客戶端進行通信時(通過了驗證)逛拱,但因為從app返回的數(shù)據(jù)都是通過證書(公鑰)加密的。而中間人從app截取的證書時公鑰朽合,缺少對應(yīng)的私鑰即使截獲了信息也無法解密曹步。能夠最大的程度的保護傳遞的信息安全。
從上面的通信過程中讲婚,最重要的是存儲在服務(wù)器的私鑰。因為只有私鑰生成了在通信過程中傳遞的證書(公鑰)活合,且只有通過私鑰才能對公鑰加密的信息進行解密物赶,所以在開發(fā)過程中保護好私鑰的安全。
代碼介紹:

/**
 SSL身份認證

 @return
 */
+ (AFSecurityPolicy *)customSecurityPolicy{

    // 導(dǎo)入證書 僅支持cer 格式 需要將crt格式轉(zhuǎn)換下  //轉(zhuǎn)換格式 openssl x509 -in 你的證書.crt -out 你的證書.cer -outform der
    NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"2__.gongfupay.com" ofType:@"cer"];
    NSData *cerData = [NSData dataWithContentsOfFile:cerPath];
    // AFSSLPinningModeCertificate 使用證書驗證模式
    // AFSSLPinningModeNone 這個模式表示不做SSL pinning告嘲,只跟瀏覽器一樣在系統(tǒng)的信任機構(gòu)列表里驗證服務(wù)端返回的證書奖地。若證書是信任機構(gòu)簽發(fā)的就會通過,若是自己服務(wù)器生成的證書就不會通過参歹。
    // AFSSLPinningModeCertificate 這個模式表示用證書綁定方式驗證證書,需要客戶端保存有服務(wù)端的證書拷貝缸血,這里驗證分兩步械筛,第一步驗證證書的域名有效期等信息,第二步是對比服務(wù)端返回的證書跟客戶端返回的是否一致笆豁。
    // AFSSLPinningModePublicKey 這個模式同樣是用證書綁定方式驗證赤赊,客戶端要有服務(wù)端的證書拷貝,只是驗證時只驗證證書里的公鑰抛计,不驗證證書的有效期等信息。只要公鑰是正確的瘦陈,就能保證通信不會被竊聽波俄,因為中間人沒有私鑰,無法解開通過公鑰加密的數(shù)據(jù)懦铺。
    AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
    // allowInvalidCertificates 是否允許無效證書(也就是自建的證書)冬念,默認為NO 如果是需要驗證自建證書,需要設(shè)置為YES
    securityPolicy.allowInvalidCertificates = YES;

    //是否需要驗證域名急前,默認為YES
    //假如證書的域名與你請求的域名不一致,需把該項設(shè)置為NO统求;如設(shè)成NO的話据块,即服務(wù)器使用其他可信任機構(gòu)頒發(fā)的證書,也可以建立連接另假,這個非常危險,建議打開己莺。
    //置為NO,主要用于這種情況:客戶端請求的是子域名阵子,而證書上的是另外一個域名胜蛉。因為SSL證書上的域名是獨立的,假如證書上注冊的域名是www.google.com誊册,那么mail.google.com是無法驗證通過的;當然君旦,有錢可以注冊通配符的域名*.google.com嘲碱,但這個還是比較貴的。
    //如置為NO悍汛,建議自己添加對應(yīng)域名的校驗邏輯离咐。
    securityPolicy.validatesDomainName = NO;

    [securityPolicy setPinnedCertificates:@[cerData]];
    return securityPolicy;
}

AFHTTPSessionManager調(diào)用setSecurityPolicy方法 進行身份驗證

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市昆著,隨后出現(xiàn)的幾起案子术陶,更是在濱河造成了極大的恐慌,老刑警劉巖梧宫,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件塘匣,死亡現(xiàn)場離奇詭異,居然都是意外死亡忌卤,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門堕阔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颗味,“玉大人,你說我怎么就攤上這事脱衙±裕” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵荤胁,是天一觀的道長屎债。 經(jīng)常有香客問我,道長圆丹,這世上最難降的妖魔是什么躯喇? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮倦微,結(jié)果婚禮上正压,老公的妹妹穿的比我還像新娘。我一直安慰自己焦履,他們只是感情好,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布郑临。 她就那樣靜靜地躺著价脾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪犀变。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天蠢正,我揣著相機與錄音省店,去河邊找鬼。 笑死雹舀,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的说榆。 我是一名探鬼主播寸认,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼唱蒸!你這毒婦竟也來了灸叼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤慎冤,失蹤者是張志新(化名)和其女友劉穎沧卢,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體披诗,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡立磁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年唱歧,在試婚紗的時候發(fā)現(xiàn)自己被綠了粒竖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片几于。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖朽砰,靈堂內(nèi)的尸體忽然破棺而出喉刘,到底是詐尸還是另有隱情,我是刑警寧澤睦裳,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布推沸,位于F島的核電站券坞,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏恨锚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一课舍、第九天 我趴在偏房一處隱蔽的房頂上張望他挎。 院中可真熱鬧,春花似錦筹淫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至棒卷,卻和暖如春顾孽,著一層夾襖步出監(jiān)牢的瞬間比规,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工盹沈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留吃谣,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓肃晚,卻偏偏與公主長得像仔戈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子晋修,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 原文地址:iOS安全系列之一:HTTPS 如何打造一個安全的App墓卦?這是每一個移動開發(fā)者必須面對的問題。在移動Ap...
    violafa閱讀 870評論 0 2
  • 原文地址 http://blog.csdn.net/u012409247/article/details/4985...
    0fbf551ff6fb閱讀 3,521評論 0 13
  • 快速適配直接看下面的示例代碼吧落剪,概念有點多。尿庐。忠怖。 自己客戶端生成證書放在服務(wù)器上,可以自簽服務(wù)器必須ca簽署抄瑟,服務(wù)...
    _YZG_閱讀 10,927評論 0 56
  • 一凡泣、作用 不使用SSL/TLS的HTTP通信,就是不加密的通信锐借。所有信息明文傳播问麸,帶來了三大風(fēng)險。 (1)竊聽風(fēng)險...
    XLsn0w閱讀 10,529評論 2 44
  • 背景 谷歌從 2017 年起钞翔,Chrome 瀏覽器將也會把采用 HTTP 協(xié)議的網(wǎng)站標記為「不安全」網(wǎng)站严卖;蘋果從 ...
    人魔七七閱讀 2,625評論 2 8