是否可以限制移动应用程序(android / iOS)应用程序仅使用特定的TLS版本?

时间:2016-01-22 11:29:05

标签: android ios tls1.2

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

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

我在这里看到一些讨论可以在android中验证SSL上下文。 Android TLS connection and self signed certificate。但是,如果在服务器端发生任何后退,OS是否会覆盖它?

1 个答案:

答案 0 :(得分:0)

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

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

请注意,某些HTTP堆栈(例如,okhttp)实现了自己的TLS协议回退逻辑,该逻辑不会检测到Man-in-The-Middle的TLS协议降级。这种行为促成了POODLE漏洞。