If anyone having problems generating certificates via command line utilities, then create it online.
Does it generate private keys server side? Or client side?
currently only server side. Shall i develop additional step for uploading private csr?
opps, yes - to say the least. Private keys should remain private. You shouldn’t be generating them on your webpage for people to download with their certificates - horribly insecure.
What the difference if key.pem is in already their PC compared to key.pem is in their PC after download?
What the difference between hosting companies holding key.pem vs online key.pem?
I`m 2 decade developer while you can find 5 months hosting company oferring “secure” free ssl :S
Have a look at the discussion - Easiest way to use Let's Encrypt
If I was a user of your system then I have to agree to the terms ( understandably) of the Let’s Encrypt Subscriber Agreement. In that it states that need to immediately revoke the certificate if a key has been compromised, and that is defined ( amongst other things) as
“A Private Key is said to be compromised if its value has been disclosed to an unauthorized person, an unauthorized person has had access to it, or there exists a practical technique by which an unauthorized person may discover its value.”
Now, I’m sure you are a perfectly honest person, but I have zero knowledge of how secure your server, script etc is and you are not an “authorised person” as far as I’m concerned to hold my private key. You are essentially asking me to trust you, and your script / server security. If someone did hack into your server, how are you going to inform everyone who has generated a key through your server that they need to revoke their certificate and generate a new one ?
If it’s on my server ( as it needs to be ) for my website, then I have a series of controls / permissions etc that I use to manage access, and unless a hacker accesses into the server all access is “authorised”. If someone unauthorized got in, I’d be revoking my keys.
I agree, the technical support and server admin folk at a web hosting provider can have access to the server / website / private key. They are all under certain agreements though that provide access under given rules. The key difference here, is that’s all under my control, on my server ( even if a shared server ) it’s all in one place, and never been elsewhere.
You most definitely MUST develop the process for generating the private key in a private place - the client-side browser. Use JS to test if the browser/OS can handle the math, randomness, etc., but that key should never be seen, in any format, by anyone, or anything, except the user and their computer, until they place it on their server (hopefully using secure transport.) https://zerossl.com/ does it that way, and it works well. It also will make the browser create a secure connection - directly - with LE for generating/sending the LE account key.
@serverco, I think it’s clear that people working on the Let’s Encrypt project disfavor key-generation-as-a-service and recommend that client developers not use this model. But if I remember correctly from the earlier thread, we haven’t had a formal statement about whether the key-generation service, separate from a hosting service, could be considered “an unauthorized person” for subscriber agreement purposes. (edit) So, I just want to point out that this might be a policy issue, but hasn’t been resolved yet.
@schoen I agree.
Sorry if I did not make it clear, when I was saying “I have zero knowledge of how secure your server, script etc is and you are not an “authorised person” as far as I’m concerned to hold my private key” I was meaning me - not an official Let’s Encrypt statement - since I can’t provide that, as I’m nothing to do with Let’s Encrypt
Nope. Nope. Nope. Not gonna trust a random website with my private keys. They are private for a reason. Even if they were generated client-side, I still wouldn’t trust it.
@Ersatz, there are several web-based clients now. The list of clients thread mentions
As I recall, the latter two do private key generation in the browser, while the former does it online. This was already debated at
As you can see in that thread, a number of people were quite uncomfortable with the server-side key generation and saw it as inappropriate. (I definitely agree that it’s not a good idea.)
Of course, no one can make you use or endorse any web-based client. A possible area for ongoing discussion is whether server-side key generation is a scary enough practice that it should be against the CA’s terms of service. In that case it might be necessary to find a way to draw the definitional line between using a key-generation service and hiring an IT contractor to generate the private key on the contractor’s laptop, where there’s no straightforward way of proving that the contractor deleted all the copies of the private key after generating it.
Almost all hosting environments require trusting someone with access to the private key, for example because they can peek inside your VM image or tamper with your physical hardware’s memory or boot sequence. A best practice is to minimize the number of entities that have to be trusted with key access (and maybe different virtualization technologies will make it somewhat safer in the future).
Once i come back from holiday ill redevelop my last step.
- Use server key/vsr
- Upload your csr
btw this code i used in more then 5 hosting companies hire me to develop custom integration, but nvm.
@batoo I believe there is a major difference between a website, as a 3rd party, generating the private key on their server, and the hosting company generating the key on their server. In the latter case, that is where the key will be stored and used anyway, so it is no less, or more, secure during generation than during usage on that self-same server. In the former case, the 3rd party server has access to the key, in some fashion, whether it is accessed or not. Then that key has to be downloaded to the user’s browser, stored on their computer (maybe), then uploaded to the target server. That’s two transmissions, both subject to MitM, and probably a double copy/paste on the user’s computer, which in my case is likely to be as secure as a sponge, and the copy stored on that computer for later discovery by some virus/worm/trojan later.
I have very little knowledge about comp-sec, and just try to go with my “sense” of what’s safe. Even though it’s not the way I do it, it’s probably best to have the server that will use the key generate it, and store it, without that key even being downloaded to anyone’s computer - including the person doing the all the work, whether contracted IT, site owner, or in my case hobbyist.
As I understand the automated clients, such as certbot, do all the work, including key generation, on the target server, so even the IT contractor shouldn’t need to generate/store anything on his laptop either.
I can’t automate on my server, yet, so I have used the web site to get and renew the certs, and I wouldn’t want to use the one where keys, or anything else, is generated, or seen, by the web site.
Just my .5 cents worth.
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.