summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/network/ssl/qdtls_openssl.cpp2
-rw-r--r--tests/auto/network/ssl/qdtls/tst_qdtls.cpp27
2 files changed, 28 insertions, 1 deletions
diff --git a/src/network/ssl/qdtls_openssl.cpp b/src/network/ssl/qdtls_openssl.cpp
index 2e5a26d596..a8f6ebcf7f 100644
--- a/src/network/ssl/qdtls_openssl.cpp
+++ b/src/network/ssl/qdtls_openssl.cpp
@@ -1054,7 +1054,7 @@ bool QDtlsPrivateOpenSSL::continueHandshake(QUdpSocket *socket, const QByteArray
|| (dtlsConfiguration.peerVerifyMode == QSslSocket::AutoVerifyPeer
&& mode == QSslSocket::SslClientMode);
- if (!doVerifyPeer || verifyPeer()) {
+ if (!doVerifyPeer || verifyPeer() || tlsErrorsWereIgnored()) {
connectionEncrypted = true;
handshakeState = QDtls::HandshakeComplete;
return true;
diff --git a/tests/auto/network/ssl/qdtls/tst_qdtls.cpp b/tests/auto/network/ssl/qdtls/tst_qdtls.cpp
index 571d341126..60ab87d6f2 100644
--- a/tests/auto/network/ssl/qdtls/tst_qdtls.cpp
+++ b/tests/auto/network/ssl/qdtls/tst_qdtls.cpp
@@ -41,6 +41,7 @@
#include <QtCore/qcryptographichash.h>
#include <QtCore/qbytearray.h>
+#include <QtCore/qvector.h>
#include <QtCore/qstring.h>
#include <QtCore/qobject.h>
@@ -99,6 +100,7 @@ private slots:
void protocolVersionMatching();
void verificationErrors_data();
void verificationErrors();
+ void ignoreExpectedErrors();
void verifyServerCertificate_data();
void verifyServerCertificate();
void verifyClientCertificate_data();
@@ -685,6 +687,31 @@ void tst_QDtls::verificationErrors()
}
}
+void tst_QDtls::ignoreExpectedErrors()
+{
+ connectHandshakeReadingSlots();
+
+ auto serverConfig = defaultServerConfig;
+ serverConfig.setPrivateKey(serverKeySS);
+ serverConfig.setLocalCertificate(selfSignedCert);
+ QVERIFY(serverCrypto->setDtlsConfiguration(serverConfig));
+
+ const QVector<QSslError> expectedErrors = {{QSslError::HostNameMismatch, selfSignedCert},
+ {QSslError::SelfSignedCertificate, selfSignedCert}};
+
+ clientCrypto->ignoreVerificationErrors(expectedErrors);
+ QVERIFY(clientCrypto->setPeer(serverAddress, serverPort));
+ QVERIFY(clientCrypto->doHandshake(&clientSocket));
+
+ testLoop.enterLoopMSecs(handshakeTimeoutMS);
+
+ QVERIFY(!testLoop.timeout());
+
+ QDTLS_VERIFY_HANDSHAKE_SUCCESS(serverCrypto);
+ QCOMPARE(clientCrypto->handshakeState(), QDtls::HandshakeComplete);
+ QVERIFY(clientCrypto->isConnectionEncrypted());
+}
+
void tst_QDtls::verifyServerCertificate_data()
{
QTest::addColumn<QSslSocket::PeerVerifyMode>("verifyMode");