使用自签名证书内部分发 iOS7 应用
使用自签名证书内部分发 iOS7 应用
iOS 升级到 7.1 之后, 原来通过网页分发应用的方法出现错误, 提示 “无法安装应用, 服务器证书无效”, 原来 iOS 要求必需将 plist 文件放到 https 服务器上 (对 ipa 文件无要求), 在 StackOverFlow 上有网友将 plist 文件放到 dropbox 或者 skydrive 上的方法, 国内也可以将 plist 文件放到 SAE (Sina App Engine) 上面经测试是可行的。 不过如果是通过内网分发 iOS 应用的话, 修改起来还是挺麻烦的, 最好还是使用自签名的证书实现 https 链接, 这样对内网分发应用方式的修改最小。
使用 OpenSSL 创建自签名的CA根证书
使用 OpenSSL 创建 CA 根证书是很方便的, 只需要输入下面的几个命令即可:
# 创建 CA 私钥
openssl genrsa -out ca.key 1024
# 创建 CA 根证书, 30 年比较省心
openssl req -x509 -new -key ca.key -out ca.cer -days 10950
安装 CA 根证书
由于上面创建的 CA 根证书是自签名的, 需要手工在 iOS 设备以及分发服务器上安装。
iOS 安装 CA 证书
在 iOS 上安装 CA 证书很很容易的, 如果在 iOS 设备上配置了邮件, 只要把证书作为附件发送过去, 在 iOS 设备上收到邮件后点击下载附件, 按照提示进行安装就可以了。
当然, 也可以在服务器上向证书的链接上添加 Http 头 Content-Composition
, 对应的值为 attachment: filename=ca.cer
, 强制浏览器下载 cer 文件 (在 IIS服务器下浏览器会直接以文本的形式打开证书), 下载完成之后按照提示进行安装就可以了。
证书安装之后可以在 “设置” -> “通用” -> “描述文件” 下看到, 不用的话可以从这里删除。
服务器上安装 CA 证书
在服务器上双击证书文件, 选择 “安装证书” 按钮, “存储位置” 设置为 “本地计算机” , 然后选择将证书存储为 “受信任的根证书办法机构” , 确定即可。
服务器上安装 HTTPS 证书
用 IIS 管理器创建证书申请
打开 IIS 管理器, 选择要添加 HTTPS 的证书的服务器, 在功能视图的 “IIS” 分组找到并打开 “服务器证书” , 在右边的 “操作” 窗格点击 “创建证书申请” , 证书的 “通用名称” 必需与服务器的完整域名一致, 否则签发的证书无效, 然后点击下一步, 加密方式选择 RSA , 长度选择 1024 , 最后将 “证书申请” 信息保存为 iis.txt 。
使用 OpenSSL 签发 https 证书
输入下面的命令签发服务器证书:
openssl ca -in iis.txt -cert ca.cer -keyfile ca.key -out iis.cer
使用 IIS 管理器导入 https 证书
打开 IIS 管理器, 选择要添加 HTTPS 的证书的服务器, 在功能视图的 “IIS” 分组找到并打开 “服务器证书” , 在右边的 “操作” 窗格点击 “完成证书申请” , 选择证书文件 iis.cer , “好记名称” 可以设置为服务器的完整域名, 证书存储设置为 “个人”, 点击确定按钮完成。
现在在 iOS 设备上通过 https 访问原来的分发应用的网页, 就应该可以下载了。
参考资料:
- bash魔法堂:History用法详解
- 大众点评cat系统的搭建笔记
- 我们只能在安全和隐私之间寻求平衡吗?
- Docker Compose 1.18.0 之服务编排详解
- 让IE7/8使用CSS中first-child和last-child样式属性
- dubbo/dubbox 增加原生thrift及avro支持
- Hadoop(十四)MapReduce原理分析
- dubbox 增加google-gprc/protobuf支持
- 统计02:怎样描绘数据
- ActiveMQ笔记(1):编译、安装、示例代码
- centos ssh终端下高亮显示git分支名
- Django ORM模型:想说爱你不容易
- IE7下元素的 'padding-top' 遇到 'clear' 特性在某些情况下复制到 'padding-bottom'
- IE7下元素的 'padding-top' 遇到 'clear' 特性在某些情况下复制到 'padding-bottom'
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- CloudBase CMS 2.0 焕新升级,从「心」出发!
- 使用MySQL Keyring 的 SECRET类型密钥执行非对称加密
- node egg 实现跨域
- 使用Markdown画流程图
- HBase NotServingRegionException
- Flink SQL 写入 Hive表的性能问题
- 文件系统索引extent 和 bitmap区别
- MySQL的Bugs
- 对复制实施主键约束
- MySQL如何管理客户端的连接?
- 鸿蒙 Ability 讲解(页面生命周期、后台服务、数据访问)
- MySQL如何管理客户端连接?线程池篇
- 让python装饰器不再晦涩难懂
- Android开发3年,九月份面试12家大厂跳槽成功,我有一些面试经验想分享给你们
- MySQL的防火墙功能