Min*_*ock 4 java sockets ssl jsse handshake
我正在使用 Java 的 SSL 库来保护我的应用程序之间的连接。我注意到SSLServerSocket.accept()即使握手失败也会返回一个套接字。
SSLServerSocket.accept()不会等到初始握手完成?和SSLSocket,握手会在实际操作之前自动完成吗?此外,在当前握手完成之前,写入和读取当前(重新)握手的 SSLSocket 是否会阻塞?如果不是,在握手套接字上操作是否安全?握手和应用程序数据是否会并行发送且互不影响?
accept()不发起握手,它只是返回接受的套接字。当您开始在接受的套接字上执行 I/O 时,将启动握手。这是记录在案的行为:
http://docs.oracle.com/javase/7/docs/api/javax/net/ssl/SSLSocket.html
此连接上的初始握手可以通过以下三种方式之一启动:
startHandshake显式开始握手的调用,或- 在此套接字上读取或写入应用程序数据的任何尝试都会导致隐式握手,或
getSession如果当前没有有效的会话,则调用尝试建立会话,并完成隐式握手。如果握手由于任何原因失败,SSLSocket 将关闭,并且无法进行进一步的通信。
...
首次创建 SSLSocket 时,不进行握手,因此应用程序可以首先设置其通信首选项:使用什么密码套件,套接字应处于客户端模式还是服务器模式等。但是,安全性始终由应用程序提供数据通过连接发送。
至于握手重新协商,这也被记录在案:
http://docs.oracle.com/javase/7/docs/api/javax/net/ssl/SSLSocket.html#startHandshake()
如果数据已经在连接上发送,它会在这次握手期间继续流动。当握手完成时,这将通过一个事件发出信号。此方法与连接上的初始握手同步,并在协商握手完成时返回。某些协议可能不支持现有套接字上的多次握手,并且可能会抛出 IOException。
| 归档时间: |
|
| 查看次数: |
1317 次 |
| 最近记录: |