diff --git a/src/connectivity/security/tls_session.cpp b/src/connectivity/security/tls_session.cpp
index f783c91830415e650339ba966f984767747856dc..da2551556f377c153972331f522e5821eb492737 100644
--- a/src/connectivity/security/tls_session.cpp
+++ b/src/connectivity/security/tls_session.cpp
@@ -368,6 +368,14 @@ TlsSession::TlsSessionImpl::~TlsSessionImpl()
     state_ = TlsSessionState::SHUTDOWN;
     stateCondition_.notify_all();
     rxCv_.notify_all();
+    {
+        std::lock_guard<std::mutex> lock(requestsMtx_);
+        // requests_ store a shared_ptr, so we need to cancel requests
+        // to not be stuck in verifyCertificateWrapper
+        for (auto& request : requests_)
+            request->cancel();
+        requests_.clear();
+    }
     thread_.join();
     if (not transport_->isReliable())
         transport_->setOnRecv(nullptr);