diff --git a/src/base/http/server.cpp b/src/base/http/server.cpp index 19233dc27..7c99d8ecd 100644 --- a/src/base/http/server.cpp +++ b/src/base/http/server.cpp @@ -37,8 +37,9 @@ #include #include +#include #include -#include +#include #include #include #include @@ -100,13 +101,12 @@ using namespace Http; Server::Server(IRequestHandler *requestHandler, QObject *parent) : QTcpServer(parent) , m_requestHandler(requestHandler) + , m_sslConfig {QSslConfiguration::defaultConfiguration()} { setProxy(QNetworkProxy::NoProxy); - QSslConfiguration sslConf {QSslConfiguration::defaultConfiguration()}; - sslConf.setProtocol(QSsl::TlsV1_2OrLater); - sslConf.setCiphers(safeCipherList()); - QSslConfiguration::setDefaultConfiguration(sslConf); + m_sslConfig.setCiphers(safeCipherList()); + m_sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); auto *dropConnectionTimer = new QTimer(this); connect(dropConnectionTimer, &QTimer::timeout, this, &Server::dropTimedOutConnection); @@ -115,7 +115,7 @@ Server::Server(IRequestHandler *requestHandler, QObject *parent) void Server::incomingConnection(const qintptr socketDescriptor) { - std::unique_ptr serverSocket = m_https ? std::make_unique(this) : std::make_unique(this); + std::unique_ptr serverSocket = isHttps() ? std::make_unique(this) : std::make_unique(this); if (!serverSocket->setSocketDescriptor(socketDescriptor)) return; @@ -127,13 +127,10 @@ void Server::incomingConnection(const qintptr socketDescriptor) try { - if (m_https) + if (isHttps()) { auto *sslSocket = static_cast(serverSocket.get()); - sslSocket->setProtocol(QSsl::SecureProtocols); - sslSocket->setPrivateKey(m_key); - sslSocket->setLocalCertificateChain(m_certificates); - sslSocket->setPeerVerifyMode(QSslSocket::VerifyNone); + sslSocket->setSslConfiguration(m_sslConfig); sslSocket->startServerEncryption(); } @@ -178,17 +175,17 @@ bool Server::setupHttps(const QByteArray &certificates, const QByteArray &privat return false; } - m_key = key; - m_certificates = certs; + m_sslConfig.setLocalCertificateChain(certs); + m_sslConfig.setPrivateKey(key); m_https = true; return true; } void Server::disableHttps() { + m_sslConfig.setLocalCertificateChain({}); + m_sslConfig.setPrivateKey({}); m_https = false; - m_certificates.clear(); - m_key.clear(); } bool Server::isHttps() const diff --git a/src/base/http/server.h b/src/base/http/server.h index 6e743599c..61c956387 100644 --- a/src/base/http/server.h +++ b/src/base/http/server.h @@ -31,8 +31,7 @@ #pragma once #include -#include -#include +#include #include namespace Http @@ -63,7 +62,6 @@ namespace Http QSet m_connections; // for tracking persistent connections bool m_https = false; - QList m_certificates; - QSslKey m_key; + QSslConfiguration m_sslConfig; }; }