區域網通過 itms-services(https) 安裝企業級 ios 應用
由於iOS13.1要安裝企業應用,url必須是https的,不能是http,這就要求我們的伺服器要支援https:
itms-services://?action=download-manifest&url=https://example.com/manifest.plist
完成以下操作,即可通過自己的Mac筆記本構建區域網用於下載測試(同一個區域網或者VPN網路下)
注意:正式打包出來的企業ipa包,萬萬不可放到第三方公網測試網站當成釋出的伺服器,比如:蒲公英,會導致蘋果封號。
實現(Mac):
1、支援https;
2、自建信任證書;
一、配置https
Mac OS X 自帶了Apache環境,啟動之後,相當於web伺服器(外部可以訪問到,讀取plist檔案和ipa包),可以通過在終端(terminal)輸入 httpd -v 來檢視Apache的版本資訊:
$ httpd -v Server version: Apache/2.4.41 (Unix) Server built: Feb 29 2020 02:40:57
啟動Apache
在終端輸入
sudo apachectl start
就可以啟動Apache。
啟動後,在瀏覽器中輸入 http://127.0.0.1或http://localhost 如果看到 It Works! 頁面,那就說明啟動成功了。
測試一下本地ip網路https的連結狀態:
先檢視本地網路的ip地址,然後在瀏覽器開啟
如果本地不支援https,那就需要配置了。
Apache 啟動成功後,站點的根目錄為系統級根目錄:
/Library/WebServer/Documents 停止Apache: sudo apachectl stop 重啟Apache: sudo apachectl restart
開始配置 SSL
1、編輯 /etc/apache2/httpd.conf 檔案,刪除下列程式碼前的註釋符號 #:
LoadModule ssl_module libexec/apache2/mod_ssl.so Include /private/etc/apache2/extra/httpd-ssl.conf
2、備份檔案,只需要執行一次:
sudo cp httpd-ssl.conf httpd-ssl.conf.bak
如果操作出現錯誤,可以使用命令,恢復備份的httpd-ssl.conf 檔案:
sudo cp httpd-ssl.conf.bak httpd-ssl.conf.conf
編輯 /etc/apache2/extra/httpd-ssl.conf 檔案,新增 <VirtualHost>,httpd-ssl.conf 中已經有一條 <VirtualHost> 記錄,我們將其註釋掉,新建一條:
<VirtualHost *:443> #General setup for the virtual host DocumentRoot "/Library/WebServer/Documents" ServerName 192.168.2.11 //一會建立證書需要用到,填寫本地網路ip地址 #SSL Engine Switch: SSLEngine on #Server Certificate: //一會建立的證書的名字,填寫相應的名字即可 SSLCertificateFile "/etc/apache2/ssl/ca.crt" #Server Private Key: //一會建立的證書的名字,填寫相應的名字即可 SSLCertificateKeyFile "/etc/apache2/ssl/server.key" #SSL Engine Options: <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory "/Library/WebServer/CGI-Executables"> SSLOptions +StdEnvVars </Directory> </VirtualHost>
3、檢查配置檔案並重啟 Apache,命令列輸入 :
$ sudo apachectl -t
可能會提示:
AH00526: Syntax error on line 92 of /private/etc/apache2/extra/httpd-ssl.conf: SSLSessionCache: 'shmcb' session cache not supported (known names: ). Maybe you need to load the appropriate socache module (mod_socache_shmcb?).
根據提示,編輯 /etc/apache2/httpd.conf 檔案,刪除下列這些程式碼前的註釋符號 #
LoadModule socache_shmcb_module libexec/apache2/mod_socache_shmcb.so
4、再次測試,顯示 Syntax OK:
sudo apachectl -t
Syntax OK
5、說明測試通過,重啟 Apache:
sudo apachectl restart
網頁出現It works!,說明https通過
二、生成 Apache 伺服器 Https 服務用的自簽名證書
iOS7.1 以後, Apple 不再支援 HTTP 方式的 OTA ,所以需要為 Apache 開啟 HTTPS 服務,並利用 OpenSSL 製作自簽名證書。
證書建立完之後是這個樣子的:
建立證書的步驟:
1、生成伺服器私鑰 server.key
sudo mkdir /private/etc/apache2/ssl cd /private/etc/apache2/ssl sudo openssl genrsa -out server.key 1024
2、生成簽署申請
sudo openssl req -new -key server.key -out server.csr
注意:需要完整填寫各項資訊,注意Common Name必須是伺服器 ip 或域名,其他資訊可以隨意填寫。例如我需要把 ipa 安裝包放在192.168.2.11 的內網伺服器上,則Common Name就填寫192.168.2.11 。如果這一步漏填資訊,可能會導致最後生成的 ca 檔案是空的。
3、生成 CA 私鑰ca.crt
sudo openssl req -new -x509 -days 365 -key server.key -out ca.crt
填寫資訊和上面的填寫的一樣即可,注意Common Name必須填寫,這裡還是填寫192.168.2.11即可。
4、建立檔案和資料夾
在 ssl 目錄下建立 demoCA 資料夾,然後進入 demoCA ,建立一個 index.txt 和 serial檔案,index.txt 為空, serial 內容為01,然後在 demoCA 中再建立一個空資料夾 newcerts
sudo mkdir demoCA && cd demoCA
sudo mkdir newcerts
sudo touch index.txt
sudo touch serial
使用 Xcode 或者 vim 編輯 serial 檔案,第一行寫入 01 儲存即可。
5、簽名生成server.crt
執行命令,返回到ssl資料夾下面
cd /private/etc/apache2/ssl
然後執行命令,用ca進行簽名生成server.crt
sudo openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile server.key
這一步可能會報如下錯誤
Using configuration from /private/etc/ssl/openssl.cnf variable lookup failed for ca::default_ca140736040362952: error:0E06D06C:configuration file routines:NCONF_get_string: no value:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/ libressl-22.50.2/libressl/crypto/conf/conf_lib.c:323:group=ca name=default_ca
這是由於/private/etc/ssl/資料夾下缺少 openssl.cnf 的問題,解決辦法是拷貝一份,輸入命令
cp /usr/local/etc/openssl/openssl.cnf /private/etc/ssl/openssl.cnf
使用Xcode或者vim修改/private/etc/ssl/openssl.cnf檔案,這裡使用vim直接修改
sudo vim /private/etc/ssl/openssl.cnf
dir = ./demoCA # Where everything is kept 修改為當前你的demoCA路徑 dir = /private/etc/apache2/ssl/demoCA
6、修改完成後再執行命令
sudo openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile server.key
7、會提示有效期和生成證書,都輸入y即可。
Certificate is to be certified until Nov 10 06:39:36 2019 GMT (365 days) Sign the certificate? [y/n]:y (翻譯)證書有效期至11月10日06:39:36 2019 GMT(365天) 1 out of 1 certificate requests certified, commit? [y/n]y 簽署的證書嗎? (翻譯)1 / 1的證書請求被認證,提交?
8、此時我們看到 HTTPS 證書已經生成完成。
三、放置資原始檔
進入web伺服器:
cd /Library/WebServer/Documents
放置如下:
ipa:xcode打出來的包;
ca.crt:上面建立的自簽證書;
icon57:57*57尺寸的圖示;
icon512:512*512尺寸的圖示;
manifest.plist:xcode打出來的檔案之一;
格式:
第一個url:http://192.168.2.11/web/App.ipa 必須對應web伺服器裡面ipa存放的路徑
檢測:在瀏覽器輸入,可下載ipa即為成功;
http://192.168.2.11/web/App.ipa
index.html:蘋果手機首次安裝ipa包,必須先下載安裝 ca.crt 證書,然後再點選安裝 ipa。 url 中必須填寫 https 開頭的 plist 檔案下載地址,plist 檔案中對應 ipa 檔案的下載地址。
<html> <head> <meta name="viewport"content="width=device-width, initial-scale=1.0, minimum-scale=0.5, maximum-scale=2.0, user-scalable=yes"/> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <h4>手機首次下載請先"點選安裝SSL證書",並根據提示安裝信任證書</h4> 在 iOS 10.3 及更高版本中,手動安裝包含證書有效負載的描述檔案時,這個證書不會自動受 SSL 信任。 當安裝通過電子郵件傳送或從網站下載的描述檔案時,您必須手動開啟受 SSL 信任。 要為這個證書開啟受 SSL 信任,請前往“設定”>“通用”>“關於本機”>“證書信任設定”。在“針對根證書啟用完全信任”下,開啟信任這個證書。 <a title="iPhone" href="http://192.168.2.11/web/ca.crt">?點選安裝SSL證書?</a> <hr> <a href="itms-services://?action=download-manifest&url=https://192.168.2.11/web/manifest.plist" class="app_link">?點選安裝版本?</a> <hr> </body> </html>
檢查:在瀏覽器輸入以下網址,看能否下載ca.crt和顯示manifest.plist內容,如果都可以,說明沒問題。
https://192.168.2.11/web/manifest.plist http://192.168.2.11/web/ca.crt
四、設定證書信任
如果下載 ipa 時出現無法連線到192.168.*.*的錯誤,則需要手動設定信任。
iOS7.0 以後必須使用 HTTPS 進行,iOS 10 之前的裝置,直接安裝自簽名根證書後就可以安裝 iOS 應用,但是在 iOS 10.3 以上的裝置上,安裝後還需要到“關於本機”那裡手動開啟信任。