diff --git a/lib/modules/Protocols.pmod/HTTP.pmod/Query.pike b/lib/modules/Protocols.pmod/HTTP.pmod/Query.pike
index 0f6794b2aa4628ffb2da17f998acaf4ebe316620..a4ec213b95f17fe245efccbd75709e706a82aff9 100644
--- a/lib/modules/Protocols.pmod/HTTP.pmod/Query.pike
+++ b/lib/modules/Protocols.pmod/HTTP.pmod/Query.pike
@@ -248,6 +248,11 @@ protected int ponder_answer( int|void start_position )
    ok=1;
    remove_async_timeout();
    TOUCH_TIMEOUT_WATCHDOG();
+   if (con && con->set_timeout) {
+     // SSL connection.
+     con->set_timeout((data_timeout || timeout) &&
+                      (float)(data_timeout || timeout));
+   }
 
    if (request_ok) request_ok(this,@extra_args);
    return 1;
@@ -302,6 +307,8 @@ void start_tls(int|void blocking, int|void async)
     ssl->set_blocking();
   }
 
+  ssl->set_timeout(timeout && (float)timeout);
+
   if (!(ssl_session = ssl->connect(real_host, ssl_session))) {
     error("HTTPS connection failed.\n");
   }