diff --git a/src/security/tls_session.cpp b/src/security/tls_session.cpp
index 3e6d79a30a8198adcb8edbed37b525c19080dbaf..ed4d1c8698432cffeb268bd85327a1aba04bfabf 100644
--- a/src/security/tls_session.cpp
+++ b/src/security/tls_session.cpp
@@ -107,8 +107,6 @@ static constexpr auto RX_OOO_TIMEOUT = std::chrono::milliseconds(1500);
 static constexpr int ASYMETRIC_TRANSPORT_MTU_OFFSET
     = 20; // when client, if your local IP is IPV4 and server is IPV6; you must reduce your MTU to
           // avoid packet too big error on server side. the offset is the difference in size of IP headers
-static constexpr auto OCSP_VERIFICATION_TIMEOUT = std::chrono::seconds(
-    2); // Time to wait for an OCSP verification
 static constexpr auto OCSP_REQUEST_TIMEOUT = std::chrono::seconds(
     2); // Time to wait for an ocsp-request
 
@@ -685,16 +683,15 @@ TlsSession::TlsSessionImpl::verifyCertificateWrapper(gnutls_session_t session)
     }
 
     // OCSP (Online Certificate Service Protocol) {
-    bool ocsp_done = false;
-    std::mutex cv_m;
-    std::condition_variable cv;
-    std::unique_lock<std::mutex> cv_lk(cv_m);
+    std::promise<int> v;
+    std::future<int> f = v.get_future();
 
     gnutls_x509_crt_t issuer_crt = cert.issuer ? cert.issuer->cert : nullptr;
     verifyOcsp(ocspUrl, cert, issuer_crt, [&](const int status) {
         if (status == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) {
             // OCSP URI is absent, don't fail the verification by overwritting the user-set one.
             JAMI_WARN("Skipping OCSP verification %s: request failed", cert.getUID().c_str());
+            v.set_value(verified);
         } else {
             if (status != GNUTLS_E_SUCCESS) {
                 JAMI_ERR("OCSP verification failed for %s: %s (%i)",
@@ -702,18 +699,12 @@ TlsSession::TlsSessionImpl::verifyCertificateWrapper(gnutls_session_t session)
                          gnutls_strerror(status),
                          status);
             }
-            verified = status;
+            v.set_value(status);
         }
-        std::lock_guard<std::mutex> cv_lk(cv_m);
-        ocsp_done = true;
-        cv.notify_all();
     });
-    cv.wait_for(cv_lk, std::chrono::seconds(OCSP_VERIFICATION_TIMEOUT), [&ocsp_done] {
-        return ocsp_done;
-    });
-    // } OCSP
+    f.wait();
 
-    return verified;
+    return f.get();
 }
 
 void