首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SSLContext协议

SSLContext协议
EN

Stack Overflow用户
提问于 2015-07-31 20:43:46
回答 1查看 3K关注 0票数 4

我正在编写一个Java客户端。关于如何最安全地使用SSLContext类,以便在可能的情况下使用TLS,以及只有在TLS不可用时才使用SSLv3,我有几个问题。(附带注意:我看到文档中说,由于某些供应商产品的不兼容性问题,TLS1.1和TLS1.2对客户是禁用的)。

  1. SSLContext.getInstance("SSL")只使用SSL协议还是在可用的情况下使用TLS协议?
  2. 当您使用SSLContext.getInstance("SSL")时,默认协议是什么?它们的优先级是多少?
  3. SSLContext.getInstance("TLS")只使用TLS协议还是在可用的情况下使用SSL协议?
  4. 当您使用SSLContext.getInstance("TLS")时,默认协议是什么?它们的优先级是多少?
  5. 正如我假设的那样,默认协议总是首先使用,而支持的协议只有在握手双方都不起作用的情况下才会使用,这是真的吗?

Java文档在许多方面都不清楚。例如,它说“选择TLSv1可能会使1.0、1.1和1.2可用”。

  1. 如果我使用SSLContext.getInstance("TLSv1"),SSLv3是不可用的还是不是默认的?

当我询问优先级的顺序时,我问的是,如果多个事物都被列为“缺省值”,那么哪一个实际上将被用作第一优先级呢?当然,我也读过this thread

EN

回答 1

Stack Overflow用户

发布于 2015-08-19 09:21:33

正如#11504173 (编辑后)所说,所有上下文都可以支持所有协议,尽管默认的可能有所不同。

没有“优先级顺序”;对于所有由Java实现的协议(SSLv3和三个TLSes),客户端都会声明它支持的最大协议版本,而服务器选择自己的最大版本或客户端的报价(以较低者为准),从而使获得两个对等点支持的最高版本。如果客户端提供的max值对于服务器来说低得令人无法接受,服务器将拒绝hello。如果服务器选择的最大值对于客户端来说低得令人无法接受,客户端将中止握手。特别是,Java客户端抛出一个异常,类似于“不允许服务器协议x”,并且套接字没有连接。

然而,一些服务器软件没有正确地实现这个协商,并且不会协商低于最大值但仍然可以接受的版本。为了应付这种情况,如果握手失败(有些?)浏览器再次错误地声明一个较低的最大值;这允许贵宾犬攻击。浏览器开发人员已经了解到,web用户大多不想要安全性,他们现在只想要跳舞的猫视频;Java用户似乎不那么鲁莽(到目前为止),Java没有降低等级,只是按照协议规定的方式和配置所允许的范围。

您可能会想到密码套件,其中客户端确实发送了一个按偏好排序的列表,而服务器可以根据该首选项选择“最佳”共享密码,但这并不是必需的。事实上,在恐慌期间,许多服务器被配置为优先使用RC4,即使客户机没有首先列出它。后来发现,虽然RC4的弱点比之前想象的要严重得多,但它并不是什么大问题,但一些服务器继续强制使用现在几乎已经坏掉的RC4,尽管客户不喜欢它,而且https://www.rfc-editor.org/rfc/rfc7465说你根本不应该使用RC4,更不喜欢它。安全不是很有趣吗?

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31754876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档