http://download.csdn.net/download/accps115202/7136935
http://www.cocoachina.com/bbs/read.php?tid=213861
iOS7.1后,增加了安全性,使用https的方式安装app。
处理方法可以将之前的http改成https,如下所示:
itms-services://?action=download-manifest&url=http://...
改为
itms-services://?action=download-manifest&url=https://...
使用https方式的话,有几种方式处理:
1、安装一个自签名/购买的证书。
https服务器配置:
1、环境
(1)操作系统:Windows server 2003、Windows server2008
(2)JDK:jdk 1.6
(3)apache-tomcat-6.0.35(注意版本号,版本6.0.18测试未通过)
(4)网络:互联网、专网测试均通过。
2、使用到的软件、jar包
(1)Win32OpenSSL_Light-1_0_1g.exe(将bin目录设置到path环境变量中,需在命令提示符窗口使用openssl等命令)
(2)jdeclipse_update_site_uncomplie_vcredist_x86.exe(OpenSSL提醒环境不支持时,安装)
(3)jetty-5.1.10.jar(放在证书所在的文件夹中)
3、服务器端、客户端证书生成步骤
以下命令在命令提示符窗口中执行。(路径:证书所在文件夹路径)
1.生成服务器的私钥:
openssl genrsa -out server.key 1024
2.生成签署申请(注意除Common Name以外可以为空,Common Name必须为服务器的ip或域名):
openssl req -new -out server.csr -key server.key
3.生成CA私钥
openssl genrsa -out ca.key 1024
4.利用CA的私钥产生CA的自签署证书(注意除Common Name和organizationName以外可以为空,Common Name必须为服务器的ip或域名(内外网区分), organizationName必须和上一次一致):
openssl req -new -x509 -days 365 -key ca.key -out ca.crt
5. 在当前目录创建demoCA,里面创建文件index.txt和serial,serial内容为01,index.txt为空,以及文件夹newcerts。
CA为网站服务器签署证书:
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key
6.把服务端代码转换浏览器可以识别的PCS12格式,密码使用上面输入的密码。
openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12
7.使用jetty中的PKCS12Import工具类完成转换,密码同上.(jetty-5.1.10.jar在当前文件夹中)
java -cp jetty-5.1.10.jar org.mortbay.util.PKCS12Import server.p12 server.jks
8.使用下面命令查看jks文件中包含的证书信息
keytool -v -list -keystore server.jks
至此客户端证书ca.crt以及tomcat服务器证书server.jks已经生成完毕。
4、tomcat工程配置
(1)配置服务器端证书
打开tomcat安装目录下的conf/server.xml
加入以下内容
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="/Users/wrs/Documents/study/apache-tomcat-7.0.54/webapps/***/server.p12" keystorePass="123456" keystoreType="PKCS12" truststoreFile="/Users/wrs/Documents/study/apache-tomcat-7.0.54/webapps/****/server.jks" truststorePass="123456" truststoreType="JKS"/> |
注意:keystoreFile、keystorePass为文件生成的位置和生成证书时输入的密码。 |
添加之后效果:
(2)工程配置(文件夹中有例子)
yjoa.jpa:打包生成的软件安装文件。
yjoa.plist:配置文件
url修改为该tomcat工程访问地址。
bundle-identifier为版本的签名信息,与打版本时的签名保持一致。
index.html文件:访问页面。
客户端下载:href的前半部分“itms-services://?action=download-manifest&url=”为固定写法,url之后的更改,https:// + ip + 端口 +工程名 + jj.plist。
注意:是https不是 http。端口为https的端口不是tomcat工程端口,上面设置的是8443。
证书下载:href为tomcat工程访问地址。
5、终端安装证书和软件
终端在浏览器地址栏里输入tomcat工程访问地址(使用自带Safari浏览器):
IOS7.1版本的,先安装证书、再点击客户端安装即可。
6、注意点
(1)openssl环境变量和jetty-5.1.10.jar位置
(2)tomcat版本号
(3)生成的证书所在位置、需在tomcat的server.xml中配置
(4)证书中的ip地址或域名,若ip地址更改,则证书重新生成。
(5)证书生成时,密码要记住。
(6)index.html中的.plist文件的地址,采用https协议及端口。
(7)index.html中的证书位置和.plist文件中的安装包位置均采用tomcat工程路径。
download.html:
<html>
<head>
<title>iOS online install</title>
<meta http-equiv="Content-Type" content="text/HTML; charset=utf-8">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
</head>
<body>
<script type="text/javascript">
function doLocation(url)
{
var a = document.createElement("a");
if(!a.click) {
window.location = url;
return;
}
a.setAttribute("href", url);
a.style.display = "none";
document.body.appendChild(a);
a.click();
}
var useHttps = false;
var key = "OS";
var userAgent = navigator.userAgent;
var idx = userAgent.indexOf(key);
if(idx!= -1) {
var version = userAgent.substr(idx+key.length + 1, 3)
if(version >= "7_1") {
useHttps = true;
}
}
if(useHttps) {
doLocation('http://**********/download-ios7.html');
} else {
doLocation('itms-services://?action=download-manifest&url=http://**********/******.plist');
}
</script>
</body>
</html>
download-ios7.html:
<html>
<head>
<title>iOS online install</title>
<meta http-equiv="Content-Type" content="text/HTML; charset=utf-8">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
</head>
<body>
注意:如果系统是ios7.1,请先安装证书再安装app。
请点击以下链接完成证书的安装
<center>
<br><br>
【<a href="http://*******/******.crt">iphone证书安装</a>】
<br><br>
请点击以下链接完成iphone版的安装<br><br>
【<a href="itms-services://?action=download-manifest&url=https://****/*******.plist">ipa下载安装</a>】
</center>
</body>
</html>
2、部署到dropbox。(http://stackoverflow.com/questions/20276907/enterprise-app-deployment-doesnt-work-on-ios-7-1/22325916#22325916)
如果dropbox访问不了,对于墙内的我们,可以使用国内的服务是最有保障的了。机缘巧合之下,发现了新浪的sae可以提供https的服务。而且也是免费的。
其实机制是利用SAE提供的代码托管服务,将plist文件上传到SAE代码服务器,使用其提供的https服务。
新浪SAE地址:http://sae.sina.com.cn/
使用SAE需要先注册账号或者用已有的微博账号登录,登录后新建一个应用。
创建应用后,在“应用管理”下的“代码管理”创建一个代码版本,然后将plist文件上传。
如图:
文件上传后,可以通过如下地址访问到自己的plist文件。
https://[your app name].sinaapp.com/[your plist file name].plist
也可以用百度网盘