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.

  • [email protected]A
    link
    English
    27 months ago

    I run a private CA for client SSL.
    For traditional server SSL I just use let’s encrypt, although I already have the domain (less than $10 a year) for my public facing stuff, and just use a subdomain of that one for my homelab.

    I have a container with openssl for the private CA and generating user certs as well as renewing the let’s encrypt ones. I just use openssl without anything fancy.
    The output folder is only mounted rw in that one container
    I only ever mount the subfolders in read-only in other containers that need those certs.
    All these containers are running on the same server so I don’t even have to copy anything around, the containers don’t even need connectivity between them, it’s just mounted where needed.

    • @[email protected]OP
      link
      fedilink
      English
      17 months ago

      I’d be very interested to hear your reasoning behind using a private CA for clients but using Let’s encrypt for servers. Thanks for the explanation on the OpenSSL setup!

      • [email protected]A
        link
        English
        27 months ago

        I’m just doing mutual TLS to authenticate clients which I use the pricate CA for.
        I could use the orivate CA for the server instead of lets encrypt and trust that on devices, but letsencrypt is easy enough and useful for other things that I open publicly. mTLS avoids needing a vpn for more sensitive services

        • @[email protected]OP
          link
          fedilink
          English
          2
          edit-2
          7 months ago

          Did you design your lab infrastructure to operate in a zero trust security framework? I’m very interested; I never really grasped mTLS, but I’m going to try and read more about it. Thanks!

          Edit: Alright, I understand the high-level concept of mTLS. Just need to check the implementation details with my reverse-proxy

          • [email protected]A
            link
            English
            27 months ago

            Not really, although now that I have certs for those anyway, maybe I should.
            More like I’m using some services on the go that I want to always work, whether I’m on the LAN or on the go.
            Opening home automation or 3d printers to the Internet is unwise to say the least.
            mTLS in the reverse proxy for those allows me to have more security without having to establish a VPN first.

            • @[email protected]OP
              link
              fedilink
              English
              27 months ago

              Oh, that’s a great idea! Indeed, using certificates to identify yourself would work quite well in such a scenario. Whilst I would always use a VPN server, this has given me something new to think about! Thanks!

              • [email protected]A
                link
                English
                27 months ago

                What’s nice is it provides a similar level of protection to using a VPN with PKI, but just for that specific subdomain. While a VPN would be have to be connected manually before use (or all the time), this is built-in.

                The odds of someone breaking through the mTLS and breaking through that application’s security at the same time are much smaller than either separately.
                If you don’t have a valid cert, you’re dropped by the reverse proxy before anything even gets passed to the server behind it.

                I’m a big fan of it.