]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: ssl: add extra chain compatibility
authorEmmanuel Hocdet <manu@gandi.net>
Mon, 3 Dec 2018 17:07:44 +0000 (18:07 +0100)
committerWilliam Lallemand <wlallemand@haproxy.org>
Tue, 30 Jul 2019 13:53:54 +0000 (15:53 +0200)
cert_key_and_chain handling is now outside openssl 1.0.2 #if: the
code must be libssl compatible. SSL_CTX_add1_chain_cert and
SSL_CTX_set1_chain requires openssl >= 1.0.2, replace it by legacy
SSL_CTX_add_extra_chain_cert when SSL_CTX_set1_chain is not provided.

src/ssl_sock.c

index b6b70571f99e9fe8de58e8db9222d82f032366aa..cd05421cc532e46e137aa31c27aa3d14f9e8905d 100644 (file)
@@ -3045,11 +3045,24 @@ static int ssl_sock_put_ckch_into_ctx(const char *path, const struct cert_key_an
        }
 
        /* Load all certs in the ckch into the ctx_chain for the ssl_ctx */
+#ifdef SSL_CTX_set1_chain
         if (!SSL_CTX_set1_chain(ctx, ckch->chain)) {
                memprintf(err, "%sunable to load chain certificate into SSL Context '%s'. Make sure you are linking against Openssl >= 1.0.2.\n",
                          err && *err ? *err : "", path);
                return 1;
        }
+#else
+       { /* legacy compat (< openssl 1.0.2) */
+               X509 *ca;
+               while ((ca = sk_X509_shift(ckch->chain)))
+                       if (!SSL_CTX_add_extra_chain_cert(ctx, ca)) {
+                               memprintf(err, "%sunable to load chain certificate into SSL Context '%s'.\n",
+                                         err && *err ? *err : "", path);
+                               X509_free(ca);
+                               return 1;
+                       }
+       }
+#endif
 
        if (SSL_CTX_check_private_key(ctx) <= 0) {
                memprintf(err, "%sinconsistencies between private key and certificate loaded from PEM file '%s'.\n",