前言

最近在做一个服务端和手机端相结合的项目,已接近尾声。

手机最初安装app是通过扫描二维码来下载安装的,这个方式在当下也较为流行。用此方法Android自然是没有问题,但是ios实现起来就没这么简单了。

因为是企业app使用的是企业证书不上appstore,所以只能使用safari来安装,步骤大致如下:

  • 安装证书,这里的证书必须安装,否则在连接下面的xxx.plist文件地址时会提示连不上服务器。
  • 访问xxx.plist文件,一般就是用户看到的安装按钮,地址就像这样:itms-services://?action=download-manifest&url=https://xxx.xxx/download/xxx.plist
  • 具体的安装操作是由xxx.plist文件中描述指定的,当然这步用户不会感觉到。xxx.plist文件ios开发人员会提供这里就不多说了。

我们要做的就是解决前面两步,本来是相当简单的事,但是苹果在ios7之后要求xxx.plist文件的地址必须是https的,这个就是麻烦的所在,因为我们原来没有https环境。

本来想着网上找个开放的https环境,把xxx.plist文件往上一放就解决了事,比如git.oschina.net实测就可以支持,但是领导要求这玩意不能放在别人那里,好吧,只能自己搭建一个了。

首先看了红薯的这篇:5分钟内搞定 Tomcat 的 SSL 配置

看来也挺简单的,按照说明搭建成功,浏览器也访问正常,可ios就是用不了。

后来折腾过才知道原来ios要求安装的证书是ssl的证书,并非ios开发者的证书,可上面的教程中并没有提供给ios安装的证书文件啊,看样子没这么简单搞定了,还是老老实实一步步来吧。

使用openssl生成证书

mac已经自带了openssl可以直接使用,如果没有请自行安装。

创建根证书

1.创建根证书私钥文件

openssl genrsa -out dexcoder.key 2048

2.创建根证书dexcoder.cer,机构名称为Dexcoder CA

openssl req -new -x509 -key dexcoder.key -out dexcoder.cer -days 3650 -subj /CN="Dexcoder CA"

创建自签名的ssl证书

1.创建一个私钥server.key

openssl genrsa -out server.key 2048

2.创建CSR,我这里是本地所以是:localhost,也可以改成IP,输出文件为server.csr

openssl req -new -out server.csr -key server.key -subj /CN=localhost

3.用CSR创建SSL证书,有效期为10年,输出文件为server.cer,序号文件为server.serial(撤销证书时使用)

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

配置nginx

到上面为止,证书就已经生成完成了,如果使用nginx,只需要进行如下配置:

server {
    listen       8443 ssl;
    server_name  localhost;

    ssl_certificate      /Users/liyd/testssl/server.cer;
    ssl_certificate_key  /Users/liyd/testssl/server.key;
}

重启nginx后就可以使用地址:https://localhost:8443 来访问了。

因为是自签名证书而非第三方认证机构签发,所以浏览器会出现以下提示:

ssl警告

但这并不影响我们ios应用的下载,就不管它了。

配置tomcat

上面nginx的配置已经完成了,但因为线上已经有一台tomcat,所以想着能不能并到一起,方便也节省资源。

tomcat要使用上面的证书,还需要做一下加工,因为tomcat使用的一般只有一个.keystore文件。

1 将.key 和.cer 文件导出为.p12 证书,需要输入证书密码。这里密码设为123456。输出文件名为server.p12。

selflydeMacBook-Pro:testssl liyd$ openssl pkcs12 -export -in server.cer -inkey server.key -out server.p12 -name "server"
Enter Export Password:
Verifying - Enter Export Password:
selflydeMacBook-Pro:testssl liyd$

2 用keytool将.p12文件导入到.keystore中,这里srcstorepass后面的123456为server.p12的密码,deststorepass后的12356为.keystore的密码。

selflydeMacBook-Pro:testssl liyd$ keytool -importkeystore -v -srckeystore server.p12 -srcstoretype pkcs12 -srcstorepass 123456 -destkeystore server.keystore -deststoretype jks -deststorepass 123456
已成功导入别名 server 的条目。
已完成导入命令: 1 个条目成功导入, 0 个条目失败或取消
[正在存储server.keystore]
selflydeMacBook-Pro:testssl liyd$

3 使用ssl证书

打开Tomcat安装目录,修改conf目录下的server.xml,增加下面内容,原来注释部分应该有类似标签内容,可以参考:

<Connector SSLEnabled="true" protocol="org.apache.coyote.http11.Http11Protocol"  
            scheme="https" secure="true" sslProtocol="TLS"
            keystoreFile="/Users/liyd/testssl/server.keystore" keystorePass="123456"
            maxThreads="150" port="8443" clientAuth="false" 
            />

这里设置了端口为8443,启动tomcat,打开浏览器访问:https://localhost:8443/ 成功打开tomcat主页,说明服务已经可用。

ios安装证书

上面做了这么多,现在才是我们的最终目的,将dexcoder.cer放到部署的tomcat中,供ios访问下载,例如:

https://localhost:8443/app/dexcoder.cer

这个证书下载不一定要是https的,在安装好证书之后,再访问plist文件安装:

itms-services://?action=download-manifest&url=https://xxx.xxx/download/xxx.plist

这里的xxx.plist文件地址才必须是https。

结束语

到这里我们要的功能就都已经搞定了。不足之处是证书是自签名的,浏览器在访问时会出现安全警告。

如果想要去掉这个警告,可以申请第三方CA机构的证书,这个可以自己网上找找。

以下是摘自网上的一段关于CA机构及证书的说明:

要获取受浏览器信任的证书,则需要到证书提供商处申请。证书授证中心,又叫做CA机构,为每个使用公开密钥的用户发放一个数字证书。浏览器在默认情况下内置了一些CA机构的证书,使得这些机构颁发的证书受到信任。VeriSign即是一个著名的国外CA机构,工行、建行、招行、支付宝、财付通等网站均使用VeriSign的证书,而网易邮箱等非金融网站采用的是中国互联网信息中心CNNIC颁发的SSL证书。一般来说,一个证书的价格不菲,以VeriSign的证书为例,价格在每年8000元人民币左右。

据说也有免费的证书可以申请。和VeriSign一样,StartSSL也是一家CA机构,它的根证书很久之前就被一些具有开源背景的浏览器支持(Firefox浏览器、谷歌Chrome浏览器、苹果Safari浏览器等)。后来StartSSL竟然搞定了微软:在升级补丁中,微软更新了通过Windows根证书认证(Windows Root Certificate Program)的厂商清单,并首次将StartCom公司列入了该认证清单。现在,在Windows 7或安装了升级补丁的Windows Vista或Windows XP操作系统中,系统会完全信任由StartCom这类免费数字认证机构认证的数字证书,从而使StartSSL也得到了IE浏览器的支持。

你可能感兴趣的内容
HTTPS 能否避免流量劫持? 收藏,4535 浏览
2条评论
changjiangchang 1年前

没三方证书

poijklmnb098 1年前

Very Good 使用nginx或tomcat搭建https环境

selfly

交流QQ群:32261424
Owner