【问题标题】:Is it possible to restrict mobile app (android/iOS) application to use only specific TLS version?是否可以限制移动应用程序(android/iOS)应用程序仅使用特定的 TLS 版本?
【发布时间】:2016-01-22 11:29:04
【问题描述】:

是否可以在应用程序代码级别验证特定的TLSSSL 版本?是否可以限制应用程序仅使用特定的 TLSSSL 版本?

考虑一个场景,Web 服务器支持TLS1.01.11.2。移动应用程序(Android 或 iOS)是使用更新的 API/SDK 构建的,它也支持 TLS 1.2。理论上,TLS 上下文在任何协商异常情况下都会退回到较低的上下文。那么,是否有任何可能的方法在应用程序代码中验证它应该只使用 TLS 1.2 并且不应该接受较低版本。

我在这里看到了一些讨论 SSL 上下文可以在 android 中验证。 Android TLS connection and self signed certificate。但是如果服务器端发生任何回退,操作系统会覆盖这个吗?

【问题讨论】:

  • 是的,您可以将 SSL/TLS 客户端配置为仅连接 TLS 1.2 或更高版本。具体细节取决于您使用的客户端。

标签: android ios tls1.2


【解决方案1】:

如果服务器和客户端都支持 TLS 1.2,那么正确实现的 TLS/SSL 堆栈只会协商 TLS 1.2。他们需要协商最高相互支持的协议版本,而不是最低版本。

关于如何限制接受/协商哪些协议版本的问题取决于您使用的网络库。例如,在 Android 上,如果您直接使用 SSLSocket 实例,则可以在每个 SSLSocket 实例上设置启用的协议。如果您使用的是 HTTP 库,那么它可能会提供使用 SSLSocketFactory 进行参数化的选项,您可以在其中提供自己的 SSLSocketFactory,它包装了默认 SSLSocketFactory,获取 SSLSocket 实例,在它们上设置启用的协议集,然后返回这些自定义 SSLSocket 实例到 HTTP 堆栈。

请注意,某些 HTTP 堆栈(例如 okhttp)实现了自己的 TLS 协议回退逻辑,该逻辑不会检测中间人对 TLS 协议的降级。这种行为助长了 POODLE 漏洞。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多