diff --git a/src/sbbs3/services.c b/src/sbbs3/services.c
index 1d2ae2bafb591287b63f10c8661b7bfb29642871..7c05cdd8ecc6c020bf0338f3faaf1d48b3d75142 100644
--- a/src/sbbs3/services.c
+++ b/src/sbbs3/services.c
@@ -1707,6 +1707,7 @@ void DLLCALL services_thread(void* arg)
 	struct timeval	tv;
 	service_client_t* client;
 	char			ssl_estr[SSL_ESTR_LEN];
+	BOOL			need_cert = FALSE;
 
 	services_ver();
 
@@ -1841,11 +1842,7 @@ void DLLCALL services_thread(void* arg)
 					continue;
 				}
 				if(scfg.tls_certificate == -1) {
-					get_ssl_cert(&scfg, ssl_estr);
-					if (scfg.tls_certificate == -1) {
-						lprintf(LOG_ERR, "Error creating TLS certificate: %s", ssl_estr);
-						continue;
-					}
+					need_cert = TRUE;
 				}
 			}
 			service[i].set=xpms_create(startup->bind_retry_count, startup->bind_retry_delay, lprintf);
@@ -1911,6 +1908,12 @@ void DLLCALL services_thread(void* arg)
 		if(startup->started!=NULL)
     		startup->started(startup->cbdata);
 
+		if (need_cert) {
+			get_ssl_cert(&scfg, ssl_estr);
+			if (scfg.tls_certificate == -1)
+				lprintf(LOG_ERR, "Error creating TLS certificate: %s", ssl_estr);
+		}
+
 		lprintf(LOG_INFO,"0000 Services thread started (%u service sockets bound)", total_sockets);
 
 		/* Main Server Loop */