美文网首页持续集成CI我爱编程oc开发
Mac apache本地配置ssl证书 及 iOS OTA部署

Mac apache本地配置ssl证书 及 iOS OTA部署

作者: XPorter | 来源:发表于2016-08-08 17:14 被阅读1816次

    如果要实现iOS的 OAT分发,现在必须通过https才能实现,于是自己闲来无事自己研究了一下。
    首先第一步需要一个https的服务,Mac自带的apache可以很简单的是实现http的服务。对于https需要做的就是开启ssl功能就行了。

    一、生成ssl证书

    1、创建文件夹

    为了文件的整洁,先创建一个文件夹来存放ssl相关的文件,手动创建或者命令行创建都可以。
    路径也随便,只要找到就可以,不过一般会放在/private/etc/apache2/下,也建议放在这个文件目录下,便于管理。

    sudo mkdir /private/etc/apache2/ssl
    cd /private/etc/apache2/ssl
    
    2、生成密钥对

    通过openssl生成密钥对

    sudo ssh-keygen -f server.key
    
    3、生成证书请求文件

    在设置信息的时候要注意 Common Name 一定要对应服务器地址

    sudo openssl req -new -key server.key -out request.csr
    
    生成证书请求文件
    3、生成ssl证书(有效期为一年)
    sudo openssl x509 -req -days 365 -in request.csr -signkey server.key -out server.crt
    

    目前为止生成的ssl证书已经生成完毕,剩下的就是给apache配置ssl。

    二、配置apache

    配置ssl之前,先确保apache能够正常的访问使用
    配置apache的文件是在一个隐藏的文件夹下,可以通过finder前往或者通过命令行直接打开

    open /private/etc/apache2/
    
    1、httpd.conf

    打开 /private/etc/apache2/httpd.conf 文件,查找以下配置,去掉前面的 "#",

    LoadModule ssl_module libexec/apache2/mod_ssl.so
    Include /private/etc/apache2/extra/httpd-ssl.conf
    Include/private/etc/apache2/extra/httpd-vhosts.conf
    
    2、httpd-ssl.conf

    打开 /private/etc/apache2/extra/httpd-ssl.conf 文件
    配置ssl证书和密钥的路径

    SSLCertificateFile "/private/etc/apache2/ssl/server.crt"
    SSLCertificateKeyFile "/private/etc/apache2/ssl/server.key"
    
    3、httpd-vhosts.conf

    打开 /private/etc/apache2/extra/httpd-vhosts.conf 文件
    在文件的最后面添加以下信息

    <VirtualHost *:443>
      SSLEngine on
      SSLCertificateFile /private/etc/apache2/ssl/server.crt
      SSLCertificateKeyFile /private/etc/apache2/ssl/server.key
      ServerName localhost
      DocumentRoot "这里填写文件的存储路径"
    </VirtualHost>
    
    
    **ServerName 服务地址 **
    **DocumentRoot一般apache的文件都在/Library/WebServer/Documents/**
    
    5、验证配置
    sudo apachectl configtest
    

    如果有以下错误

    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?).
    

    可根据提示进行修改,找到 /private/etc/apache2/extra/httpd-ssl.conf 的92行。

    去掉对应行的注释

    LoadModule socache_shmcb_module modules/mod_socache_shmcb.so 
    
    6、启动或重启apache
    sudo apachectl restart
    

    现在就可以通过https访问apache服务了,不过由于是自签名的会有安全警告,手动设置信任就行了。

    三、OTA部署

    在打包的过程中,到下面这步的时候,如果勾选下图的选择框会引导生成OTA所需要的plist文件

    勾选选择框

    点击next之后会出现如下界面,进行相关信息的填写,下面的四项都是必填项


    填写信息

    对于图片有的可能会不需要,并且在plist 文件中没有图片也不影响功能的实现,所以随便就可以,这些信息后期都可以通过修改plist文件来改变。

    利用Xcode自动生成的好处就是省去了自己构建plist结构的过程,如果你已经有现成的plist文件就不用勾选第一幅图的选择框,只用修改相应的内容就可以了。

    plist 文件内容
    1. bundle-identifier: 对应ipa 的 bundle identifier
    2. bundle-version: 对应ipa 的 version
    3. kind :software
    4. title :安装包的名字

    现在我们已经有了https的服务器、ipa安装包和plist文件,OTA所需要的东西已经齐全,剩下的就是将ipa和plist文件方法到服务端,提供下载安装。

    apache服务的默认文件位置在/Library/WebServer/Documents/,可以创建一个文件来放置OTA所需的文件

    文件目录

    index.html的内容,两个连接,一个下载安装包,一个现在ssl的证书

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8" mime-types="text/plain">
        <title></title>
      </head>
      <body>
        <a classstyle="display:block" href="itms-services://?action=download-manifest&url=https://192.168.0.129/OTA/manifest.plist">下载ipa</a>
        <a style="display:block" href="https://192.168.0.129/OTA/ssl/server.crt">下载证书</a>
      </body>
    </html>
    
    

    点击"下载ipa",不出意外的话就会出现下面的界面,点击安装就ok了。

    安装提示

    <h2>总结一下遇到的坑</h2>
    最大的坑就是在生成证书请求文件时,没注意到 Common Name 的设置,以至于后面点击下载的时候一直提示连接失败,找了好久才找到这个问题。


    相关文章

      网友评论

      • Winter_Chen:很有帮助,谢谢
      • 跑步的李磊:楼主 证书已经安装,但是下载ipa时 报 无法连接到 ‘’p‘ ?遇到过吗?
        XPorter:看第一条留言
      • hwreal:你好,请问第三步中 ServerName 是localhost?还是写服务器的IP? 第五步中,出现错误后 修改“apache/conf/httpd.conf” 这个文件?但是没有这个路径啊,只有apahce2。请楼主回答,谢谢。另外,我的在第五步中出现: AH00112: Warning: DocumentRoot [/usr/docs/dummy-host.example.com] does not exist
        AH00112: Warning: DocumentRoot [/usr/docs/dummy-host2.example.com] does not exist
        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?). 这些错误,怎么解决啊?
        XPorter:ServerName 是服务器的地址。至于这些错误,可以根据提示改一下。

        “apache/conf/httpd.conf”这个路径应该是我写错了
      • iOS___Android:说无法连接到*.*.*.* ip ,用浏览器可以下载plist ,有没有遇到过?
        XPorter:@iOS___Android 我在搞的时候就出现了个连接失败的问题,因为就是那个ip设置的不对,反正就是所有牵扯到ip的地方都应该是一致的,ipa的地址,plist的地址,证书设置的ip,本机局域网ip,这些地方都检查一下。
        iOS___Android:@黑白灰_ common name 就填了局域网的ip地址,也在局域网访问的
        XPorter:生成证书的时候,配置的地址跟你本机的地址是不是一致的?

      本文标题:Mac apache本地配置ssl证书 及 iOS OTA部署

      本文链接:https://www.haomeiwen.com/subject/cpcrsttx.html