验证服务器符合苹果ATS/TLS 1.2要求的最佳方法

18

因为iOS 9开始,苹果要求URL必须使用TLS 1.2和正向保密技术。不考虑应用程序本身,如何验证服务器是否符合所有要求是最好的方法?

nscurl根本无法工作 - 或者我不知道如何使用它。我的输出只是不断地显示CFNetwork SSLHandshake失败,即使我知道服务器是符合要求的。

TLSTool在某种程度上起作用,但我无法强制使用正向保密(FS)密码套件。

OpenSSL可以在客户端模式下指定特定的密码套件,但我所拥有的版本没有FS密码套件。该如何升级OpenSSL?

什么是最佳方法呢?目前,我已经被迫使用ssllabs.com的analyze.html。有什么建议吗?

4个回答

55

基本上,nscurl --ats-diagnostics <url>会尝试所有可能的连接服务器的变体,并对每个测试返回PASS/FAIL结果。您应该仅找到哪些测试通过了您的服务器,并相应地设置ATS配置。

这篇关于ATS和检查服务器是否符合要求的好文章,也包含nscurl示例。


谢谢!nscurl现在对我有用了。我可以看到它尝试了不同的组合。 - Hampden123

13

这里列出的所有方法都可以工作,但需要一些手动操作。我发现最好的方法是使用SSL Labs测试服务器,并将结果与Apple的要求进行比较。这似乎是可以自动化的,因此我创建了一个工具来完成这个任务:https://apptransport.info

如果您将您的域名作为参数传递(例如https://apptransport.info/craigslist.com),您将获得以下信息:

  1. 您的服务器是否符合ATS标准
  2. 如有必要,如何修复您的服务器
  3. 如有必要,如何添加ATS例外
  4. 来自SSL Labs的结果

1
网站已经崩溃: 应用程序错误 - 应用程序发生了错误,无法提供您的页面。如果您是应用程序所有者,请检查日志以获取详细信息。 - zvi
如果它在当前状态下得到修复或变成开源,我会在这里发布更新。 - vf_jeff

2

方法1:

如果您想测试的 URL 是公开可访问的,您可以使用以下类似的公共 SSL 测试服务:

SSL 服务器测试

输入 URL 后,标题为“握手模拟”的部分将列出“Apple ATS 9 / iOS 9”,并指示是否成功协商了 TLS 1.2 以及使用了哪个连接密码套件。如果所使用的密码套件在下面的技术 ATS 要求列表中列出,并且成功协商了 TLS 1.2,则服务器已正确配置为 ATS。

方法2:(其他人也提到过此方法)

在运行 OS X El Capitan 的 Mac 上,在终端中运行以下命令:

/usr/bin/nscurl --ats-diagnostics https://<url>

运行命令后,查找靠近顶部的标签为“ATS默认连接”的部分。如果结果为“PASS”,则表示服务器已正确配置为ATS。
方法3:
对于不公开访问的URL,请使用Wireshark监控与该URL的通信。您可以使用Wireshark过滤器仅显示以下内容的TLSv1.2数据包:
ssl.record.version == 0x0303

如果服务器已配置为TLS版本1.2,则您将看到使用TLSv1.2协议的数据包。如果在监视进入URL的请求时仅看到客户端Hello数据包,则移动设备和URL之间未协商TLSv1.2。

wireshark_screenshot


2

使用nscurl(在macOS El Capitan及更高版本中可用),您可以使用--ats-tls-version开关专门测试TLS 1.2的兼容性,例如:

nscurl --ats-diagnostics --ats-tls-version TLSv1.2 <url>

这也将测试完美前向保密性。如果您想禁用对PFS的测试,请使用--ats-disable-pfs开关。

nscurl --ats-diagnostics --ats-tls-version TLSv1.2 --ats-disable-pfs <url>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接