iOS HTTPS 自建證書

2021-07-25 04:51:32 字數 1799 閱讀 9763

絕大部分ios程式的後台服務都是基於restful或者webservice的,不論在任何時候,你都應該將服務置於https上,因為它可以避免中間人攻擊的問題,還自帶了基於非對稱金鑰的加密通道!現實是這些年湧現了大量速成的移動端開發人員,這些人往往基礎很差,完全不了解加解密為何物,使用https後,可以省去教育他們各種加解密技術,生活輕鬆多了。

正式的ca證書非常昂貴,很多人都知道,afnetworking2只要通過下面的**,你就可以使用自簽證書來訪問https

afsecuritypolicy *securitypolicy = [afsecuritypolicy defaultpolicy];

securitypolicy.allowinvalidcertificates = yes;

這麼做有個問題,就是你無法驗證證書是否是你的伺服器後端的證書,給中間人攻擊,即通過重定向路由來分析偽造你的伺服器端開啟了大門。

解決方法。afnetworking2是允許內嵌證書的,通過內嵌證書,afnetworking2就通過比對伺服器端證書、內嵌的證書、站點網域名稱是否一致來驗證連線的伺服器是否正確。由於ca證書驗證是通過站點網域名稱進行驗證的,如果你的伺服器後端有繫結的網域名稱,這是最方便的。將你的伺服器端證書,如果是pem格式的,用下面的命令轉成cer格式

openssl

x509

-in《你的伺服器證書》.pem

-outform

der-out

server

.cer

afsecuritypolicy *securitypolicy = [afsecuritypolicy afsslpinningmodecertificate];

或者afsecuritypolicy *securitypolicy = [afsecuritypolicy afsslpinningmodepublickey];

securitypolicy.allowinvalidcertificates = yes; //還是必須設成yes

情況下,會自動掃瞄bundle中.cer的檔案,並引入,這樣就可以通過自簽證書來驗證伺服器唯一性了。

我前面說過,驗證站點證書,是通過網域名稱的,如果伺服器端站點沒有繫結網域名稱(萬惡的備案),僅靠ip位址上面的方法是絕對不行的。怎麼辦?答案是想通過設定是不可以的,你只能修改afnetworking2的源**!開啟afsecuritypolicy.m檔案,找到方法:

- (bool)evaluateservertrust:(sectrustref)servertrust

fordomain:(nsstring *)domain

將下面這部分注釋掉

//            sectrustsetanchorcertificates(servertrust, (__bridge cfarrayref)pinnedcertificates);

////            if (!afservertrustisvalid(servertrust)) 

////            if (!self.validatescertificatechain)

這樣,afsecuritypolicy就只會比對伺服器證書和內嵌證書是否一致,不會再驗證證書是否和站點網域名稱一致了。

這麼做為什麼是安全的?了解https的人都知道,整個驗證體系中,最核心的實際上是伺服器的私鑰。私鑰永遠,永遠也不會離開伺服器,或者以任何形式向外傳輸。私鑰和公鑰是配對的,如果事先在客戶端預留了公鑰,只要伺服器端的公鑰和預留的公鑰一致,實際上就已經可以排除中間人攻擊了。

IOS HTTPS證書問題

本文節選自 一般而言http和https都不會遇到這個問題,只要實現nsurlconnectiondatadelegate協議就能完成需求。但是對於自簽名證書,nsurlconnection物件無法驗證服務端證書的真偽。這個時候需要動用到nsurlconnectiondelegate協議。具體方法是...

openssl自建證書SSL apache

複製 3 解壓 tar xzvf openssl 0.9.7e.tar.gz 複製 4 進入openssl目錄,並安裝,用 prefix指定openssl安裝目錄 cd openssl 0.9.7e config prefix usr local openssl make make test mak...

openssl自建證書SSL apache

本文章在linux9 apache2.0.52,tomcat5.5.6,j2se1.5,openssl0.97上實驗通證 本文的目的是為了交流,如有出錯的地方,請指教 現在開始安裝 首先在安裝之前要明白一些基本概念 1 ssl所使用的證書可以是自己建的生成的,也可以通過乙個商業性ca如verisig...