Sorry for the delayed response.  I needed to noodle on this option and talk 
to some of the devs who would need to implement this.

1. Setting up an http.Server{} and tls.Config will work.  But it is a lot 
of effort for devs who want to focus on the business logic.
2. This creates more code the golang users (devs) need to implement and 
maintain...which disincentivizes a non-file-based approach.

I've created my own library to do what is suggested in this thread, but I'd 
say that as a community we should pursue a better option.
On Monday, September 13, 2021 at 4:14:01 PM UTC-5 bse...@computer.org wrote:

> On Mon, Sep 13, 2021 at 3:03 PM Sam Caldwell <ma...@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...@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/72cd125f-1b5f-499c-a7a5-2145b7d19202n%40googlegroups.com.

Reply via email to