1. 程式人生 > 實用技巧 >區域網通過 itms-services(https) 安裝企業級 ios 應用

區域網通過 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 以上的裝置上,安裝後還需要到“關於本機”那裡手動開啟信任。