局域网通过 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 以上的设备上,安装后还需要到“关于本机”那里手动开启信任。

 

posted @ 2020-09-02 18:11  代码始我快乐  阅读(8536)  评论(0编辑  收藏  举报