this post was submitted on 01 Dec 2023
62 points (100.0% liked)

Selfhosted

40347 readers
592 users here now

A place to share alternatives to popular online services that can be self-hosted without giving up privacy or locking you into a service you don't control.

Rules:

  1. Be civil: we're here to support and learn from one another. Insults won't be tolerated. Flame wars are frowned upon.

  2. No spam posting.

  3. Posts have to be centered around self-hosting. There are other communities for discussing hardware or home computing. If it's not obvious why your post topic revolves around selfhosting, please include details to make it clear.

  4. Don't duplicate the full text of your blog or github here. Just post the link for folks to click.

  5. Submission headline should match the article title (don’t cherry-pick information from the title to fit your agenda).

  6. No trolling.

Resources:

Any issues on the community? Report it using the report flag.

Questions? DM the mods!

founded 1 year ago
MODERATORS
 

Hi, I was looking at private CAs since I don't want to pay for a domain to use in my homelab.

What is everyone using for their private CA? I've been looking at plain OpenSSL with some automation scripts but would like more ideas. Also, if you have multiple reverse-proxy instances, how do you distribute domain-specific signed certificates to them? I'm not planning to use a wildcard, and would like to rotate certificates often.

Thanks!


Edit: thank you for everyone who commented! I would like to say that I recognise the technical difficulty in getting such a setup working compared to a simple certbot setup to Let's Encrypt, but it's a personal choice that I have made.

you are viewing a single comment's thread
view the rest of the comments
[–] TCB13@lemmy.world 6 points 11 months ago (1 children)

Written in go, very small and portable: https://github.com/FiloSottile/mkcert. There's also step-ca, bigger and uses ACME to deploy certificates, never used it tho.

Just be awake of the risks involved with running your own CA.

[–] MigratingtoLemmy@lemmy.world 2 points 11 months ago (1 children)

Thanks, could you tell me why one would run this over plain OpenSSL with automation? Also, what risks would I run running a private CA? I'd love to know!

[–] TCB13@lemmy.world 2 points 11 months ago* (last edited 11 months ago) (1 children)

could you tell me why one would run this over plain OpenSSL with automation?

Those projects essentially are the automation...

what risks would I run running a private CA? I’d love to know!

https://security.stackexchange.com/questions/205174/what-are-the-risks-of-installing-a-ca-on-the-same-machine-as-openvpn-server

More or less you're adding a root certificate to your systems that will effectively accept any certificate issues with your CA's key. If your PK gets stolen somehow and you don't notice it, someone might be issuing certificates that are valid for those machines. Also real CA's also have ways to revoke certificates that are checked by browsers (OCSP and CRLs), they may employ other techniques such as cross signing and chains of trust. All those make it so a compromised certificate is revoked and not trusted by anyone after the fact.

[–] MigratingtoLemmy@lemmy.world 1 points 11 months ago (1 children)

I do realise the security problem in keeping the private key safe. I plan to use a VM with encrypted storage underneath. Do you think that's OK for a homelab, or should I invest time into integrating HSM modules from Nitrokey?

[–] TCB13@lemmy.world 1 points 11 months ago (1 children)

Why are you pushing for your own CA in the first place?

[–] MigratingtoLemmy@lemmy.world 1 points 11 months ago (1 children)

I would not like to use a public domain for my internal network. By extension, I do not want any public CA to know the domains and subdomains I use in my lab and home network

[–] TCB13@lemmy.world 1 points 11 months ago (1 children)

Okay that's fair but if your only concern is about "I do not want any public CA to know the domains and subdomains I use" you get around that.

Let's Encrypt now allows for wildcard so you can probably do something like *.network.example.org and have an SSL certificate that will cover any subdomain under network.example.org (eg. host1.network.example.org). Or even better, get a wildcard like *.example.org and you'll be done for everything.

I'm just suggesting this alternative because it would make your life way easier and potentially more secure without actually revealing internal subdomains to the CA.

Another option is to just issue certificates without a CA and accept them one at the time on each device. This won't expose you to a possibly stolen CA PK and you'll get notified if previously the accepted certificate of some host changes.

openssl req -x509 -nodes -newkey rsa:2048 \
-subj "/CN=$DOMAIN_BASE/O=$ORG_NAME/OU=$ORG_UNIT_NAME/C=$COUNTRY" \
-keyout $DOMAIN_BASE.key -out $DOMAIN_BASE.crt -days $OPT_days "${ALT_NAMES[@]}"
[–] MigratingtoLemmy@lemmy.world 2 points 11 months ago (1 children)

My apologies, I didn't word my concerns properly in the moment. I would like to run a private CA simply because I do not want to use a public domain for my internal network. It makes me deeply uncomfortable to use a public domain and get public certificates for something inherently so private (it's more philosophical than technical, although I suppose that's where a lot of opinionated technical decisions come from anyway). Your solution is elegant and simple, but I really do want to do it completely internally, and move towards zero trust security practices as I do. Basically, I want to start training myself on the security side of SRE in my lab, running services which matter to me and working like the more paranoid SRE teams in corporations work....I know this sounds like fantasy, and my needs might change going forward, but I'm also hoping to learn a lot from this and hopefully make this as robust as I can. Having a good security posture makes me feel warm inside :)

[–] TCB13@lemmy.world 2 points 11 months ago (1 children)

It makes me deeply uncomfortable to use a public domain and get public certificates for something inherently so private

You can obviously run your own CA, great exercise but why? What really makes you that uncomfortable? Once you go with the wildcard nobody will know about your internal hosts or whatever. Even if the domain is taken down, you're offline or wtv your local DNS server will still be able to serve replies to those internal subdomains. You don't need to publish those subdomains (A records) in a public DNS server, just on your own internal DNS server.

I guess if you rally want to take the CA route those tools I provided before are the best option. Simply issuing a certificate (without a CA) and allowing it on a browser might also work for you - less risks of stolen PK as described.

I hope the links and tips helped you in some way.