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

  • 相关阅读:
    黑马程序员面向对象09天1
    一键安装LNMP
    多屏互动技术
    阿里云CentOS 64位解决kernel2.6.32220.13.1.el6.x86_64 has missing requires错误
    listview的onItemClickListener失效
    在阿里云主机上基于CentOS用vsftpd搭建FTP服务器(赚)
    asp.net关于在线支付的实现过程
    C#关闭登录窗体,显示主窗体
    winform 刷新父窗体(转)
    用代码生成器生成的DAL数据访问操作类 基本满足需求了
  • 原文地址:https://www.cnblogs.com/sayimba/p/13576001.html
Copyright © 2011-2022 走看看