18

因此,Apple 要求从 iOS 9 开始的 URL 的 TLS 1.2 具有前向保密性。独立于应用程序,验证服务器是否满足所有要求的最佳方法是什么?

nscurl 完全不起作用 - 或者我不知道如何使用它。我的输出只是反复说 CFNetwork SSLHandshake 失败,即使我知道服务器是合规的。

TLSTool 在某种程度上有效,但我不能强制使用前向保密 (FS) 密码。

openssl 可以为客户端模式指定特定的密码,但我拥有的版本没有 FS 密码。如何升级openssl?

最好的方法是什么?到目前为止,我不得不访问 ssllabs.com 的analyze.html。有什么建议么?

4

4 回答 4

54

基本上nscurl --ats-diagnostics <url>只是尝试连接到服务器的所有可能变体,并为每个测试提供通过/失败结果的响应。您应该只找到您的服务器通过了哪些测试并相应地设置 ATS 配置。

这是一篇关于 ATS 和检查服务器合规性的好文章,它还包含一个 nscurl 示例。

于 2015-12-23T23:32:52.833 回答
13

此处列出的所有方法都有效,但需要一些体力劳动。我发现最好的方法是使用 SSL Labs 测试服务器并将结果与​​ Apple 的要求进行比较。这似乎可以自动化,所以我创建了一个工具来做到这一点:https ://apptransport.info

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

  1. 您的服务器是否符合 ATS
  2. 如有必要,如何修复您的服务器
  3. 如有必要,如何添加 ATS 例外
  4. SSL 实验室的结果
于 2017-02-07T14:13:17.163 回答
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>

于 2016-08-09T20:25:06.557 回答
2

方法一:

如果您要测试的 URL 可公开访问,您可以使用公共 SSL 测试服务,例如以下服务:

SSL 服务器测试

输入 URL 后,标题为“Handshake Simulation”的部分会列出“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 Default Connection。结果PASS表明服务器已为 ATS 正确配置。

方法三:

对于不可公开访问的 URL,请使用Wireshark监视与 URL 的通信。您可以使用 Wireshark 过滤器仅显示具有以下内容的 TLSv1.2 数据包:

ssl.record.version == 0x0303

如果服务器已配置为 TLS 版本 1.2,您将看到使用 TLSv1.2 协议的数据包。如果您在监控进入 URL 的请求时只看到 Client Hello 数据包,则表明移动设备和 URL 之间没有协商 TLSv1.2。

wireshark_screenshot

于 2016-09-29T20:48:08.100 回答