`
gkuiyj
  • 浏览: 88074 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

    博客分类:
  • iOS
 
阅读更多

       

背景:ios7.1以后,公司企业app无法下载,提示证书无效。记录解决方法,备忘。

 

iOS7.1发布后,对于iOS企业版内部分发方式上,苹果有了一个较大的调整,原来通过http方式安装应用不再有效,会提示“无法安装应用程序,因为“xxx”的证书无效”。苹果为了提高安全性,要求使用https的方式安装应用,

例如原来连接:

itms-services:///?action=download-manifest&url=http://www.3meb.com:80/ebms2/pkg/down/type/plist/bundleId/com.mmm.sor

现在必须是:

itms-services:///?action=download-manifest&url=https://www.3meb.com:80/ebms2/pkg/down/type/plist/bundleId/com.mmm.sor

要使用https方式的话,服务器必须安装安全证书,目前主要的解决方案:

A、 购买第三方CA认证(需要申请、付费高、审核耗时长)

B、  使用自签名证书,并在手机端安装根证书(使用JDK自带的keytool和OpenSSL可实现,内部推广方便)

C、  将app的plist描述文件放到支持https的第三方云或网盘,ipa安装文件放公司内部网站,用户通过访问第三方网站下载plist文件,用户手机端会根据plist中指定的ipa路径自动安装程序。(第三方云或网盘的稳定性与安全性不佳)

 

2、 目前暂时采用B方案,操作方式如下:

服务器端:

1、  安装JDK1.6,配置环境变量(过程略)

2、  部署jboss(略)

3、  安装OpenSSL,配置环境变量,(因安装OpenSSL需要perl和VS环境来编译,操作繁琐,本人使用mac os x系统自带的OpenSSL生成CA、认证)。

4、  生成证书:

生成keystone,(注册时填写名字与姓氏要与服务器ip或域名相同)

C:\Users\A53WSZZ>keytool -genkey -v -alias testjboss -keyalg RSA -keystore testj

boss.keystore -validity 3650

输入keystore密码:

再次输入新密码:

您的名字与姓氏是什么?

  [Unknown]:  169.8.247.70

您的组织单位名称是什么?

  [Unknown]:  3m

您的组织名称是什么?

  [Unknown]:  it

您所在的城市或区域名称是什么?

  [Unknown]:  sh

您所在的州或省份名称是什么?

  [Unknown]:  shanghai

该单位的两字母国家代码是什么

  [Unknown]:  cn

CN=169.8.247.70, OU=3m, O=it, L=sh, ST=shanghai, C=cn 正确吗?

  [否]:  y

 

正在为以下对象生成 1,024 位 RSA 密钥对和自签名证书 (SHA1withRSA)(有效期为 3,650

 天):

         CN=169.8.247.70, OU=3m, O=it, L=sh, ST=shanghai, C=cn

输入<testjboss>的主密码

        (如果和 keystore 密码相同,按回车):

[正在存储 testjboss.keystore]

 

注:testjboss是别名,3650是从现在开始的有效天数

 

准备生成CA的key

openssl genrsa –out myCA.key 2048

生成CA

openssl req –x509 –new –key myCA.key –out myCA.cer –days 3650 –subj /CN=“169.8.247.51

准备从CA请求认证的请求文件

keytool –certreq –alias testjboss –keystore testjboss.keystore –file server.csr

从CA请求认证

openssl x509 –req –in server.csr –out server.cer –CAkey myCA.key -CA myCA.cer –days 3650 –CAcreateserial –CAserial serial

导入CA根证书到keystore

Keytool –import –trustcacerts –keystore testjboss.keystore –alias root –file myCA.cer

导入认证证书到keystore

Keytool –import –keystore testjboss.keystore –alias jboss –file server.cer

注:(Keytool在windows生成,openssl在mac系统生成)证书等文件生成时未指定路径,默认生成在当前系统账号文件夹下,如:C:\Users\A53WS\

 

证书生成完毕后,在服务器端安装根证书myCA.cer和server.cer(双击安装,选择证书存储:受信任的第三方颁发机构)

 

5、  修改jboss配置文件(tomcat类似)

将上面生成的testjboss.keystore文件拷贝到\jboss-5.1.0.GA\server\default\conf目录下,

修改\jboss-5.1.0.GA\server\default\deploy\jbossweb.sar\server.xml文件,打开jboss自带的SSL配置,设置keystoreFile和keystorepass(此密码为keystore生成时输入的密码)

<!-- SSL/TLS Connector configuration using the admin devl guide keystore -->

      <Connector protocol="HTTP/1.1" SSLEnabled="true"

           port="8443" address="169.8.247.70"

           scheme="https" secure="true" clientAuth="false"

           keystoreFile="${jboss.server.home.dir}/conf/testjboss.keystore"

           keystorePass="a53wszz" sslProtocol = "TLS" />

 

 

 

用户手机端:

通过邮件附件等形式将根证书myCA.cer分发到手机端,点击证书安装,系统会跳转到‘安装描述文件’页面,点击安装,安装成功后会显示为 可信 ,表示证书安装成功。此时可通过Safari浏览器访问网址并下载app。

 

(注意:不要在浏览器safari中选择接受自签名证书。在Safari浏览器中第一次打开网址时,系统会弹出提示:1、继续(or接受),2、查看证书信息,3、取消。 如果在Safari中选择‘接受’将导致Safari把该站点添加到SSL例外队列中,导致该证书无法安装位ios可信任的证书,且该例外无法删除。---来自网络,未测试)

 

 

 

 

 

补充:

打开C:\jboss-5.1.0.GA\server\default\deployers\jbossweb.deployer\web.xml文件,加上:

<security-constraint> <web-resource-collection> <web-resource-name>SSLHtmlAdaptor</web-resource-name> <description> An example security config that only allows users with the role JBossAdmin to access the HTML JMX console web application </description> <url-pattern>/</url-pattern> </web-resource-collection> <user-data-constraint> <description>Protection should be CONFIDENTIAL</description> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>开启jboss的SSL功能。

 

注:加在此处是对jboss下所有的项目生效,若想只对某个项目生效,则只对指定项目的web.xml文件中加入上述配置信息即可;

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics