在iOS中使用自签名证书的5点技巧

原文: http://blog.httpwatch.com/2013/12/12/five-tips-for-using-self-signed-ssl-certificates-with-ios/

现在买一个 SSL 证书也不贵,但有时候自签名证书要更方便。例如,你可能想将SSL 证书用在局域网服务器中进行部署。

自签名 SSL 证书能够迅速创建免费证书,不需要付费或提交申请给证书机构。

当浏览器打开使用自签名证书的网站时,它不会自动信任这些站点。在 MobileSafari 中,你会看到如下警告:

这个程序 HttpWatchiOS ,则会提供更准确的描述:

本文接下来将讲述几点技巧,例如如何使iOS不再提示SSL证书警告,如何使创建和管理自签名证书变得更加简单。

技巧#1 – 不要在 Mobile Safari 中选择接受自签名证书

当在 Safari 中第一次浏览使用自签名证书的网站时,我们很自然地就会选择“继续”或者“详细->接受”:

这样,Safari 会打开这个站点,但会带来两个严重的后果:

  1. “接受”将导致 Safari 把该站点添加到 SSL 例外列表中,这样 Safari 在浏览该站点时不会再发出警告。但这也导致该证书无法安装为 iOS 的可信任证书。这样,该设备上的其他应用(例如 Chrome、HttpWatch 等)仍然无法连接该站点。
  2. 一旦站点被添加到 SSL 例外之后,就无法从 iOS 7 中移除它了。在 7.0 之前,我们可以通过“设置->Safari->清除 Cookie 和数据”来删除它。但 7.0 中却不行(如果你知道如何删除,请给我留言)。

译者注:在 7.0 中,只能通过“还原所有设置”来移除站点例外。

技巧#2 – 把自签名证书安装为iOS 配置描述文件

通过邮件附件的方式,你可以将 SSL 证书加到 iOS 可信任列表中。

要安装证书,请选择 Install 。这样不管是 Safari 还是其他使用了同一钥匙串的 iOS 应用,在下载证书时都不会发出警告。

这跟将站点添加到 SSL 例外不同,你可以通过“设置->通用->描述文件”来移除该证书:

苹果提供了 Mac 和 PC 版的 iPhone 配置实用工具(iPCU)。当邮件不可用或者需要管理大量iOS设备时,iPCU 是一个更好的选择。

技巧#3 – 不要在 IIS 中创建自签名证书

在 IIS 中创建自签名证书很简单。只需要在菜单中选择“创建自签名证书” :

很不幸,IIS 在证书中采用了计算机名作为主机名:

绝大多数情况,计算机名并不等于主机名,因此这样的证书被加到 iOS 中后是不可信的:

这个问题可以通过IIS 6 提供的 SelfSSL 工具来解决。

但是,使用下面介绍的 OpenSSL 则更为方便。

技巧#4 – 用 OpenSSL 创建自签名证书

使用 OpenSSL命令行工具创建自签名证书是最简单的。这个工具在大部分平台下都有效,对于 Mac OSX 来说,它是内置的。

首先创建私钥文件:

openssl genrsa -out myselfsigned.key 2048

然后创建自签名证书:

openssl req -new -x509 -key myselfsigned.key -out myselfsigned.cer-days 365 -subj /CN=www.mysite.com

key文件和cer文件的文件名你可以任意指定。 /CN 参数必须为主机名(本例中使用https://www.mysite.com 为主机名)。days 参数指定从当前日期开始的有效期。

 

如果你不想下载 OpenSSL,这里有一个网站可以为你创建自签名证书。但为了安全考虑,最好是自己来创建。

在 Apache 服务器上,直接在 SSL 设置中使用 key 文件和 cer文件。对于 IIS,你需要用 PFX 文件,将它导入到 IIS 的服务器证书中。

OpenSSL 创建 PFX 的文件命令如下:

openssl pkcs12 -export -out myselfsigned.pfx -inkey myselfsigned.key-in myselfsigned.cer

技巧# 5: 创建自己的证书颁发机构 (CA)

使用自签名证书的一个问题是,对于用在这个设备上的每一张证书,你都要创建信任关系。最好是创建一个 CA,然后用根证书来创建自签名证书。

当然,除了自己扮演 CA 的角色,你也可以向专业的CA申请 SSL 证书。

自己做 CA 的好处,是每台设备只需要安装一个证书。

创建 CA 有两个步骤。首先如前面一样创建私钥文件:

openssl genrsa -out myCA.key 2048

然后创建证书:

openssl req -x509 -new -key myCA.key -out myCA.cer -days 730 -subj/CN="My Custom CA"

这个 cer 文件 (myCA.cer) 将被共享,它将被安装到iOS 或其他 OS,就如同操作系统内置的可信任的根证书。在 iOS 上,自定义 CA 证书仍然存储在“设置->通用->描述文件”中:

私钥文件 (myCA.key) 仅会在创建新的 SSL 证书时用到。

用 CA 证书,你可以创建多个 SSL 证书。就如同你购买商业的SSL证书,你还需要一个额外的步骤,即创建CSR(客户端签名请求)。

首先创建一个私钥:

openssl genrsa -out mycert1.key 2048

然后创建 CSR:

openssl req -new -out mycert1.req -key mycert1.key -subj/CN=www2.mysite.com

然后用CSR 去创建证书:

openssl x509 -req -in mycert1.req -out mycert1.cer -CAkey myCA.key -CAmyCA.cer -days 365 -CAcreateserial -CAserial serial

最后得到的 cer 文件(mycert.cer) 放在 web 服务器上,而 CA 证书则安装到要访问该服务器的 iOS 设备上。

 


你可能感兴趣的:(iPhone开发)