https理論與實(shí)踐

說點(diǎn)廢話,我一直覺得APPLE是個(gè)非常激進(jìn)的公司, 從早些的Flash,到現(xiàn)在的http,又比如新的Mac連USB口都不給。公司大到這個(gè)量級,已經(jīng)可以憑一己之力促進(jìn)先進(jìn)技術(shù)的普及了。

本文內(nèi)容分為以下三部分

  • HTTPS協(xié)議
  • 使用Let's Encrypt在后端部署https服務(wù)
  • https在iOS上的正確使用姿勢

Part1 HTTPS協(xié)議

普通的HTTP請求,在通信雙方建立了TCP連接之后,就可以進(jìn)行了。而HTTPS則不同,在建立TCP連接之后,需要先進(jìn)行SSL協(xié)議的握手過程,然后才是HTTP的通信。

SSL的握手過程如下圖所示


alice想要與bob進(jìn)行https的通信,需要以下幾步

  1. alice給出協(xié)議版本號、一個(gè)客戶端生成的隨機(jī)數(shù)(Client random),以及客戶端支持的加密方法。
  2. bob確認(rèn)雙方使用的加密方法,并給出數(shù)字證書(包含bob的公鑰)、以及一個(gè)服務(wù)器生成的隨機(jī)數(shù)(Server random)。
  3. alice 確認(rèn)數(shù)字證書(向CA確認(rèn))有效,然后生成一個(gè)新的隨機(jī)數(shù)(Premaster secret),并使用數(shù)字證書中的公鑰,加密這個(gè)隨機(jī)數(shù),發(fā)給鮑勃。
  4. bob使用自己的私鑰,獲取愛麗絲發(fā)來的隨機(jī)數(shù)(即Premaster secret)。
  5. alice和bob根據(jù)約定的加密方法,使用前面的三個(gè)隨機(jī)數(shù),生成"對話密鑰"(session key),用來加密接下來的整個(gè)對話過程。

上述步驟的最終目的,是為了生成”對話密鑰“,以后的通信都使用這個(gè)密鑰進(jìn)行對稱加密(一般對稱加解密的速度是比較快的)

那么看到這里,就又一個(gè)問題出現(xiàn)了。握手階段的信息安全如何保障?

答案是無法保障。整個(gè)握手階段,都是明文的。因此如果有第三方竊聽了通信,他可以獲得Client random、Server random以及加密后的Premaster secret。只要第三方無法破解Premaster secret的內(nèi)容,那么通信就是安全的。

Part2 使用Let's Encrypt在后端部署https服務(wù)

可以參考這篇文章

How To Secure Nginx with Let's Encrypt on Ubuntu 16.04

大致步驟

  1. 安裝certbot客戶端
  2. 配置服務(wù)器允許方案 /.well-known文件夾
  3. sudo letsencrypt certonly -a webroot --webroot-path=/var/www/html -d example.com -d www.example.com 這個(gè)命令會生成你需要的證書等文件
  4. 配置Nginx ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

如果速度很慢多半是python的源被墻了,需要改一下pip配置。

Let's Encrypt大法好,退沃通保平安!

Part3 在iOS上使用自己頒發(fā)的HTTPS證書的正確姿勢

在開發(fā)環(huán)境,也需要進(jìn)行HTTPS的話,需要對AFN進(jìn)行兩個(gè)設(shè)置:允許不合法的證書和不驗(yàn)證域名

    AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaseURL:[NSURL URLWithString:[self host]]];

    manager.securityPolicy.allowInvalidCertificates = YES;
    manager.securityPolicy.validatesDomainName = NO;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,699評論 19 139
  • 一、作用 不使用SSL/TLS的HTTP通信,就是不加密的通信。所有信息明文傳播,帶來了三大風(fēng)險(xiǎn)。 (1)竊聽風(fēng)險(xiǎn)...
    XLsn0w閱讀 11,069評論 2 44
  • 原文地址 http://blog.csdn.net/u012409247/article/details/4985...
    0fbf551ff6fb閱讀 3,700評論 0 13
  • 本文部分內(nèi)容參考果殼網(wǎng)對HTTPS的介紹,這里是原文鏈接:http://www.guokr.com/post/11...
    OliverGao閱讀 3,924評論 3 29
  • 文/小麥 “我得了抑郁癥…” “怎么可能?!你整天這么開心的一個(gè)人!別鬧了哈?!?“哇!你生活的環(huán)境這么好!真不懂...
    賴小麥閱讀 1,083評論 14 15

友情鏈接更多精彩內(nèi)容