]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
* modules/ssl/ssl_engine_init.c (ssl_init_server_certs): Add error
authorJoe Orton <jorton@apache.org>
Tue, 8 May 2018 12:50:26 +0000 (12:50 +0000)
committerJoe Orton <jorton@apache.org>
Tue, 8 May 2018 12:50:26 +0000 (12:50 +0000)
  logno. Free EVP_PKEY in engine case.  Never try reading ECDH/DH
  parameters from engine ids.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1831173 13f79535-47bb-0310-9956-ffa450edef68

modules/ssl/ssl_engine_init.c

index 75879326c48186f920298a6d0ce4506a7834257f..514825f91458150aed2168a0af179d081e2ed8a2 100644 (file)
@@ -1302,7 +1302,7 @@ static apr_status_t ssl_init_server_certs(server_rec *s,
 
             if (cert) {
                 if (SSL_CTX_use_certificate(mctx->ssl_ctx, cert) < 1) {
-                    ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO()
+                    ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(10137)
                                  "Failed to configure engine certificate %s, check %s",
                                  key_id, certfile);
                     ssl_log_ssl_error(SSLLOG_MARK, APLOG_EMERG, s);
@@ -1320,6 +1320,9 @@ static apr_status_t ssl_init_server_certs(server_rec *s,
                 ssl_log_ssl_error(SSLLOG_MARK, APLOG_EMERG, s);
                 return APR_EGENERAL;
             }
+
+            /* SSL_CTX now owns the key */
+            EVP_PKEY_free(pkey);
         }
         else if ((SSL_CTX_use_PrivateKey_file(mctx->ssl_ctx, keyfile,
                                               SSL_FILETYPE_PEM) < 1)
@@ -1412,8 +1415,9 @@ static apr_status_t ssl_init_server_certs(server_rec *s,
     /*
      * Try to read DH parameters from the (first) SSLCertificateFile
      */
-    if ((certfile = APR_ARRAY_IDX(mctx->pks->cert_files, 0, const char *)) &&
-        (dhparams = ssl_dh_GetParamFromFile(certfile))) {
+    certfile = APR_ARRAY_IDX(mctx->pks->cert_files, 0, const char *);
+    if (certfile && !modssl_is_engine_id(certfile)
+        && (dhparams = ssl_dh_GetParamFromFile(certfile))) {
         SSL_CTX_set_tmp_dh(mctx->ssl_ctx, dhparams);
         ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(02540)
                      "Custom DH parameters (%d bits) for %s loaded from %s",
@@ -1425,10 +1429,10 @@ static apr_status_t ssl_init_server_certs(server_rec *s,
     /*
      * Similarly, try to read the ECDH curve name from SSLCertificateFile...
      */
-    if ((certfile != NULL) && 
-        (ecparams = ssl_ec_GetParamFromFile(certfile)) &&
-        (nid = EC_GROUP_get_curve_name(ecparams)) &&
-        (eckey = EC_KEY_new_by_curve_name(nid))) {
+    if (certfile && !modssl_is_engine_id(certfile)
+        && (ecparams = ssl_ec_GetParamFromFile(certfile))
+        && (nid = EC_GROUP_get_curve_name(ecparams)) 
+        && (eckey = EC_KEY_new_by_curve_name(nid))) {
         SSL_CTX_set_tmp_ecdh(mctx->ssl_ctx, eckey);
         ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(02541)
                      "ECDH curve %s for %s specified in %s",