diff --git a/src/interfaces/libpq/fe-secure-openssl.c b/src/interfaces/libpq/fe-secure-openssl.c
index 00b203cbfa..732ae70a89 100644
--- a/src/interfaces/libpq/fe-secure-openssl.c
+++ b/src/interfaces/libpq/fe-secure-openssl.c
@@ -1508,8 +1508,18 @@ open_client_SSL(PGconn *conn)
 			case SSL_ERROR_SYSCALL:
 				{
 					char		sebuf[PG_STRERROR_R_BUFLEN];
-
-					if (r == -1)
+					unsigned long vcode = SSL_get_verify_result(conn->ssl);
+
+					/*
+					 * If we get an X509 error here without an error in the
+					 * socket layer it means that verification failed without
+					 * it being a protocol error. A common cause is trying to
+					 * a default system CA which is missing or broken.
+					 */
+					if (!errno && vcode != X509_V_OK)
+						libpq_append_conn_error(conn, "SSL error: certificate verify failed: %s",
+												X509_verify_cert_error_string(ecode));
+					else if (r == -1)
 						libpq_append_conn_error(conn, "SSL SYSCALL error: %s",
 										  SOCK_STRERROR(SOCK_ERRNO, sebuf, sizeof(sebuf)));
 					else
