Hello Oliver, On 12/1/2015 12:32 AM, Olivier Doucet wrote: > Hello, > > I'm digging out this thread, because having multiple certificate for one > single domain (SNI) but with different key types (RSA/ECDSA) can really > be a great functionality. Is there some progress ? How can we help ? >
In the mean time, you can use this: http://blog.haproxy.com/2015/07/15/serving-ecc-and-rsa-certificates-on-same-ip-with-haproxy/ > A subsidiary question is : how much ECDSA certificates are supported ? > So if I use a single ECDSA certificate, how many people wont be able to > see my content ? On a fairly busy site (couple tens of millions requests per day), roughly 85% of the clients have been found ECDSA capable. Regards, Nenad > > > Olivier > > > 2015-08-25 18:16 GMT+02:00 Willy Tarreau <[email protected] <mailto:[email protected]>>: > > Hi Dave, > > On Tue, Aug 25, 2015 at 03:50:23PM +0000, Dave Zhu (yanbzhu) wrote: > > Hey Willy, > > > > On 8/25/15, 10:36 AM, "Willy Tarreau" <[email protected] > <mailto:[email protected]>> wrote: > > > > >This means that the RSA/DSA/ECDSA cert names must be derived from the > > >original cert name. > > > > Iąve thought of a way to avoid this behavior, with the end result > being > > very similar to what you/Emeric proposed. > > > > What if we delayed the creation of the SSL_CTX until we have all the > certs > > specified by the config? > > In my opinion that only adds extra burden because this delay adds > loss of > knowledge or association between the certs that were initially loaded at > the same time. > > > We would read in all the certificates first and > > store them based on the CN/SAN inside the cert, or the SNIs specified by > > the admin. We would also store the auxiliary information as well at this > > point. Your tree would look like: > > > > Names -----> Certificates + aux info > > > > > > We then iterate on all of the Names and create an SSL_CTX for each Name > > based on the certificates available + any wildcard/negation filters we > > have. This will fill out our FQDN tree. After creating the > SSL_CTXąs we > > could free the original tree, as it would no longer be needed. > > > > In this scenario, each FQDN would have an SSL_CTX associated with it, > > which is a departure from the current model. While this may seem like a > > huge spike in memory footprint, consider that OpenSSL uses references > for > > keys and certificates. > > I'm not much concerned by this for now because when you have many FQDN, > you already have as many SSL_CTX today. I tend to consider that large > configs (the ones where memory footprint starts to matter) don't have > many names for each of their certs. For example the config that led to > crt-list being designed was working with 50000 certificates. I really > doubt that there were more than 1-2 names per cert on average, I'd even > bet something around 1.01 or so in average. > > > Therefore, the additional impact is limited to the > > extra pointers in SSL_CTX, instead of duplicating X509 or PKEY buffers. > We > > could also add additional logic to search through the current FQDN tree > > for łduplicate˛ SSL_CTX that contain the same cert/keys, and just > use the > > pointer instead of creating a new SSL_CTX. Given enough metadata around > > the SSL_CTX in the FQDN tree, this shouldnąt be too hard. > > That's the part I tend to dislike. If we later add extra parameters in > crt-list, we'll be happy to keep each line separate and *not* to merge > them. The example of validity dates was one such case but there could > be other ones. > > While this may seem a stupid or completely made up example, imagine that > we could specify on each line of the crt-list a filter on the source > network > to decide if the cert has to be presented or not. This way users could > decide that certs signed with official CAs are delivered to the public > while certs signed with internal CAs are delivered inside. Or even just > to use different algos depending on the network, for example test ECDSA > just on internal users first. As long as we keep all the elements of one > crt-list entry tied together, all such fantasy remains possible. When we > tear them apart and only focus on names to pack everything together, > this > is not possible anymore. You said yourself that the memory usage doesn't > matter much here, let's not risk to sacrify extensivity for the sake of > trying to compress just a few more bytes. > > > I feel that this would solve the problem of admins having to keep track > of > > the certificate names, and keep the current behavior of łLet HAProxy > > figure out the certs, hereąs a bunch of them˛. > > > > It would also solve the issue of conflicting names. For example: > > > > Cert A(RSA): > > > > CN: www.blahDomain.com <http://www.blahDomain.com> > > SANs: 1.blahDomain.com <http://1.blahDomain.com> > > 2.blahDomain.com <http://2.blahDomain.com> > > 3.blahDomain.com <http://3.blahDomain.com> > > > > Cert B(ECDSA) > > > > CN: www.blahDomain.com <http://www.blahDomain.com> > > > > SANs: 2.blahDomain.com <http://2.blahDomain.com> > > 3.blahDomain.com <http://3.blahDomain.com> > > 4.blahDomain.com <http://4.blahDomain.com> > > > > > > If we optimize the insertion logic via metadata, we would have the > > following in our FQDN tree: > > > > 1: Name=www.blahDomain.com <http://www.blahDomain.com>; SSL_CTX#1={Cert > A, > Cert B} > > 2: Name=1.blahDomain.com <http://1.blahDomain.com>; SSL_CTX#2={Cert A} > > > > 3: Name=2.blahDomain.com <http://2.blahDomain.com>; SSL_CTX#1={Cert > A, Cert B} > > > > 4: Name=3.blahDomain.com <http://3.blahDomain.com>; SSL_CTX#1={Cert > A, Cert B} > > > > 5: Name=4.blahDomain.com <http://4.blahDomain.com>; SSL_CTX#3={Cert B} > > > > > > Like your proposal, we would have 3 distinct SSL_CTXąs in memory, > and 5 > > entries in the FQDN table. > > In the case I proposed, it would be exactly the same, without > requiring to > merge all of them by name between different lines. > > > If the admin specified multiple certificates and wildcards that met the > > same criteria, we would have to decide on which cert goes into the > SSL_CTX > > for that FQDN. My personal preference is to use the explicit before the > > wildcard, but either way the logic would not be difficult. > > That's why I prefer not to change the existing selection logic which is > documented and deployed. Also, please keep in mind that changing > anything > here is really vicious because issues may happear days or weeks > after the > code change, just because some tricky setups were deployed and > happened to > work before the update. We definitely need to make users not lose > trust in > the product if it has been working well for a year or so for them. > > But overall, I think we're all aiming towards more or less the same > directions > and coming to comparable conclusions after identifying the same > problem, which > is encouraging! > > Thanks, > Willy > > >

