iOS核心筆記——網路編程-HTTPS協議

來源:互聯網
上載者:User

標籤:ati   inf   身份認證   簡介   opera   不同   task   car   mic   

1、HTTPS的基本使用:1、HTTPS簡單說明:

?瞭解:HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全為目標的HTTP通道,簡單講是HTTP的安全版。

?重要:即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。 它是一個URI scheme(抽象標識符體系),句法類同http:體系。用於安全的HTTP資料轉送。

?重要https:URL:表明它使用了HTTPS,但HTTPS存在不同於HTTP的預設連接埠及一個加密/身分識別驗證層(在HTTP與TCP之間)。

2、HTTPS和HTTP的區別主要為以下四點:

一、https協議需要到CA申請認證,一般免費認證很少,需要交費。

二、http是超文字傳輸通訊協定 (HTTP),資訊是明文傳輸,https 則是具有安全性的ssl加密傳輸協議。

三、http和https使用的是完全不同的串連方式,用的連接埠也不一樣,前者是80,後者是443。

四、http的串連很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路通訊協定,比http協議安全。

3、簡單說明:

1、HTTPS的主要思想是在不安全的網路上建立一安全通道,並可在使用適當的加密包和伺服器憑證可被驗證且可被信任時,對竊聽和中間人攻擊提供合理的保護。

2、HTTPS的信任繼承基於預先安裝在瀏覽器中的憑證授權單位(如VeriSign、Microsoft等)(意即“我信任憑證授權單位告訴我應該信任的”)。

3、因此,一個到某網站的HTTPS串連可被信任,如果伺服器搭建自己的https 也就是說採用自認證的方式來建立https通道,這樣一般在用戶端是不被信任的。

4、所以我們一般在瀏覽器訪問一些https網站的時候會有一個提示,問你是否繼續。

4、對開發的影響:

?重要:如果我們訪問的伺服器其數位憑證是自己建立的、而非CA頒發的收信人的認證,iOS中預設是不會安裝該認證、接收資料的;所以,我們要做如下配置,一邊用戶端接收伺服器數位憑證並安裝數位憑證。

4-1、如果是自己使用NSURLSession來封裝網路請求,解決方案如下:

樣本程式如下

1.- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
2.{
3. NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];
4.
5. NSURLSessionDataTask *task = [session dataTaskWithURL:[NSURL URLWithString:@"https://www.apple.com"] completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
6. NSLog(@"%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
7. }];
8. [task resume];
9.}
1./*
2. 只要請求的地址是HTTPS的, 就會調用這個代理方法
3. 我們需要在該方法中告訴系統, 是否信任伺服器返回的認證
4. Challenge: 挑戰 質問 (包含了受保護的地區)
5. protectionSpace : 受保護地區
6. NSURLAuthenticationMethodServerTrust : 認證的類型是 伺服器信任
7. */
8.- (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential *))completionHandler
9.{
10. // NSLog(@"didReceiveChallenge %@", challenge.protectionSpace);
11. NSLog(@"調用了最外層");
12. // 1.判斷伺服器返回的認證類型, 是否是伺服器信任
13. if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) {
14. NSLog(@"調用了裡面這一層是伺服器信任的認證");
15.
16.// NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
17.
18. NSURLCredential *card = [[NSURLCredential alloc]initWithTrust:challenge.protectionSpace.serverTrust];
19. completionHandler(NSURLSessionAuthChallengeUseCredential , card);
20. }
21.}

?重要
①NSURLSessionAuthChallengeUseCredential = 0, 使用認證;

②NSURLSessionAuthChallengePerformDefaultHandling = 1, 忽略認證(預設的處理方式);

③NSURLSessionAuthChallengeCancelAuthenticationChallenge = 2, 忽略書證, 並取消這次請求;

④NSURLSessionAuthChallengeRejectProtectionSpace = 3, 拒絕當前這一次, 下一次再詢問。

5、ATS:5-1、ATS簡介:

1、iOS9中新增App Transport Security(簡稱ATS)特性, 讓原來請求時候用到的HTTP,全部都轉向TLS1.2協議進行傳輸。

2、這意味著所有的HTTP協議都強制使用了HTTPS協議進行傳輸。

3、如果我們在iOS9下直接進行HTTP請求是會報錯。系統會告訴我們不能直接使用HTTP進行請求,需要在Info.plist中控制ATS的配置。

"NSAppTransportSecurity"是ATS配置的根節點,配置了節點表示告訴系統要走自訂的ATS設定。

"NSAllowsAritraryLoads"節點控制是否禁用ATS特性,設定YES就是禁用ATS功能。

4、有兩種解決方案:一種是修改配置資訊繼續使用以前的設定。另一種解決方案是所有的請求都基於基於”TLS 1.2”版本協議。(該方法需要嚴格遵守官方的規定,如選用的密碼編譯演算法、認證等)

5-2、ATS預設的條件:

1、伺服器TLS版本至少是1.2版本;

2、串連加密只允許幾種先進的加密;

3、認證必須使用SHA256或者更好的雜湊演算法進行簽名,要麼是2048位或者更長的RSA密鑰,要麼就是256位或更長的ECC密鑰。

5-3、AFSecurityPolicy,內部有三個重要的屬性,如下:

?重要:1、AFSSLPinningMode SSLPinningMode; //該屬性標明了AFSecurityPolicy是以何種方式來驗證

BOOL allowInvalidCertificates; //是否允許不信任的認證通過驗證,預設為NO

BOOL validatesDomainName; //是否驗證主機名稱,預設為YES

?重要:2、”AFSSLPinningMode”枚舉類型有三個值,分別是AFSSLPinningModeNone、AFSSLPinningModePublicKey、AFSSLPinningModeCertificate。

“AFSSLPinningModeNone”代表了AFSecurityPolicy不做更嚴格的驗證,”只要是系統信任的認證”就可以通過驗證,不過,它受到allowInvalidCertificates和validatesDomainName的影響;

“AFSSLPinningModePublicKey”是通過”比較認證當中公開金鑰(PublicKey)部分”來進行驗證,通過SecTrustCopyPublicKey方法擷取本地認證和伺服器憑證,然後進行比較,如果有一個相同,則通過驗證,此方式主要適用於自建認證搭建的HTTPS伺服器和需要較高安全要求的驗證;

“AFSSLPinningModeCertificate”則是直接將本地的認證設定為信任的根憑證,然後來進行判斷,並且比較本地認證的內容和伺服器憑證內容是否相同,來進行二次判斷,此方式適用於較高安全要求的驗證。

?重要:3、如果HTTPS伺服器滿足ATS預設的條件,而且SSL認證是通過權威的CA機構認證過的,那麼什麼都不用做。如果上面的條件中有任何一個不成立,那麼都只能修改ATS配置。

iOS核心筆記——網路編程-HTTPS協議

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.