天天看點

iOS7.1企業應用"無法安裝應用程式 因為證書無效"的解決方案

今天更新了iOS7.1後發現通過之前的url無法安裝企業應用了,一直提示“無法安裝應用程式 因為http://xxx.xxx.xxx證書無效”,折騰了一番,終于在StackOverFlow上找到了答案。在這裡分享給大家。

StackOverFlow連結:http://stackoverflow.com/questions/20276907/enterprise-app-deployment-doesnt-work-on-ios-7-1/22325916#22325916

原因是由于iOS7.1要安裝企業應用,url必須是https的,不能是http,這就要求我們的伺服器要支援https。是以,隻要将原連結:

[plain]  view plain copy

  1. itms-services://?action=download-manifest&url=http://example.com/manifest.plist  

改為

[plain]  view plain copy

  1. itms-services://?action=download-manifest&url=https://example.com/manifest.plist  

即可。

對于伺服器,則需要增加對https的支援,本人用的是apache伺服器,是以在這裡以windows上的apache伺服器為例:

1. 安裝配有SSL子產品的apache版本,本人使用的是httpd-2.0.65-win32-x86-openssl-0.9.8y

2. 打開apache的配置檔案conf/httpd.conf,去掉以下内容前的#

[plain]  view plain copy

  1. LoadModule ssl_module modules/mod_ssl.so  

并在檔案最後加上:

[plain]  view plain copy

  1. <VirtualHost *:8080>  
  2.     ServerAdmin [email protected](郵箱位址,随意)  
  3.     DocumentRoot D:/Server(伺服器根目錄)  
  4.     ServerName 166.111.81.xxx(伺服器域名或ip位址)  
  5.     ErrorLog logs/test-error_log  
  6.     CustomLog logs/test-access_log common  
  7.     SSLEngine on  
  8.     SSLCertificateFile "D:/Program Files/Apache Group/Apache2/conf/ssl.crt/server.crt"(之後生成證書的完整路徑)  
  9.     SSLCertificateKeyFile "D:/Program Files/Apache Group/Apache2/conf/ssl.key/server.key" (之後生成密鑰的完整路徑)  
  10. </VirtualHost>  

3. 修改conf/ssl.conf檔案的以下内容:(以下為修改完的,大家可以參考下)

[plain]  view plain copy

  1. #SSLSessionCache        none  
  2. #SSLSessionCache        shmht:logs/ssl_scache(512000)  
  3. SSLSessionCache        shmcb:logs/ssl_scache(512000)  
  4. #SSLSessionCache         dbm:logs/ssl_scache  
  5. ...  
  6. SSLCertificateFile conf/ssl.crt/server.crt  
  7. ...  
  8. SSLCertificateKeyFile conf/ssl.key/server.key  

4. 在conf目錄下建立ssl.crt和ssl.key目錄(不建立也行,隻要保證以上兩個路徑和之後的檔案路徑對應即可)

5. 在指令行下切換到apache目錄下的bin目錄,運作以下指令

生成伺服器的私鑰:

[plain]  view plain copy

  1. openssl genrsa -out server.key 1024  

6. 生成簽署申請(注意除Common Name以外可以為空,Common Name必須為伺服器的ip或域名):

[plain]  view plain copy

  1. openssl req -new –out server.csr -key server.key -config ..\conf\openssl.cnf  

7. 生成CA私鑰:

[plain]  view plain copy

  1. openssl genrsa  -out ca.key 1024  

8. 利用CA的私鑰産生CA的自簽署證書(注意除Common Name以外可以為空,Common Name必須為伺服器的ip或域名):

[plain]  view plain copy

  1. openssl req  -new -x509 -days 365 -key ca.key -out ca.crt  -config ..\conf\openssl.cnf  

9. 在目前目錄建立demoCA,裡面建立檔案index.txt和serial,serial内容為01,index.txt為空,以及檔案夾newcerts。

10. CA為網站伺服器簽署證書:

[plain]  view plain copy

  1. openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config ..\conf\openssl.cnf  

11. 最後将server.crt,server.key複制到上文對應的路徑下:

[plain]  view plain copy

  1. conf/ssl.crt/server.crt  
  2. conf/ssl.key/server.key  

12. 重新開機Apache伺服器,即增加了https的支援。可以在浏覽器通路https://localhost試試。如果不行,可以在logs\test-error_log檔案中看看出了什麼錯誤。

13. 最後,我們要将自己建立的CA憑證安裝到iphone上。将第10步生成的ca.crt檔案通過郵件發送到iphone上,用自帶的Mail程式(别的程式不行)打開安裝即可。

14. 現在,再次通路我們之前的itms-services連結,就可以正常安裝了。

這種方法如果大家覺得麻煩的話可以把plist和ipa傳到dropbox上,擷取靜态連結,因為dropbox的伺服器支援https且有第三方釋出的證書,唯一的缺點是國内可能會慢一些。

如果大家覺得對自己有幫助的話,還希望能幫頂一下,謝謝:) 個人部落格: http://blog.csdn.net/zhaoxy2850 本文位址: http://blog.csdn.net/zhaoxy_thu/article/details/21133399 轉載請注明出處,謝謝!