> Le 28 juil. 2017 à 12:41, Emmanuel Hocdet <[email protected]> a écrit :
> 
> 
> Hi Christopher
> 
>> Le 28 juil. 2017 à 11:08, Christopher Faulet <[email protected] 
>> <mailto:[email protected]>> a écrit :
>> 
>> Le 27/07/2017 à 18:16, Emmanuel Hocdet a écrit :
>>> Hi Willy, Emeric
>>> Can you consider this patch? I think it’s safe and it not depend on any 
>>> openssl version.
>>> (It’s possible since patch f6b37c67)
>> 
>> Hi Manu,
>> 
>> Since this commit, the certificates generation doesn't work anymore. I'm 
>> working on a patch. I'll send it today I guess.
>> 
>> To work, the certificates generation uses the default certificate, to get 
>> its private key. It uses it for the generated certificates. Generate keys is 
>> pretty expensive and the one from the default certificate is not worse than 
>> another.
>> 
>> Since commit f6b37c67, when certificates generation is performed, instead of 
>> the default certificate (default_ctx), the SSL connection is attached to the 
>> initial one (initial_ctx). The last one does not have private key, so the 
>> generation always fails.
>> 
> 
> Oh i remember now. I have discarded the split between initial_ctx and 
> default_ctx to not touch any dependancy with generate certificat.
> And introduce it finally in f6b37c67 to fix a bug.
> 
> The only dependancy to default_ctx is the private key?
> 
>> My first idea to fix the patch was to remove the initial_ctx. Because by 
>> checking all recent changes, it seems useless. Its initialization is done in 
>> the same time than default_ctx (that was not the case when initial_ctx was 
>> introduced in commit f6b37c67).
>> 
>> But it is definitely in conflict with you current patch. Because without 
>> initial_ctx, we need to have a default_ctx. So I can probably work around 
>> this problem. But before doing it, I prefer to know if your patch will be 
>> accepted or not :)
> 
> Private key is the only missing thing for generate certificat?
> 
> such patch can fix the issue?
> diff --git a/src/ssl_sock.c b/src/ssl_sock.c
> index c71c2e3..00ebb80 100644
> --- a/src/ssl_sock.c
> +++ b/src/ssl_sock.c
> @@ -4328,6 +4328,12 @@ int ssl_sock_prepare_all_ctx(struct bind_conf 
> *bind_conf)
>                         err += ssl_sock_prepare_ctx(bind_conf, sni->conf, 
> sni->ctx);
>                 node = ebmb_next(node);
>         }
> +
> +#ifndef SSL_NO_GENERATE_CERTIFICATES
> +       if (bind_conf->default_ctx) {
> +               SSL_CTX_use_PrivateKey(bind_conf->initial_ctx, 
> SSL_CTX_get0_privatekey(bind_conf->default_ctx));
> +       } /* else generate error */
> +#endif
>         return err;
>  }
> 
> 

. fix generate_certificates issue
perhaps it’s more simple to do:
diff --git a/src/ssl_sock.c b/src/ssl_sock.c
index c71c2e3..311d465 100644
--- a/src/ssl_sock.c
+++ b/src/ssl_sock.c
@@ -1587,7 +1587,7 @@ ssl_sock_do_create_cert(const char *servername, struct 
bind_conf *bind_conf, SSL
        int           key_type;
 
        /* Get the private key of the defautl certificate and use it */
-       if (!(pkey = SSL_get_privatekey(ssl)))
+       if (!pkey = SSL_CTX_get0_privatekey(bind_conf->default_ctx))
                goto mkcert_error;
 
        /* Create the certificate */

. for the patch "allow haproxy to start without default certificate"
default_ctx could be required when bind_conf.generate_certs is set.

> 
>> From my point of view, I can't see why anyone would want to start a SSL 
>> frontend without any certificate. Because it will reject all connections. 
>> Simos explained his use-case with Letsencrypt. But it is only useful for the 
>> first generation of the first certificate. It is easy to comment the SSL 
>> frontend at this step. Get a certificate from Letsencrypt or generate a 
>> default one by hand is quick and trivial. To automate this part, you can 
>> have a default certificate, probably self-signed, and the strict-sni 
>> parameter on the bind line (You already proposed this solution). For me, 
>> this is not a workaround, this is the way to do it. But that's just my 
>> opinion, I can understand the need :) So I'll let Willy and/or Emeric make 
>> the final decision.
> 
> A useless certificat should be provide with haproxy configuration?, it’s 
> definitely a workaround. It’s legacy from pre SNI.
> 
> ++
> Manu

Reply via email to