iOS7.1無法安裝Ad-Hoc的解決方式
iOS 7.1開始要求開發者需要使用Ad-Hoc給其他測試人員安裝*.ipa時,放置*.ipa/*.plist的伺服器需支援「SSL憑證」。
然而,網路上的文章大部分都是指導如果建置在Mac OS的系統或是Dropbox,那麼如果公司是不支援以上二種情況,
那就需要建設再自己的IIS裡了。
因此,該篇將介紹如何安裝Ad-Hoc + SSL在IIS裡面。
〉事前提要:
由於需要支援SSL,所以在*.plist的檔案與提供連結至*.plist的檔案需要做URL的處理,例如:
‧在*.plist裡:
<string>https://localhost/iOSProj/2.2/Iphone2.2.1.25.ipa</string>
‧在提供連結至*.plist的HTML檔案裡:
<a rel="external"
href="itms-services://?action=download-manifest&url=https://localhost/iOSProj/2.2/myApp.plist"
>下載2.2</a>
把原本是http的部分,改為「https」,這樣一來就可以讓設備進行下載。
〉設定IIS支援SSL憑證與通訊協定:
在IIS開啟SSL連線方式,需要建立SSL憑證才能使用,建立與安裝方式可參考<購買與安裝 SSL 憑證完全攻略(以 IIS7 為例)>
與[Windows] IIS 7 安裝憑證授權單位產生之伺服器憑證 (IIS7 Install Issue SSL Certificate),可建立與安裝自己專屬的SSL憑證。
但是這樣建立的憑證,對於iPhone/iPad在Ad-Hoc架構下是不被允許,原因在於透過IIS預設建立好的SSL憑證(自我簽署憑證)沒有
正確對應的授權,例如:Common Name是本機,如下圖:
因此,在iPhone/iPad上應會看到「無法連線 xxxx.xxx.xxx.xxx」的訊息,主要就是因為憑證是不合法的。
那該怎麼來解決這樣的問題?參考<Five Tips for Using Self Signed SSL Certificates with iOS>介紹的
「Tip #4 – Creating Self-Signed Certificates with OpenSSL is Easy」,透過OpenSSL建立適用於Ad-Hoc的*.cer與*.pfx檔案,
分別安裝於iOS設備與IIS。
A. 下載與安裝OpenSSL:
可參考<AppServ + OpenSSL in Win32>這一篇來下載OpenSSL執行檔,並將它安裝至路徑:「C:\openssl\win32」。
B. 利用OpenSSL建立SSL憑證:
B-1. 建立private key file:
openssl genrsa -out myselfsigned.key 2048
{myselfsigned}.key可按照自己需求換成需要的檔案名稱。
B-2. 建立self signed certificate(*.cer):
openssl req -new -x509 -key myselfsigned.key -out myselfsigned.cer -days 365 -subj /CN=www.mysite.com
{myselfigned}.key與{myselfigned}.cer可按照需求修改。需要注意:CN給值的部分,上述範例給予的是domain name,
如果您本身要當Ad-Hoc的主機沒有domain name只有ip address的話,則需要輸入為ip address。
B-3. 搭配private key file與self signed certificate建立IIS安裝憑證需要的*.pfx:
完成了B-1,B-2的指令後會產生*.key與*.cer二個檔案,接下來需依賴這二個檔案建立*.pfx檔案。
openssl pkcs12 -export -out myselfsigned.pfx -inkey myselfsigned.key -in myselfsigned.cer
挑配pcks12機制建立*.pfx檔案,在建立過程會需要加入密碼,可按照需求來輸入。
C. 安裝建立好的*.pfx至當Ad-Hoc的IIS:
C-1. 安裝*.pfx:
開啟IIS選擇「伺服器憑證」:
選擇「匯入」,將*.pfx安裝至IIS:
安裝完成後,如下圖:
安裝完成後名稱會是空白的,但是不打緊因為這個不是iOS設備驗證的條件。
C-2. 設定IIS開啟SSL通訊協定與對應的憑證:
選擇IIS站台的「繫結」,設定SSL通訊協定並選擇以剛才建立的SSL憑證為主:
C-3. 開放防火牆例外:
D. 寄送*.cer給需要透過Ad-Hoc的設備,並且安裝*.cer至設備中:
透過mail的方式寄送,需要搭配iPhone/iPad內鍵的郵件App來加以安裝,如下圖:
在預設的Mail應用程式裡可以直接點擊該*.cer憑證,系統會自動跳至「settings->general->profiles」
提示您是否安裝憑證,這個時候記得選擇安裝,就可以看到如下圖您的憑證變成了「Trusted」。
要記得如果您的Ad-hoc主機是沒有domain name的,請記得把CN設定為IP Address。
E. 重新建立*.ipa需要的憑證,並包裝至*.ipa中:
透過XCode的工具重新包裝*.ipa需要的憑證,選擇最新續約的憑證來加以建立,另外記得勾選可安裝App的設備ID,
如下圖:
這樣就可以重新建立*.ipa與*.plist檔案,也要記得把*.plist中給予*.ipa的URL改用https的通訊方式。
完成以上A~E的部分,iPhone/iPad就可以透過Safari連結到IIS主機所建立的Ad-Hoc架構來安裝Apps。
目前測試下來是可以正常讓設備安裝的,如果有遇到任何補充的情況會在下方加以補充。
[補充]
1. 如果您照上述安裝完成後,App無法被下載的話,可以看一下提供下載的網站是否選擇了SSL驗證。
例如:IIS有一個網站:A,您的*.plist/*.ipa放在A網站時,A網站則需要開啟「SSL設定」來開啟SSL使用。
======
以上是分享如何在IIS建立/安裝SSL憑證,以支援Ad-Hoc的架構讓iPhone/iPad在升級至iOS 7.1之後,可以正常使用。
非常感謝yoyo與其他Blogger的指導與建議,謝謝。
References:
‧Five Tips for Using Self Signed SSL Certificates with iOS (重要)
‧以 Ad-Hoc 方式測試軟體 iOS 7.1 裝置需要使用具 SSL 憑證的伺服器
‧iOS7.1にしたらAdhocのOTAインストールできなくなって困った。
‧【SSL証明書タダ】iOS7.1からAdhocアプリのOTAインストールでSSL証明書が必要になったのでGlobalSignの無償提供に食いついてみたよ
‧Generating a Certificate Request File Using the Certificate Wizard in IIS 5.0
‧Create PKCS#12 file with self-signed certificate via OpenSSL in Windows for my Android App
‧Enterprise app deployment doesn't work on iOS 7.1 (重要)
‧以 Ad-Hoc 方式測試軟體 iOS 7.1 裝置需要使用具 SSL 憑證的伺服器 (重要)