iOS安全策略之HTTPS

2021-09-09 02:41:16 字數 3149 閱讀 5663

1.https傳輸流程

2.常用加密演算法

3.afn證書校驗策略及核心方法

4.ssl pinning

5.ca證書申請流程

https經由超文字傳輸協議進行通訊,但利用ssl/tls來對資料報進行加密。https開發的主要目的,是提供對網路伺服器的身份認證,保護交換資料的隱私與完整性

1.https傳輸流程

https傳輸流程.png

由於不相信伺服器生成的隨機數,所以需要客戶端生成pre-master-securet,然後再由服務端加密,最後得到master-securet(主金鑰),建立密道通訊。(減少被猜中的可能)

2.常用加密演算法

非對稱加密演算法:rsa,dsa/dss

對稱加密演算法:aes,rc4,3des

hash演算法:md5,sha1,sha256

非對稱加密演算法用於握手過程中的加密生成的密碼,

對稱加密演算法用於對真正傳輸的資料進行加密,

hash演算法用於驗證資料的完整性,是否被篡改等

非對稱加密生成密碼是整個加密過程的關鍵,非對稱加密會生成公鑰和私鑰,

公鑰負責資料加密,(可以隨意傳輸)

私鑰負責解密,(重中之重)

3.afn證書校驗策略及核心方法

nsurlsession 封裝了https鏈結的建立加密解密功能,但並沒有驗證證書的合法性,無法避免中間人攻擊,要真正的安全通訊,需要我們手動去驗證證書,

客戶端校驗策略

sessionmanager.securitypolicy = [afsecuritypolicy policywithpinningmode:afsslpinningmodenone];  

* afsslpinningmodenone 不做ssl pinning 只信任證書頒發機構證書,自己生成證書不通過

* afsslpinningmodecertificate 客戶端儲存證書拷貝 第一步驗證證書的網域名稱/有效期等資訊,第二步是對比服務端返回的證書跟客戶端返回的是否一致。

* afsslpinningmodepublickey 客戶端儲存證書拷貝 只是驗證時只驗證證書裡的公鑰,不驗證證書的有效期等資訊

核心證書校驗方法

- (bool)evaluateservertrust:(sectrustref)servertrust

fordomain:(nsstring *)domain

nsmutablearray *policies = [nsmutablearray array];

**** 需要驗證網域名稱時,新增乙個網域名稱驗證策略

if (self.validatesdomainname) else

**** 設定驗證策略

sectrustsetpolicies(servertrust, (__bridge cfarrayref)policies);

if (self.sslpinningmode == afsslpinningmodenone) else if (!afservertrustisvalid(servertrust) && !self.allowinvalidcertificates)

switch (self.sslpinningmode)

**** 設定本地證書為根證書

sectrustsetanchorcertificates(servertrust, (__bridge cfarrayref)pinnedcertificates);

**** 通過本地證書來判斷伺服器證書是否可信,不可信則不通過

if (!afservertrustisvalid(servertrust))

// obtain the chain after being validated, which *should* contain the pinned certificate in the last position (if it's the root ca)

nsarray *servercertificates = afcertificatetrustchainforservertrust(servertrust);

**** 判斷本地證書和伺服器證書是否相同

for (nsdata *trustchaincertificate in [servercertificates reverseobjectenumerator])

} return no;

}case afsslpinningmodepublickey:

}} return trustedpublickeycount > 0;}}

return no;

}

4.ssl pinning

ssl pinning

ssl pinning 即證書繫結,客戶端直接儲存服務端證書,建立https連線時會校驗服務端返回證書和客戶端證書是否一致,一致則不再去信任證書機構裡驗證。

ssl pinning 為什麼安全

其實如果中間人從客戶端取出證書(公鑰),並使用證書冒充伺服器與客戶端進行通訊時,也可以通過證書驗證,但後續流程走不下去,因為客戶端會用公鑰加密,中間人從客戶端擷取的證書是公鑰,缺少對應私鑰即使截獲了資訊也無法解密。所以能夠最大程度保護資訊保安

ps: 從上面的通訊過程中,最重要的是儲存在伺服器的私鑰。因為只有私鑰生成了在通訊過程中傳遞的證書(公鑰),且只有通過私鑰才能對公鑰加密的資訊進行解密,所以在開發過程中保護好私鑰的安全。

什麼時候使用ssl pinning

如果證書是從受信任的ca機構頒布的,驗證是沒有問題的,如果是自己頒發證書,無法通過系統受信任的ca機構列表驗證證書時,需要通過ssl pinnig的方式來驗證

如何使用ssl pinning

1.將.cer 證書放進工程中

2.設定securitypolicy證書校驗策略

ios裝置已有哪些ca證書

Docker 安全策略之 Cgroup

cgroup用於限制容器對cpu 記憶體等關鍵資源的使用,防止某個容器獨佔消耗超過安全閾值的宿主機資源。1,限制cpu docker 能夠指定乙個容器的cpu相對執行權重,每個容器預設權重為1024。假設ab兩個容器同時執行在乙個宿主機上,a容器權重為1024,b容器權重為512,那麼他們的資源分配...

MySQL安全策略

資料是企業核心資產,資料對企業而言是最重要的工作之一。稍有不慎,極有可能發生資料無意洩露,甚至被黑客惡意竊取的風險。每年業界都會傳出幾起大事件,某知名或不知名的公司被脫褲 拖庫的諧音,意思是整個資料庫被黑客盜取 之類的。從資料安全上也可以分為外網安全及內部操作安全,下面分別討論一下。內部操作安全策略...

SSH安全策略

ssh安全策略 ss配置基本安全策略 調整sshd服務配置,並過載服務 root vim etc ssh sshd config protocol 2 去掉ssh協議v1 permitrootlogin no 禁止root使用者登入 permitemptypasswords no 禁止密碼為空的使用...