iOS7.1企业应用"无法安装应用程序 因为证书无效"的解决方案

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 2003Windows server2008

2JDKjdk 1.6

3apache-tomcat-6.0.35(注意版本号,版本6.0.18测试未通过)

4)网络:互联网、专网测试均通过。

2、使用到的软件、jar包

1Win32OpenSSL_Light-1_0_1g.exe(将bin目录设置到path环境变量中,需在命令提示符窗口使用openssl等命令)

2jdeclipse_update_site_uncomplie_vcredist_x86.exeOpenSSL提醒环境不支持时,安装)

3jetty-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 NameorganizationName以外可以为空,Common Name必须为服务器的ip或域名(内外网区分) organizationName必须和上一次一致):

openssl req  -new -x509 -days 365 -key ca.key -out ca.crt

5. 在当前目录创建demoCA,里面创建文件index.txtserialserial内容为01index.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"/>

注意:keystoreFilekeystorePass为文件生成的位置生成证书时输入的密码。

添加之后效果:

2)工程配置(文件夹中有例子)

iOS7.1企业应用"无法安装应用程序 因为证书无效"的解决方案

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

证书下载:hreftomcat工程访问地址。

 

5、终端安装证书和软件

终端在浏览器地址栏里输入tomcat工程访问地址(使用自带Safari浏览器):

IOS7.1版本的,先安装证书、再点击客户端安装即可。

 

6、注意点

(1)openssl环境变量和jetty-5.1.10.jar位置

2tomcat版本号

3)生成的证书所在位置、需在tomcatserver.xml中配置

4)证书中的ip地址或域名,若ip地址更改,则证书重新生成。

5)证书生成时,密码要记住。

6index.html中的.plist文件的地址,采用https协议及端口。

7index.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文件上传。

 

如图:

 

iOS7.1企业应用"无法安装应用程序 因为证书无效"的解决方案

 

文件上传后,可以通过如下地址访问到自己的plist文件。

 

https://[your app name].sinaapp.com/[your plist file name].plist

 

也可以用百度网盘

 

 

你可能感兴趣的:(企业应用)