【问题标题】:Getting supported TLS version from server从服务器获取支持的 TLS 版本
【发布时间】:2024-05-01 20:35:02
【问题描述】:

我有一个应用程序,我想在其中设置 TLS 版本,但这取决于服务器。我想设置服务器支持的 TLS 版本,不同的服务器可能会有所不同,那么是否有任何 API 和方法可以在 java 或 android 中获取任何服务器支持的 TLS 版本?

如果有任何帮助,我将不胜感激。

【问题讨论】:

    标签: android ssl tls1.2


    【解决方案1】:

    无需预先知道服务器支持哪个版本。 在 SSL/TLS 中,客户端将开始握手,宣布它愿意支持的最高版本,服务器将只回复它可以做的最佳版本,并且不高于客户端版本。

    唯一需要这些知识的地方是,如果您正在处理无法正确处理未知版本的损坏服务器。在这种情况下,浏览器会使用较低版本重试(即使用 TLS 1.0 而不是 TLS 1.2 重试),希望这会起作用。如果这行得通,他们会记住服务器已损坏,需要使用较低版本进行处理以供将来连接。但这种回退主要在浏览器中完成,其他应用程序只是放弃损坏的服务器。

    【讨论】:

    • 我需要在 android 应用程序中执行此操作,所以请给我一段代码,我可以使用它来获取服务器提供的版本并在客户端设置。
    • @user499:就像我说的:“无需预先知道服务器支持哪个版本”。 Android 也是如此。
    • Android 根据 API 版本支持不同的 TLS 版本,以便客户端在握手时使用哪个版本,或者我可以在客户端应用程序中根据 Android API 版本手动设置版本。
    • @user499:除非您设置显式版本或使用设置显式版本的库,否则它应该向服务器提供 API 支持的最佳版本。有关如何启用特定版本的信息,另请参阅 blog.dev-area.net/2015/08/13/…
    • 但是我遇到了一个大问题:我们用于身份验证的内置浏览器 (WebView) 仅支持 4.4 KitKat 的 TLS 1.1+。 Android OS 从 16 API 版本开始支持 TLS 1.1+,但 WebView 仅从 19 API 版本开始支持 TLS 1.1+。我没有找到手动将 TLS 协议设置为 WebView 的机会。所以我们无法在奇巧以下的设备上通过网络登录系统。我在真实设备 Samsung 4.1.2 和 Asus 4.2.2 以及模拟器 4.3.1 上检查了这一点
    最近更新 更多