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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM