天天看點

openssl建立自簽名證書

在iOS上使用自簽名的SSL證書 破船之家 03-17 14:15

openssl建立自簽名證書

本文譯自: Five Tips for Using Self Signed SSL Certificates with iOS

小引:

上周蘋果release了iOS 7.1,使用者更新至此版本,去下載下傳企業級應用時,如果應用不是用https部署的,那麼會提示伺服器上的證書無效,如下圖所示:

openssl建立自簽名證書

小引:

在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打開相關站點,會看到如下提示界面:

openssl建立自簽名證書

這裡的HttpWatch iOS app還會有更詳細的提示内容:

openssl建立自簽名證書

本文剩餘内容将介紹如何對iOS做配置,以避免上面遇到的問題,以及如何友善的建立和管理自簽名證書。

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

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

openssl建立自簽名證書

如果你照着選擇的話,是可以在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裝置上安裝為可信任的,可以通過發郵件到裝置上,并将證書以附件的形式帶在郵件中:

openssl建立自簽名證書

選擇郵件中的附件,以将證書安裝至iOS裝置中。選擇附件之後,選擇 

Install

 來安裝證書。完成安裝之後,再在Safari或者其它iOS應用中使用該證書時,就不會有相關提醒了。 

并且這與Safari添加的 

SSL例外

 有一個很大的差別,你可以在任意時刻通過 

Settings->General->Profiles

 來檢視相關證書,如果有必要的話,還可以将其移除: 

openssl建立自簽名證書

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

不要用IIS建立自簽名證書

在IIS中建立自簽名證書非常的簡單。隻需要選擇菜單中的 

Create Self-Signed Certificate

 即可: 

openssl建立自簽名證書

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

openssl建立自簽名證書

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

openssl建立自簽名證書

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

利用OpenSSL建立自簽名證書

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

首先,建立一個私鑰檔案:

然後建立自簽名證書:

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
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

 : 

openssl建立自簽名證書

其中私鑰檔案(myCA.key)隻用是再建立新的SSL證書時使用。

上面的CA建立好之後,我們可以基于該證書建立許多證書。注意,這裡多了一個步驟:必須建立一個CSR(用戶端證書請求檔案)——就像購買商業的SSL證書一樣。

首先需要建立一個私鑰檔案:

然後是建立CSR:

接着用這個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伺服器。

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