-
-
Notifications
You must be signed in to change notification settings - Fork 4.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Multiple certificate support (e.g. ECDSA & RSA) #1575
Comments
I'm not sure how this works (or should work with Caddy). Can you or someone elaborate? |
I think this is for the We can already specify multiple cert/key pairs:
e.g.
@lenovouser does that answer your issue? Seems to me like Caddy can already do this. |
@francislavoie yep, you can specify this - but it always uses only the last directive instead of deciding between |
Okay, what determines which one to use? |
It's determined by client support (based on the |
Also, some notes taken from the NGINX issue:
Just found out Apache supports this too |
Just had another thought - in case #1576 will be implemented and this here too, you should keep an eye on that the correct
|
Hi all It would be awesome if Caddy could create/manage both an EC and an RSA LetsEncypt cert - i'd see that as being pretty essential as part of this. Very happy to help with any testing/nginx-based input (i use EC & RSA concurrently in nginx right now). One final note, i don't think you need to have different session secret(s) for EC and RSA - unless that's something specific to Caddy and/or Go. Cheers! |
@neilstuartcraig I'll look into this; I'm definitely interested in Caddy using ECC over RSA. I am hoping we could just switch over to ECC without having to manage certs with obsolete crypto. I think having to manage both is just temporary and am not yet sure how complex this will be. Does someone want to throw together a proof of concept? |
@mholt - I'm probably missing something here (apologies if so) but Caddy already works for ECC. Specifying Being able to use both is currently mandatory for our audience demographics, we have anything from about 0.5% up to ~17% (i've checked this several times) of our audience who use clients which can't handle ECC. This variation is chiefly down to geography, for example, many of our users in Africa and also parts of Asia require RSA-based certs. This means that we absolutely must support at least RSA but we'd love to pref ECC above it in our server pref lists so that the majority of users on modern clients can reap the benefits. NGINX handles this really nicely so the same sort of operational model would be great - selecting the appropriate cert based on the client hello vs the server ciphersuite pref list. FWIW, I believe NGINX essentially hands off this whole procedure to OpenSSL, not sure if that would/wouldn't be the same for Go/Caddy but from memory, OpenSSL 1.01f+ handle it properly. I have literally never written a line of Go so it'd take me an age to produce anything but i'd be more than happy to help in any other way. Cheers |
@neilstuartcraig I need to see if the underlying lego library would support this; we'd request a second cert using an already-obtained authz, probably. But I don't know how this affects rate limits with Let's Encrypt and such, for the second issuance. |
@mholt - Yep, for sure. Do let me know if i can do anything useful (research, contacting people, docs, testing etc.). Really appreciate you spending time looking into this. Cheers |
The LE folks say that getting two of the same certificate (but of a different key type) still use two queries against the rate limit. Is it worth implementing this feature that is mainly useful only during this transitionary period to ECC that adds complexity and doubles the rate limit usage? |
My opinion would be that it's worth it for at least some use cases. As i mentioned previously, some of our audiences have ~17% of folk who can't do EC - so for them we need RSA, but it seems a shame to "punish" the majority, 83%, of that demographic (not to mention other geographies who are ~0.5% who can't do EC) with ~7x slower TLS handshakes. If the code complexity in Caddy is sufficiently high, perhaps it makes sense to ask Caddy users to manually manage their certs but if it's not so bad, it'd be a particularly nice feature (IMO). Of course, since Caddy supports TLS session tickets, handshake time is only a problem for first-time (per ticket secret lifetime) visitors - that too will obviously vary massively by user-base. FWIW, we're currently rotating TLS session secrets ~every 24h with a primary and secondary, thus a maximum session lifetime of ~48h - since we want to limit the scope of a compromised session secret. If number of LE API queries is the major issue, i think if it's clearly documented that EC + RSA means 2x API queries, it's a conscious choice for the user which puts the decision in their hands. Does that help? Apologies if i'm rambling nonsense :-) |
@mholt Your point about the rate limit is valid, even though I think it should be no problem if you make it opt-in (only if it is configured for dual certificate support) because the admin then chooses to do so. Also it could at least be implemented as a config file option for non-LE certificates if is too complex for LE and / or rate limiting. |
Okay. Well, we can give it a go, but I have other things on my priority list right now (API, proxy rewrite, telemetry, updates to the dev portal, etc...) so if somebody would like to take a stab at it, let us know! |
It's a nice feature. Currently I still use Nginx mainly because of this. In Nginx, there is a key called ssl_ciphers that can specify the enabled ciphers. To use ECDSA + RSA key, I set it to Here is SSL Server Test, you can see the server choose certificate correctly. I hope this is helpful |
Any update on this? |
Nice! That's great, thanks for doing this. It'll be a great feature
…On Thu, 10 Jan 2019, 11:00 Aaron, ***@***.***> wrote:
@lenovouser <https://github.com/lenovouser> @neilstuartcraig
<https://github.com/neilstuartcraig> @giuem <https://github.com/giuem>
Today I put up a job ad on reddit with a $1,000 reward for creating a pull
request which implements this feature.
I found at least one developer so far who is interested in working on
this. I'll keep you guys posted with their progress.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#1575 (comment)>, or mute
the thread
<https://github.com/notifications/unsubscribe-auth/AATi14w-vzy-TrhBhOAQpRtXiHV1NCpTks5vBx06gaJpZM4M8q0U>
.
|
@WhaleHub just wondering if there was ever any progress with that ad you put out? |
Is there any update for this requirement? |
This can be supported in Caddy 2 after Go 1.14 is released. But someone will have to propose and implement it. |
Great, looking forward to it will come soon. |
@mholt Just curious, what feature is planned for Go 1.14 that makes this possible? |
|
Yep, although we don't use Certificates, so technically it's this one:
Ooo and unrelated, but... it looks like this:
Will finally fix #2404. |
Attention @lenovouser @neilstuartcraig @giuem @may573 and others: This was a lot of work, but it's implemented in 6ca5828. Please try it out! Release candidates will be cut very shortly!! |
Like e.g. NGINX supports it
The text was updated successfully, but these errors were encountered: