On Mon, Sep 13, 2021 at 3:03 PM Sam Caldwell <m...@samcaldwell.net> wrote:

> Does anyone have any ideas of an easy path to load certificate and key
> files from a string rather than a file?
>
> *Use Case:*
> 1. traditionally we all put a cleartext file on disk with our private key
> and public certificate.  If the server is breached, we just regenerate all
> the things and move on.
> 2. I would like to store my certificates and keys in a more secure
> location (AWS SSM Param store, Hashicorp Vault, etc.).
> 3. The certificate is only read from file at startup as best I can tell,
> and relocating certificates and keys to an encrypted store would (a) allow
> better auditing when the content is accessed, (b) restrict access to only
> authorized processes and (c)  make rotating keys and certificates a much
> easier process.
>
> *Analysis:*
> *Current Functionality:*
> - We setup a server using ListenAndServeTLS() and pass in a filename for
> the certificate and key.
> - In go1.17.1/src/net/http/server.go at 3066, tls.LoadX509KeyPair() loads
> is called.
> - LoadX509KeyPair() exists at 230 in src/crypto/tls/tls.go and
>    - It calls os.ReadFile() at 231 and 235.
> *Possible Solution:*
> - We cannot break existing things, and within the limitations of golang,
> it is probably the least-disruptive solution to add a new
> ListenAndServeTLSFromVar() which would functionally do everything
> ListenAndServeTLS() does, but instead of reading a file, it would instead
> accept the input string as the certificate/key content.
> - Alternatively ListenAndServeTLSFromVar() would accept a boolean
> parameter which would determine if certificate and key parameters are
> filenames or content strings.  in this case, ListenAndServeTLSFromVar()
> would support both filenames and content string use cases and provide a
> path to unifying the approach if the community begins to adopt the use case
> identified above in large numbers.
>

You can already do this by creating an http.Server{} with a tls.Config
initialized from the certificates you have. You have to decode and parse
the certificates from strings to create the tls.Config.



>
> *Conclusion:*
> I'm willing to do the work and contribute the code to implement the above,
> but I wanted to solicit opinions first.  Ideally the functionality exists
> already and I am reinventing a wheel.  In that case, please point me in the
> right direction so I can focus my efforts on my current project.
>
> --
> You received this message because you are subscribed to the Google Groups
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to golang-nuts+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/golang-nuts/6e283ce3-7802-4765-9fd3-156d01c65bbbn%40googlegroups.com
> <https://groups.google.com/d/msgid/golang-nuts/6e283ce3-7802-4765-9fd3-156d01c65bbbn%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CAMV2RqoUG4XoXs%2BCfDdDeNqdtv9QXAX5mZ2En-P2jKL6zbSFpw%40mail.gmail.com.

Reply via email to