- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写代理服务器,http 部分已准备就绪,但 https 有问题。我以这种方式创建了一个证书和私钥(据我所知,没有它是行不通的):
OpenSSL> req-x509-newkey rsa: 2048-keyout server.key-nodes-days 365-out server.csr
我做了一个简单的 QTcpServer,它将 socketDescriptor 传递给在 newIncomingConnection() 上创建的对象。在我对象的构造函数中我做了:
sock = new QSslSocket();
connect (sock,SIGNAL(readyRead()),this,SLOT(onQuery()));
connect(sock,SIGNAL(disconnected()),this,SLOT(deleteLater()));
connect(sock,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(onError(QAbstractSocket::SocketError)));
connect(sock,SIGNAL(sslErrors(QList<QSslError>)),this,SLOT(sltSslErrors(QList<QSslError>)));
...
Load key and cert
...
sock->setProtocol(QSsl::AnyProtocol);
QSslKey sslKey(key, QSsl::Rsa);
QSslCertificate sslCert(cert);
sock->setPrivateKey(sslKey);
sock->setLocalCertificate(sslCert);
sock->setSocketDescriptor(socketDesc);
sock->startServerEncryption();
if(!sock->waitForEncrypted(30000)) {
qDebug()<<"wait for encrypted failed";
}
在控制台中连接时,我看到“等待加密失败”和套接字发出的信号 error() 和 QAbstractSocket::SslHandshakeFailedError。您能否就建立无错误 ssl 连接的其他方法提出建议?
最佳答案
我认为您需要先调用 setSocketDescriptor
,然后再调用 setPrivateKey
和 setLocalCertificate
方法。
下面是我用来创建 HTTPS 服务器套接字
的代码,扩展了 QTcpServer
。
void SslServer::incomingConnection(qintptr socketDescriptor)
{
QSslSocket *serverSocket = new QSslSocket;
if (serverSocket->setSocketDescriptor(socketDescriptor)) {
QFile keyFile(<sslKeyFileName>);
if (!keyFile.open(QIODevice::ReadOnly)) {
delete serverSocket;
return;
}
QSslKey key(&keyFile, QSsl::Rsa, QSsl::Pem, QSsl::PrivateKey);
if (key.isNull()) {
delete serverSocket;
return;
}
keyFile.close();
serverSocket->setPrivateKey(key);
// to prevent asking for client certificate.
serverSocket->setPeerVerifyMode(QSslSocket::VerifyNone);
serverSocket->setLocalCertificate(<certificateFileName>);
serverSocket->startServerEncryption();
if (serverSocket->waitForEncrypted(3000)) {
// this will emit a newConnection() signal
addPendingConnection(serverSocket);
} else {
qDebug() << "Encryption Failed.";
delete serverSocket;
}
} else {
delete serverSocket;
}
}
关于c++ - QSslSocket 代理服务器 (https) 和证书。握手错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18190776/
在 Windows 7 Ultimate x64 上的 Qt 4.8 中,当我尝试使用 QNetworkAccessManager 通过网络进行 post() 操作时: _net_acc_mgr.po
我正在使用 Qt Creator 4.2.0 运行 Qt 5.7.1(MSVC 2015,32 位)。 QSslSocket 有问题。我收到以下错误: qt.network.ssl: QSslSock
我在 debian wheezy 中使用 Qt 5.4.1 中的 QSslSocket 创建了一个 sslclient 和 sslserver。当我运行程序时,它们根本不工作。调试我的代码后,我看到它
在我的项目中,我需要使用特定版本的 OpenSSL。我同时使用 Qt 4.8.6 和 Qt 5.4.0。我想创建一个自定义 QSslSocket 以传递给 QNetworkAccessManager,
我正在尝试用 Qt 编写一个简单的客户端-服务器应用程序,该应用程序将通过 SSL 进行通信。我尝试使用 QSslSockets,但我一直遇到各种问题。 看看这个: 客户: #define dumpv
我有一个客户端程序和一个服务器程序,它们使用 QSslSockets 进行通信。在服务器程序中,如果客户端成功连接,我将发送一个字符串 "Snameadded",我还想向它发送服务器上的用户列表,但作
这是我编写的同步 TCP 客户端中 read() 语句上方的一小段代码。 std::cout bytesAvailable() waitForReadyRead(); std::cou
我有一个使用QTcpSocket 的客户端-服务器应用程序。现在我想改用加密的 SSL 连接,因此我尝试切换到 QSslSocket。但是我无法与服务器建立连接。这是客户端的代码: Connectio
我正在尝试使用 Qt 文档中的示例代码实现 SSL 服务器。 但是在 serverSocket->startServerEncryption(); 被调用之后,什么也没有发生——无论是 encrypt
是否可以创建一个新的 QSslSocket 并让它获得现有 TCP 连接的所有权,并丢弃旧的 QTcpSocket,而不中断或关闭 TCP 连接? 我需要它在我的 FTP 服务器中实现显式 FTPS,
我使用此代码通过套接字传输大文件内存使用量没有峰值: connect(socket, SIGNAL(bytesWritten(qint64)), this, SLOT(refillSocket
我真的很困惑,希望有人知道我的问题。 我有一个非常简单的 SSL 客户端和服务器。连接很好。沟通很好。当客户端与服务器断开连接时,就会出现问题。这会在服务器上触发一个信号,该信号在 SLOT erro
我对 wkhtmltopdf 有疑问。我在我的 docker 中使用了这样的 wkhtmltopdf。 wkhtmltopdf https://www.google.com google.pdf 然后
我正在编写代理服务器,http 部分已准备就绪,但 https 有问题。我以这种方式创建了一个证书和私钥(据我所知,没有它是行不通的): OpenSSL> req-x509-newkey rsa: 2
我正在尝试通过 SSL 连接到 Twitch 聊天服务器,我基本上复制并粘贴了 QT 中安全 SSL 连接示例中的一些代码。当我可以 connectToHostEncrypted 时,一切都崩溃了。非
我们的业务应用程序基于 Qt 的生产服务器出现问题。当 SSL 连接总数随时间增加时,一些客户端根本无法连接。 QSslSocket::waitForEncrypted() 开始失败,没有 QSslE
需要创建一个使用 SSL 连接到客户端的小型服务器应用程序。一次只能连接一个客户端。 每次客户端尝试建立新连接时,都会调用以下函数: void Control::on_newConnection()
我有一个应用程序作为代理使用 QTcpSocket 拦截 HTTP 请求。我正在尝试将其扩展为也适用于 HTTPS,但它似乎并没有像我预期的那样工作。由于应用程序的独特性,我无法使用 QHttp。 目
我正在 Windows 上开发一个应连接到服务器的应用程序。因此我实现了一个 QSslSocket。 执行连接方法后,sslSocket errorString 发送 The issuer certi
有一个定义 QT_NO_SSL ,如果没有找到 Ssl 库,则定义。还有方法 QSslSocket::supportsSsl() . 但这两者有什么关系,它们是等价的吗?是否QT_NO_SSL QS
我是一名优秀的程序员,十分优秀!