在iOS上使用自簽名的SSL證書


轉自http://www.tuicool.com/articles/MjAjMb

小引:

上周蘋果release了iOS 7.1,用戶升級至此版本,去下載企業級應用時,如果應用不是用https部署的,那么會提示服務器上的證書無效,如下圖所示:

小引:

在iOS 7.1中需要將plists文件的url路徑設置為https才能下載安裝,如果之前是用http部署的,這就需要對服務器做一些修改。網上流傳着( Enterprise app deployment doesn’t work on iOS 7.1 )把plist放到公開的具有https功能的文件服務器上即可(dropbox或SkyDrive),經試驗,都是可行的。不過如要企業內部的網絡無法訪問外網,這又如何是好呢?網上也流傳需要受信任的證書才行,這樣一來對於某些企業的內部部署就比較麻煩了(局域網、主機名變動等都會引起很麻煩的事情),各區域可能還要用不同的證書(對應不同的host name)。

經查蘋果的相關文檔(2014年2月份),是可以使用http或者https的,后來打電話咨詢蘋果技術支持人員,告知文檔還沒來得及更新,不過自簽名的證書也可以使用,最好首先要把證書(最好是CA根證書)通過mail或者配置工具安裝到iOS設備上,然后根據這個CA構建web 服務器上用到的證書,這樣當iOS設備訪問web服務器來安裝app時,就可以正常進行了。這樣的話,我們只需要根據不同的服務器制作對應的自簽名證書即可,有問題也方便修改跟進。

下面這篇文章就是介紹如何在iOS上面使用自簽名的SSL證書。

先來看看目錄:

  1. 在iPhone或者iPad上的Safari中不要接受自簽名證書
  2. 像安裝iOS的Configuration Profile一樣安裝自簽名證書
  3. 不要用IIS創建自簽名證書
  4. 利用OpenSSL創建自簽名證書
  5. 創建自己的證書頒發機構(CA)

雖說SSL證書的購買價格不是太貴,不過有時候我們自行創建的話要更加方便一些,例如我們需要在開發環境配置SSL時、我們的測試服務器有不同的主機名或者開發的系統只有本地局域網才能訪問。

實際上我們可以免費的創建 自簽名SSL證書 ,並不需要給證書頒發機構(CA)支付任何費用,也不需要遵守任何審計要求。

使用自簽名SSL證書的缺點就是瀏覽器不會自動的信任相關的站點。如果用iPhone或者iPad上的Safari打開相關站點,會看到如下提示界面:

這里的HttpWatch iOS app還會有更詳細的提示內容:

本文剩余內容將介紹如何對iOS做配置,以避免上面遇到的問題,以及如何方便的創建和管理自簽名證書。

在iPhone或者iPad上的Safari中不要接受自簽名證書

當在Safari中第一次訪問自簽名證書的站點時,會有如下提示(Continue或Details->Accept):

如果你照着選擇的話,是可以在Safari中打開站點的,不過這樣會有兩個明顯的缺點:

  1. 在Safari中接受證書只會添加一個 SSL例外 :防止Safari對此站點做出的警告提示。實際上並不會將證書安裝到iOS中,以成為可信任的證書。同台設備的其它程序在連接該站點時仍然會失敗。
  2. 一旦將 SSL例外 添加到iOS 7中了,就無法從iOS 7中移除。在之前的版本還可以通過Settings->Safari,選中”Clear Cookies and Data”進行刪除。在iOS 7中這好像沒有效果。———除非 General > Reset > Reset Settings 。

當然,蘋果官方也提供了一個工具 iPhone configuration utility for Mac and PC,通過該工具可以把證書安裝至設備中。如果郵件不可用,或者要批量安裝的話,這是一個好方法。

像安裝iOS的Configuration Profile一樣安裝自簽名證書

要想把SSL證書在iOS設備上安裝為可信任的,可以通過發郵件到設備上,並將證書以附件的形式帶在郵件中:

選擇郵件中的附件,以將證書安裝至iOS設備中。選擇附件之后,選擇 Install來安裝證書。完成安裝之后,再在Safari或者其它iOS應用中使用該證書時,就不會有相關提醒了。

並且這與Safari添加的 SSL例外 有一個很大的區別,你可以在任意時刻通過Settings->General->Profiles 來查看相關證書,如果有必要的話,還可以將其移除:

當然,蘋果也提供了一個工具 iPhone configuration utility for Mac and PC ,通過該工具可以把證書安裝到設備中,如果郵件不可用,或者要批量安裝證書的話,可以用這個工具。

不要用IIS創建自簽名證書

在IIS中創建自簽名證書非常的簡單。只需要選擇菜單中的 Create Self-Signed Certificate 即可:

不過IIS簡單的使用計算機名稱當做證書的主機名:

大多數時候,計算機名稱與主機名是不匹配的,這樣的話自簽名的證書永遠都不會受信任——即使已經安裝至iOS設備中:

要修復這個問題可以安裝並運行IIS 6 Toolkit中的SelfSSL。不過,要是使用OpenSSL則非常簡單,下面我們就來看看吧。

利用OpenSSL創建自簽名證書

創建自簽名證書最簡單的一種方法就是使用 OpenSSL命令行工具 ,這個工具在許多平台上面都可以使用,並且在Mac OSX上面是默認安裝好了的。

首先,創建一個私鑰文件:

1
openssl genrsa -out myselfsigned.key 2048

然后創建自簽名證書:

1
2
openssl req -new -x509 -key myselfsigned.key -out myselfsigned.cer -days 365 -subj /CN=www.mysite.com

上面的命令中,關於私鑰和證書(cer)的文件名可以是任意的。其中 CN 參數需要設置為主機名(例如 https://www.mysite.com )。而 days 參數則指定證書從創建開始的有效天數。

在Apache服務器上面可以直接使用私鑰和證書文件(做相關的SSL配置即可)。在IIS中需要一個PFX文件,通過該文件,可以將證書導入至IIS的Server Certificates中。當然通過OpenSSL可以創建PFX文件:

1
2
openssl pkcs12 -export -out myselfsigned.pfx -inkey myselfsigned.key -in myselfsigned.cer

創建自己的證書頒發機構(CA)

使用自簽名證書會有這樣的問題:需要為每台設備中用到的每個證書設置相關的信任關系。有一個解決辦法就是創建自己的證書頒發機構(CA)根證書,然后基於該根證書創建別的證書。

這樣一來就是自己扮演着CA,取代了商業性質的CA。這樣做的好處就是自己的CA證書只需要在每台設備上安裝一次即可。之后,設備會自動的信任基於CA根證書創建的證書。

創建CA證書只需要兩個步驟即可,首先是創建私鑰文件(跟之前的一樣):

1
openssl genrsa -out myCA.key 2048

然后是創建證書:

1
2
openssl req -x509 -new -key myCA.key -out myCA.cer -days 730 -subj /CN="My Custom CA"

上面創建的證書(myCA.key)可以公開發布出去,並安裝在iOS或者其它OS上,以此當做內置的受信任根CA。自制的CA證書存儲在 General->Settings->Profile

其中私鑰文件(myCA.key)只用是再創建新的SSL證書時使用。

上面的CA創建好之后,我們可以基於該證書創建許多證書。注意,這里多了一個步驟:必須創建一個CSR(客戶端證書請求文件)——就像購買商業的SSL證書一樣。

首先需要創建一個私鑰文件:

1
openssl genrsa -out mycert1.key 2048

然后是創建CSR:

1
openssl req -new -out mycert1.req -key mycert1.key -subj /CN=www2.mysite.com

接着用這個CSR創建證書:

1
2
openssl x509 -req -in mycert1.req -out mycert1.cer -CAkey myCA.key -CA myCA.cer -days 365 -CAcreateserial -CAserial serial

這里創建的證書(mycert.cer)可以安裝在一台web服務器上,並且已經安裝了相關CA證書的iOS設備都可以訪問該web服務器。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM