##场景
企业应用管理系统,通过管理系统上传IOS应用安装文件(ipa文件),并生成plist文件,实现App的发布;管理系统的iPhone客户端通过请求生成好的plist文件便可安装IOS应用。
##问题
在开发完成后,iPhone客户端只要让Safari浏览器这样访问plist文件,系统便会提示安装应用,但iPhone客户端提示无法连接。
##思路
我们知道在IOS 7.1以上,plist文件的下载地址必须是HTTPS的,所以作为一个Java后台程序猿,自然在网上随便搜了一个证书生成命令,配置好了Tomcat的SSL,便认为一切应该顺利通过。
plist文件的HTTPS访问地址:
经过确认,plist文件格式正确无误。其实,提示无法连接,这显然跟HTTPS有关。
验证HTTPS是否正确配置
如何验证呢?找一个HTTPS配置好并确定可用的服务器,把plist文件放上去不就行了,立马就想到了七牛云存储,谁知道选好文件,提示我“不支持该文件类型,请升级为标准用户”。
然后我就想到了用代码托管网站试试: git.oschina.net
没有的话,注册一个账号,创建一个公开项目,然后在线添加plist文件把文件内容粘贴进来(点 + 添加文件),提交保存,最后打开查看,入下图,点击“原始数据”按钮,可获得该文件的访问链接。
好了,用iPhone的Safari浏览器以安装方式的URL打开,Bingo !!! 终于提示是否安装了,这意味着我本地开发配置的HTTPS是有问题的。
(悄悄的说一句,其实我先尝试了coding.net,安装方式访问plist,仍然提示无法连接,想试的童鞋可以再试试看行不行。)
正确生成证书
HTTPS的问题在哪?除了证书,我想不到别的。
一番搜索,我决定用openSSL来生成证书试试:
- 如果你用的是Windows系统,上网搜一下“openssl for windows”;
- 找到各版本下载列表后,看自己操作系统是32位还是64位下载对应的版本;
- 如果没有安装Visual C++ 2008 Redistributables的情况下安装openSSL会有警告的;
- 不确定的情况下,就先执行openSSL的安装看有没有警告吧。
这些都难不到我们的,安装完了就开始生成证书
先创建文件夹准备存放证书,这里比如是C:\ca\
运行cmd
,先切到openSSL安装目录地下的bin目录:
创建根证书
1、 创建制作根证书的私钥文件myCA.key
|
|
2、创建根证书myCA.cer,机构名称为My Custom CA
####创建自签名SSL证书(叶证书)
1、创建一个私钥server.key
2、创建CSR,服务器ip地址如:192.168.1.113,输出文件为server.req
3、用CSR去创建SSL证书,有效期为100年,输出文件为server.cer,序号文件为server.serial(撤销证书时使用)
4、将.key 和.cer 文件导出为.p12 证书,需要输入两次证书密码。这里我们假设密码为123456。输出文件名为server.p12
5、用keytool将.p12 文件导入到java keystore 中,这里srcstorepass后面的123456为server.p12的密码,deststorepass后的12356为keystore的密码。
####使用SSL证书
打开Tomcat安装目录,修改conf目录下的server.xml
这里设置了HTTPS访问端口为443(默认端口,可不输入),启动Tomcat,访问看是否可用
####iPhone安装证书
将我们生成的C:\ca\myCA.cer
放到Tomcat部署的应用中,供iPhone访问下载
当然,这里可以不用HTTPS的方式访问下载也可以
iPhone打开Safari浏览器访问下载地址,安装好证书,就可以再试试访问plist安装了:
提示是否安装就说明成功了。