第一步 编辑前的准备

1.1 Mac自带 Apache 服务器

Mac 自带 Apache 服务器,我们在终端输入sudo apachectl -k start打开网页输入localhost,发现网页会显示如下:

It works!

Apache 服务器启动成功。

1.2 修改系统文件前先备份

例如需要修改/etc/apache2文件夹下 http.conf 文件

  1. 切换工作目录下:

cd /etc/apache2

  1. 备份文件,只需要执行一次:

sudo cp httpd.conf httpd.conf.bak

  1. 如果操作出现错误!可以使用命令,恢复备份的 httpd.conf 文件:

sudo cp httpd.conf.bak httpd.conf

1.3 通过 Xcode 或者 vim 修改系统文件

通过 Xcode 修改比较简单,将文件脱出到桌面一份,修改后拖回原来的文件夹覆盖即可。

注意的是,在系统目录下是不可以直接用 Xcode 修改的,可将文件复制到桌面上,用 Xcode 打开修改,然后拖入系统目录下覆盖即可。

通过 vim 修改文件,可直接修改系统文件,修改比较方便。以下修改系统配置文件用到vim,如果不习惯使用vim修改,可使用 Xcode 编辑修改。

1.4 vim 简单操作

  1. 例如当前目录下有一个 httpd.conf 文件,需要修改第 100 行为 abcdef。
  2. 输入命令sudo vim httpd.conf
  3. 鼠标滚动或者按上下键光标移动到第 100 行,按 i 键进入编辑模式 将第 100 行内容删除并替换为 abcdef 。
  4. esc键退出编辑。
  5. 输入:wq退出并保存;如果编辑错误输入:q!不保存文件,强制退出vi。

二、配置Apache服务器Http服务

2.1 创建 web 文件夹

我们在当前用户根目录下新建一个web文件夹,然后放入一些文件,如图所示:

2.2 编辑 http.conf 文件

  1. 切换工作目录下:cd /etc/apache2

  2. 备份文件:sudo cp httpd.conf httpd.conf.bak

  3. 用vim编辑httpd.conf文件:sudo vim httpd.conf

  4. 将下面路径更改为你自己web网页路径(约245行)

DocumentRoot "/Library/WebServer/Documents"
<Directory "/Library/WebServer/Documents”>修改为我当前用户目录下建立的一个 web 文件夹DocumentRoot "/Users/lf/web"
<Directory "/Users/lf/web”>
复制代码
  1. 为了便于浏览 web 文件夹,添加 Indexes 字段
Options FollowSymLinks Multiviews修改为Options Indexes FollowSymLinks Multiviews
复制代码
  1. 将下面的#号注释去掉,开启PHP(约177行)
#LoadModule php7_module libexec/apache2/libphp7.so修改为LoadModule php7_module libexec/apache2/libphp7.so较旧的系统为(#LoadModule php5_module libexec/apache2/libphp5.so)
复制代码
  1. 然后按 ESC 键退出编辑,输入:wq保存退出。

  2. 终端中输入sudo apachectl -k restart重启 Apache 服务器。

  3. 开启 apache 服务器.打开浏览器,搜索框中输入127.0.0.1或者localhost就可以看到我们之前添加的网络资源。

2.3 Apache 常用操作命令

# 启动 apache 服务器
sudo apachectl -k start

# 重新启动 apache 服务器
sudo apachectl -k restart

# 关闭 apache 服务器
sudo apachectl -k stop
复制代码

2.4 重启时报错

重启的时候发现报错,但不影响使用

AH00558: httpd: Could not reliably determine the server's fullyqualified domain name, using LFdeMacBook-Pro.local. Set the'ServerName' directive globally to suppress this message
复制代码

如果想解决此报错,可再次编辑 httpd.conf 文件

sudo vim httpd.conf

将下面的#号注释去掉,并修改(约221行)

#ServerName www.example.com:80修改为ServerName localhost:80
复制代码

然后终端输入下面指令重启即可。

sudo apachectl -k restart
复制代码

三、生成 Apache 服务器 Https 服务用的自签名证书

iOS7.1 以后, Apple 不再支持 HTTP 方式的 OTA ,所以需要为 Apache 开启 HTTPS 服务,并利用 OpenSSL 制作自签名证书。

3.1 生成服务器私钥 server.key

sudo mkdir /private/etc/apache2/ssl cd /private/etc/apache2/sslsudo openssl genrsa -out server.key 1024
复制代码

生成如下所示文件

3.2 生成签署申请

sudo openssl req -new -key server.key -out server.csr
复制代码

注意:需要完整填写各项信息,注意Common Name必须是服务器 ip 或域名,其他信息可以随意填写。例如我需要把 ipa 安装包放在 192.168.1.188 的内网服务器上,则Common Name就填写 192.168.1.188 。如果这一步漏填信息,可能会导致最后生成的 ca 文件是空的。

3.3 生成 CA 私钥ca.crt

sudo openssl req  -new -x509 -days 365 -key server.key -out ca.crt
复制代码

填写信息和上面的填写的一样即可,注意Common Name必须填写,这里还是填写192.168.1.188即可。

3.4 创建文件和文件夹

在 ssl 目录下创建 demoCA 文件夹,然后进入 demoCA ,创建一个 index.txt 和 serial文件,index.txt 为空, serial 内容为01,然后在 demoCA 中再创建一个空文件夹 newcerts

sudo mkdir demoCA && cd demoCAsudo mkdir newcertssudo touch index.txtsudo touch serial
复制代码

使用 Xcode 或者 vim 编辑 serial 文件,第一行写入 01 保存即可。

3.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.cnfvariable 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
复制代码

修改完成后再执行命令

sudo openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile server.key
复制代码

会提示有效期和生成证书,都输入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的证书请求被认证,提交?
复制代码

此时我们看到 HTTPS 证书已经生成完成。

四、配置HTTPS服务

4.1 编辑 httpd.conf 文件

sudo vim /private/etc/apache2/httpd.conf
复制代码

把以下四行代码前头的注释去掉

LoadModule ssl_module libexec/apache2/mod_ssl.soLoadModule socache_shmcb_modulelibexec/apache2/mod_socache_shmcb.soInclude /private/etc/apache2/extra/httpd-ssl.confInclude /private/etc/apache2/extra/httpd-vhosts.conf
复制代码

注意:如果你的 httpd.conf 中缺少了某行,你可以自行添加进去即可。

4.2 编辑 httpd-ssl.conf 文件

编辑前先备份 httpd-ssl.conf 文件

cd /private/etc/apache2/extra/ && sudo cp httpd-ssl.conf httpd-ssl.conf.baksudo vim /private/etc/apache2/extra/httpd-ssl.conf
复制代码

把以下两行代码的注释去掉,并编辑为你的证书路径

SSLCertificateFile "/private/etc/apache2/server.crt"
SSLCertificateKeyFile "/private/etc/apache2/server.key"然后修改路径,改成你的证书文件路径SSLCertificateFile "/private/etc/apache2/ssl/server.crt"
SSLCertificateKeyFile "/private/etc/apache2/ssl/server.key"
复制代码

4.3 编辑 httpd-vhosts.conf 文件

编辑前先备份 httpd-vhosts.conf 文件

cd /private/etc/apache2/extra/ && sudo cp httpd-vhosts.conf httpd-vhosts.conf.baksudo vim /private/etc/apache2/extra/httpd-vhosts.conf
复制代码

将 <VirtualHost *:80> 中的第二个修改

<VirtualHost *:80>ServerAdmin 192.168.1.188DocumentRoot "/Users/lf/web"ServerName 192.168.1.188ErrorLog "/private/var/log/apache2/dummy-host2.example.com-error_log"CustomLog "/private/var/log/apache2/dummy-host2.example.com-access_log" common
</VirtualHost>
复制代码

然后在文件末尾添加 443 端口服务

<VirtualHost *:443> SSLEngine on SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULLSSLCertificateFile /private/etc/apache2/ssl/server.crtSSLCertificateKeyFile /private/etc/apache2/ssl/server.keyServerName 192.168.1.188DocumentRoot "/Users/lf/web"
</VirtualHost>
复制代码

注意:

  • SSLCertificateFile 填写生成的 server.crt
  • SSLCertificateKeyFile 填写生成的 server.key
  • ServerName 填写你的 ip
  • DocumentRoot 填写你的站点路径

4.4 检查 Apache 配置

sudo apachectl configtest
复制代码

如果它提示:Syntax OK,那就完成90%了,如果它提示有错,那就要根据错误提示自行解决了。

我在这个环节遇到了一个错误

SSLSessionCache: 'shmcb' session cachenot supported
(known names: ). Maybe you need toload the appropriate
socache module (mod_socache_shmcb?).
复制代码

解决办法如下:

sudo vim /private/etc/apache2/httpd.conf
复制代码

然后把以下代码的注释去掉

LoadModule socache_shmcb_module libexec/apache2/mod_socache_shmcb.so
复制代码

去掉注释后,保存,重新检查配置,直到成功。

注意: 从网上查找的路径可能是LoadModule socache_shmcb_module modules/mod_socache_shmcb.so, 但我的配置文件中,路径跟上述的不一致,但结尾都是mod_socache_shmcb.so就对了。

解决方案是参考这篇文章的stackoverflow问答。

重启 Apache 服务sudo apachectl -k restart, 这样就可以用 https 访问本地服务器了。

五、放置资源文件

5.1 网站资源文件

如下图所示,在/Users/lf/web文件夹下放置的资源如下:

文件夹名称可任意取,只要在 index.html 和 plist 文件夹中路径对应即可。index.html 不要改名字,默认。

  • ca.crt CA证书,将/private/etc/apache2/ssl/ca.crt拷贝一份到当前 web 文件夹下
  • ipa 文件夹,放置 ipa 资源包
  • plist 文件夹,放置 plist 文件
  • index.html 索引网页,放置链接下载安装证书和ipa
  • images 文件夹,按照 Xcode 要求放置一个 57×57 和 512×512 的 png 图片,还没发现什么用途。

5.2 放置 ipa 包

APP 打包,导出 ipa 包就没必要多说了,可以导出 Ad Hoc 或者 Development 的 ipa 包,将 ipa 放在放在 web 文件夹下 ipa 文件夹中。

5.3 放置plist文件

想在线安装,还需要一个 plist 文件,每个 ipa 包对应一个 plist 文件,将https://192.168.1.188/ipa/LFDev_4.2.1.ipa更改为生成证书时的 ip 或者域名,然后对应 ipa 文件路径即可,例如这里的路经是,在当前 web 文件夹下的 ipa 文件夹中,名称为 LFDev_4.2.1.ipa 的 ipa 文件。

plist 文件格式如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict><key>items</key><array><dict><key>assets</key><array><dict><key>kind</key><string>software-package</string><key>url</key><string>https://192.168.1.188/ipa/LFDev_4.2.1.ipa</string></dict><dict><key>kind</key><string>display-image</string><key>url</key><string>https://192.168.1.188/images/image_57×57.png</string></dict><dict><key>kind</key><string>full-size-image</string><key>url</key><string>https://192.168.1.188/images/image_512×512.png</string></dict></array><key>metadata</key><dict><key>bundle-identifier</key><string>com.xxx.yyy</string><key>bundle-version</key><string>4.2.0</string><key>kind</key><string>software</string><key>title</key><string>Cxx</string></dict></dict></array>
</dict>
</plist>
复制代码
  • bundle-identifier的值com.xxx.yyy更改为你应用的Bundle ID
  • bundle-version的值4.2.0更改为你应用的版本version
  • title的值Cxx更改为你应用的名称,下载时会弹出安装提示此名称

5.4 创建索引下载网页 index.html

/Users/lf/web文件夹下还需要一个 index.html 文件, 手机首次使用 OTA 安装,必须先下载安装 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="https://192.168.1.188/ca.crt">?点击安装SSL证书?</a><hr><a href="itms-services://?action=download-manifest&url=https://192.168.1.188/plist/LFAdHoc_4.2.0.plist" class="app_link">?点击安装4.2.0生产版本?</a><hr><a href="itms-services://?action=download-manifest&url=https://192.168.1.188/plist/LFDev_4.2.1.plist" class="app_link">?点击安装4.2.1开发版本?</a><hr><a href="itms-services://?action=download-manifest&url=https://192.168.1.188/plist/LFVali_4.2.1.plist" class="app_link">?点击安装4.2.1验证版本?</a><hr></body>
</html>
复制代码

如果是想 ipa 放在局域网电脑上面,则将当做打包服务器的电脑 ip 手动设置固定 ip:192.168.1.188,然后手机和电脑连接同一个路由器,iphone 的 Safari 浏览器中输入 192.168.1.188 或者 192.168.1.188/index.html 即可,点击安装 SSL 证书,然后点击安装 ipa 包。

5.5 iOS 10.3 后必须设置证书信任

如果下载 ipa 时出现无法连接到192.168.*.*的错误,则需要手动设置信任。

iOS7.0 以后必须使用 HTTPS 进行,iOS 10 之前的设备,直接安装自签名根证书后就可以安装 iOS 应用,但是在 iOS 10.3 以上的设备上,安装后还需要到“关于本机”那里手动开启信任。

苹果官网提示,在 iOS 中信任手动安装的证书描述文件 support.apple.com/zh-cn/HT204…

在 iOS 10.3 及更高版本中,手动安装包含证书有效负载的描述文件时, 这个证书不会自动受 SSL 信任。 当安装通过电子邮件发送或从网站下载的描述文件时, 您必须手动开启受 SSL 信任。 要为这个证书开启受 SSL 信任, 请前往“设置”>“通用”>“关于本机”>“证书信任设置”。 在“针对根证书启用完全信任”下,开启信任这个证书。

六、参考资料

http://stackoverflow.com/questions/20127138/apache-2-4-configuration-for-ssl-not-working

自建局域网 OTA 服务器相关推荐

  1. 自建OTA服务器实现设备固件自动更新

    自建OTA服务器,终端每次开机比较版本,如有新版本固件则下载更新 一.利用Apache建立http服务器端,在WEB服务器目录下上传新的固件及版本说明json文件 {"ver":2 ...

  2. python自建局域网服务器传输文件

    python自建局域网服务器传输文件 1 python自带HTTP服务器 1.1 查找网络ip 1.2 从打开文件所在路径快速打开命令行/终端 1.3 使用Python自带的http.server 2 ...

  3. 局域网网站服务器dns设置,内网安装配置DNS服务器详解_实现局域网用域名访问...

    内网架设DNS服务器详解 适用环境: 局域网内用IIS建了一个网站,通过ip访问太麻烦,想在内部实现用域名访问 . http://192.168.1.107  是我建在内网的一个站 我们要实现的就是在 ...

  4. 域名反向解析在自建邮件群发服务器中的应用

    2014年,第一篇技术文章,同样是转载的. 自建搭建邮件服务器 ( SMTP 和 POP3 一体的服务器) 用于邮件群发必须解决两个基本问题: ( 1 )域名反向解析问题: ( 2 ) SPF 记录问 ...

  5. 配置树莓派3和局域网NTP服务器实现内网时间校准

    一.配置局域网NTP服务器 1.安装ntp-4.2.8p5-win32-setup.exe 下载地址:https://www.meinbergglobal.com/english/sw/ntp.htm ...

  6. macOS开启内建的TFTP服务器

    macOS开启内建的TFTP服务器 1.开启 TFTP 服务 打开「终端」,执行以下命令(需要管理员密码): sudo launchctl load -w /System/Library/Launch ...

  7. 局域网中服务器群配置ssh免密

    笔者以前配置ssh免密登陆,基本两步就可以了, ssh-keygen删除密钥对, ssh-copy-id公钥复制到远程主机,完成密钥对部署. 但是笔者寻思,在服务器群里面怎么来配置ssh免密呢?生成密 ...

  8. Android真机连接局域网PC服务器的方法

    首先,下载一个wifi共享精灵(或者其他的什么360wifi也可以) 打开后让手机连上对应的wifi,打开你写的后台程序(我这里是用tomcat7部署的),跑起来,然后可以在wifi共享精灵的已连接设 ...

  9. 伤害世界怎么自建服务器,伤害世界服务器怎么建 伤害世界服务器架设教程攻略...

    伤害世界服务器怎么建 伤害世界服务器架设教程攻略.很多玩家还不清楚伤害世界服务器怎么架设,怎么连接,下面99单机网小编给大家带来伤害世界服务器架设教程攻略,希望能帮到大家. 首先准备工作,下载服务端并 ...

最新文章

  1. ISO9000机房管理办法
  2. 在myeclipse当中使用正则表达式去除单行注释
  3. Windows XP和Windows 7双系统安装和启动菜单修复
  4. 不同操作系统的宏定义区分
  5. 单分支 两路分支和多分支的if结构_JavaScript学习笔记(二)-- 分支结构
  6. Gartner预测2019年全球IT支出将达到3.8万亿美元
  7. 上岗乌镇大会安防的智慧警眼“云镜”,是谁家的AR眼镜?
  8. C++基础——对函数模板的类型推导的补充
  9. Dato for Mac(菜单栏时钟工具)支持m1
  10. 数据批量删除_从页面js到后台数据库
  11. PHP分批次处理数据
  12. Visio帮你轻松画出3D效果示意图
  13. Eclipse集成Zxing实现扫一扫功能
  14. 美国小学计算机编程课程,美国小学STEM课程案例研究
  15. Excel定义函数自动填充
  16. 动手学深度学习-加载数据集时报错(d2l.load_data)
  17. 大数据——DBT:数据治理、血缘关系DBT的安装及测试(基础使用篇)
  18. Pandas进阶伍 变形
  19. MEM/MBA数学基础(02)实数运算和性质
  20. 【视觉SLAM】DM-VIO: Delayed Marginalization Visual-Inertial Odometry

热门文章

  1. 家庭组网 光猫+交换机利用VLAN划分实现客厅IPTV机顶盒与上网路由器单线复用(上)
  2. Micropython——关于Pico中I2C和SPI的实际应用示例(OLED屏幕显示)
  3. llvm libLLVMCore源码分析 13 - Other Operators
  4. 数字IC设计工程师笔试面试经典100题
  5. Python 将MP3音频文件转换成MIDI乐谱文件
  6. tmooccn达内登录_达内在线tmooc登陆
  7. 华为nova6计算机历史在哪可以看,写在华为nova6发布前:一文看出nova手机使用芯片的变迁历程...
  8. 利用 python 实现多张图片的无损拼接
  9. 怎样将动图静图拼在一起?教你在线拼接图片
  10. 用Android和IOT检测地震波