6

I have found that TLS1.1 and TLS1.2 is supported from API level 16 and on by default from API level 20. This corresponds to Android 4.1 (supported) and Android 4.4W (wearable) or Android 5.0 (on by default)

From a server perspective this means that you will only support clients using 4.4W or higher, since you can't rely clients to turn on TLS 1.1 and TLS 1.2 support.

Now the real question comes:

Do you even need to care about the Android version?

Hu, what do you mean? Well, should you look at the version of Android OR at the version of the browser being used. For example, Chrome on a desktop has OpenSSL libraries compiled into it (if I'm not mistaking). So couldn't a new version of Chrome on an old version of Android, support TLS1.1 and TLS1.2?

The same story goes for other browsers. I know this is an Android StackExchange, but does anyone know what the deal is on iOS? Will the browser use the system libraries for SSL or will it use it's own? Do I need to look at the browser or the OS for TLS support?

Kind regards,

Roel

1 Answer 1

7

Assuming you are not doing Android development, you do not need to worry about Android version.

Any serious security-minded application like Chrome on Android will use TLS 1.2. You can verify this for yourself by going to a secure website (make sure it supports TLS 1.2!) and inspecting the certificate and protocol used on the client. I have checked this on Chrome on a 4.4 Android device, and it uses TLS 1.2.

A security policy should basically rely on the TLS version, and not pay attention to what kind of client is running it. It's not worthwhile to determine the Android OS version, because the Android OS version is not what finally determines the security used.

Let's be pedantic about enumerating the possibilities.

  • Android API 20+: All browsers and applications should work with TLS 1.2
  • Android API 16-19: Some browsers and applications will work with TLS 1.2.
  • Android API 15-: I think we are not discussing these because no version supports TLS 1.2

Here are the server choices I think we are discussing:

  1. You allow only TLS 1.2 and do not check Android version. All Android API 20+ clients, and those Android API 16-19 clients using TLS 1.2 applications are expected to work.
  2. You allow TLS 1.2, 1.1, 1.0 and do not check Android version. All Android clients are expected to work. System is less secure.
  3. You allow only TLS 1.2 and check the Android version. Only Android API 20+ clients can work because you are excluding API 16-19. This is fewer supported clients than in option 1, with no increase in TLS security. So this option does not make sense.
  4. You allow TLS 1.2, 1.1, 1.0 and check the Android version. Only Android API 20+ clients are expected to work because you are excluding API 16-19. This option does not make sense because you are making the system both less usable and less secure than other options. Fewer clients will work than under option 1, and those clients will be less secure.

Checking the Android version makes your system support fewer clients, at no increase in security. Therefore, do not bother checking the Android version.

The basic security tradeoff is always how usable a system is versus how secure the system is. This applies to physical security measures, cipher suites, TLS versions, and more. TLS 1.1 and 1.0 are not as secure as TLS 1.2. You have to answer the following questions for yourself:

  1. Do the vulnerabilities in present in TLS 1.1 and 1.0 make them unsuitable for your system?
  2. Would using only TLS 1.2 be worth the tradeoff in some people not being able to use your system?
5
  • What do you mean by: "A security policy should basically rely on the TLS version, and not pay attention to what kind of client is running it."? We should only allow protocols which are secure and we should not disable any that are secure? Regardless of how many clients are able to work with this policy?
    – Silver
    May 3, 2016 at 14:31
  • I get what your saying. But the trade-off is influenced by MY users, the ones that are using my web application. If they use a more up-to-date client then the general population, the trade-off might lean towards a higher security standard. So the usability of my system does not only depend on the technology used but also on my users. Therefor a policy that takes into account usability needs to take into account it's users.
    – Silver
    May 4, 2016 at 6:39
  • You also say that you don't need to look at the Android OS. But what when the user is using the Android browser? I think the Android webkit browser is based on Safari, so you need to look up that Safari version?
    – Silver
    May 4, 2016 at 6:44
  • @silver By "You have to answer the following questions for yourself", I mean you need to consider your own application and users when making a decision. I do not think there is any reason to worry about Android version. I have tried to be more explicit about why this is a choice about what TLS version(s) to allow, and not Android version.
    – mattm
    May 4, 2016 at 12:25
  • reading your updated answer I see where the confusion is coming from. I am not intending to disable access to certain clients. I am merely trying to estimate the impact on my users if I would only allow TLS1.1 and 1.2. To measure the impact I am looking at the user-agents that have been logged to know which users MIGHT not be able to use my application. So I am not putting any restrictions on clients directly but only indirectly through the requirement for TLS 1.1 or 1.2. Thanks for you answer, I have accepted it since it states that you need to look at the browser and not the OS.
    – Silver
    May 6, 2016 at 9:47

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .