是否可以创建一个新的 QSslSocket 并让它接管现有的 TCP 连接,并丢弃旧的 QTcpSocket,而不中断或关闭 TCP 连接?
我需要它来在我的 FTP 服务器中实现显式 FTPS,这要求最初连接是未加密的,并且只有在 FTP 客户端的请求(命令AUTH SSL
或AUTH TLS
)时,如果它出现,就会启动 SSL/TLS 握手。
是否可以创建一个新的 QSslSocket 并让它接管现有的 TCP 连接,并丢弃旧的 QTcpSocket,而不中断或关闭 TCP 连接?
我需要它来在我的 FTP 服务器中实现显式 FTPS,这要求最初连接是未加密的,并且只有在 FTP 客户端的请求(命令AUTH SSL
或AUTH TLS
)时,如果它出现,就会启动 SSL/TLS 握手。
是的,这是可能的。最简单的方法是将 替换QTcpSocket
为QSslSocket
. 在您QSslSocket
调用. 之后,它将像正常一样运行,但所有通信都在后台加密。QTcpSocket
startClientEncryption
QSslSocket
QTcpSocket
使用它,我实际上能够在不到一小时的时间内移植一个超过 100k 行的项目以使用 SSL。
在未加密模式下使用没有(真正的)开销,QSslSocket
因为它只会调用相应的QTcpSocket
方法。例如读取方法(qsslsocket.cpp
Qt 4.8.3):
if (d->mode == UnencryptedMode && !d->autoStartHandshake) {
readBytes = d->plainSocket->read(data, maxlen);
} else {
//encryption stuff