SSLSocket
Socket
并使用诸如“安全套接字层”(SSL)或IETF“传输层安全性”(TLS)协议之类的协议提供安全套接字。
这种套接字是普通的流套接字,但它们在底层网络传输协议(如TCP)上添加了一层安全保护。 这些保护措施包括:
- 诚信保护 。 SSL可防止活动窃听器修改消息。
- 身份验证 在大多数模式下,SSL提供对等身份验证。 服务器通常经过身份验证,客户端可以按服务器的请求进行身份验证。
- 保密(隐私保护) 。 在大多数模式中,SSL会加密客户端和服务器之间发送的数据。 这样可以保护数据的机密性,使被动窃听器不会看到敏感数据,如财务信息或多种个人信息。
这些类型的保护由“密码套件”指定,“密码套件”是给定SSL连接使用的加密算法的组合。 在协商过程中,两个端点必须就两种环境中都可用的密码套件达成一致。 如果没有这样的套件,则不能建立SSL连接,也不能交换数据。
使用的密码套件由称为“握手”的协商过程建立。 此过程的目标是创建或重新加入“会话”,这可能会随着时间的推移保护许多连接。 握手完成后,您可以使用getSession方法访问会话属性。 可以通过以下三种方式之一启动此连接上的初始握手:
- 打电话给
startHandshake
明确地开始握手,或者 - 任何在此套接字上读取或写入应用程序数据的尝试都会导致隐式握手,或者
- 如果当前没有有效会话,则调用
getSession
尝试设置会话,并完成隐式握手。
如果握手因任何原因失败, SSLSocket
将关闭,无法进行进一步的通信。
在管理密码套件时,您需要了解两组密码套件:
- 支持的密码套件:SSL实现支持的所有套件。 使用getSupportedCipherSuites报告此列表。
- 启用密码套件,可能少于全套支持套件。 使用setEnabledCipherSuites方法设置此组,并使用getEnabledCipherSuites方法进行查询。 最初,将在新套接字上启用一组默认密码套件,表示最小建议配置。
实现默认值要求默认情况下仅启用对服务器进行身份验证并提供机密性的密码套件。 只有当双方明确同意未经认证和/或非私人(未加密)的通信时,才会选择这样的密码套件。
首次创建SSLSocket
,不会进行握手,以便应用程序可以首先设置其通信首选项:要使用的密码套件,套接字应该处于客户端还是服务器模式等等。但是,安全性总是在应用程序数据通过连接发送。
您可以注册接收握手完成的事件通知。 这涉及使用另外两个类。 HandshakeCompletedEvent对象被传递给HandshakeCompletedListener实例,这些实例由此API的用户注册。 一个SSLSocket
被创建SSLSocketFactory
,或通过accept
荷兰国际集团从一个连接SSLServerSocket
。
SSL套接字必须选择在客户端或服务器模式下运行。 这将决定谁开始握手过程,以及每一方应发送哪些消息。 每个连接必须有一个客户端和一个服务器,否则握手将无法正常进行。 初始握手开始后,即使执行重新协商,套接字也无法在客户端和服务器模式之间切换。
上一篇: GSSContext
推荐阅读