Your help is much appreciated. Security is of paramount importance so I must take everything into consideration. I am learning so feel free to provide useful feedback.
On Thu, Jun 30, 2022 at 7:22 AM Robert Engels <reng...@ix.netcom.com> wrote: > I don’t think it needs to be that complicated just load the client public > certs into the server. Validate upon usage that the cert is still valid. > Easy to authenticate clients this way. This is how ssh works with > certificate based authentication. Peer to peer is a little harder but > usually you get the valid certs from a trusted server. > > > On Jun 30, 2022, at 6:35 AM, Konstantin Khomoutov <kos...@bswap.ru> > wrote: > > > > On Mon, Jun 27, 2022 at 05:35:38PM -0700, Hugh Myrie wrote: > > > >> I wish to create a secure private network using a self-signed > certificate > >> with a Go web server: See the following code block: > >> > >> // Code > >> err := http.ListenAndServeTLS(":"+port, "auto.org.pem", > >> "auto.org-key.pem", handler) > >> if err != nil { > >> > >> logError((err.Error())) > >> log.Fatal("ListenAndServe: ", err) > >> } > >> // End of Code > >> > >> Could I auto generate (and register) the .pem and .key files using > GO? I > >> wish to create a trust certificate if there files do not exist. > >> > >> I came across the following website: > >> > >> "https://gist.github.com/shaneutt/5e1995295cff6721c89a71d13a71c251" > >> > >> I am not sure how to implement this. Your help is appreciated. > > > > I'm afraid there may be a critical flaw in your approach as a concept. > > I'll try to explain how I perceive it. I might be wrong in my > assessment, and > > if yes, please excuse me - I'm just trying to help. > > > > OK, so, TLS has two conceptual facets in the way it implements secure > data > > exchange tunnels: encryption (information hiding) and mutual > authentication. > > Based on my experience, people tend to ignore the second one while > fixating on > > the former. Maybe this comes from the extensive usage of web browsers, in > > which using of certificates for authentication most of the time is > strictly > > one-way - most websites to not require their clients to authenticate on > the > > TLS level, and authenticating of the websites is well hidden under the > hood. > > > > Now consider implementing a custom "secure private network" with the > help of > > TLS. Say, your server accepts TLS sessions from its clients, and uses > > a self-signed certificate and the matching key. Now, have you thought > out how > > this server will make sure that a client wanting to connect to actually > has > > the permission to do that? Conversely, how the client knows the server is > > legitimate and was not spoofed using a Man-in-the-Middle attack? > > > > To authenticate clients, you might implement some non-TLS method - such > as > > passwords. This would work, but when architecting a secure communication > > system you should apply "security mindset" when thinking: if the client > has > > set up a TLS session with a rogue server, any information the client > sends to > > that session must be considered as compromised, and any imformation > received > > must not be trusted (unless there's a way to reliably verify it). This > inclues > > the password exchange. You could implement a secure password exchange > scheme > > which does not result in disclosing the password (only proves its > knowledge) > > but the rogue server can just tell the client it authenticated OK, and > then > > start accepting actual data from the client. You could implement the > reverse > > scheme to also authenticate the server to the client, and this would > require > > keeping the server's password on each client. > > > > OK, so TLS is already able to authenticate both sides to each other - > using > > certificates. There are two ways do do it. The "normal" one is to trust a > > certificate presented during a TLS handshake exchange by trusting > whoever had > > issued that certificate (and hence signed it). The "punk" way is to > check the > > so-called fingerprint - a cryptographic hash calculated on the > certificate's > > data - to match whatever stored at the authenticating side. > > > > Add to the picture that the server usually wants to have a way to prevent > > certain clients - which would otherwise be properly authenticated - from > > accessing the server - usually because they have been compromised somehow > > (consider a stolen laptop which contains the cert+key used to access the > > server). Again, TLS has a way to support this - through the so-called > > certificate revocation list, CRL, which can list otherwise valid > certificates > > which must be considered not eligible for use - "revoked". > > > > So, what I'm leading to, is basically these two things: > > > > - Proper framework for mutual authentication of the server(s) and the > clients > > forming a secure network requires careful planning and implementing. > > > > An often overlooked aspect of it is managing keys used for > authentication. > > > > - TLS already implements support for both mutual authentication during > session > > initiation phase, and for implementing the key management framework. > > > > Not using these features should require careful consideration: security > is > > notoriously hard to get right, and one has to think twice before > forfeiting > > tried-and-tested solutions. Autogenerating a self-signed certificate and > > sticking it into a library call which starts a HTTPS server looks like > merely > > looking for TLS-encryption without considering authentication. > > > > OK, so, should you decide to acually rely on TLS to do proper > authentication, > > you will need to read up on how authentication based on X.509 > certificates > > actually works, what certification authoriries (CAs) are, and how > certificates > > are to be issued and maintained and revoked. > > > > Note that it's not required to maintain a full-blown certification > authority > > (CA) to generate certificates and keys for the servers and the clients. > > You _will_ need a CA, but "low-tech" solutions to do that do exist - > such as a > > set of scripts shipped in the form of a package named "easy-rsa" for > Debian > > and its derivatives (such as Ubuntu). > > > > -- > > 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/20220630113506.ky4a25f6ovrciccf%40carbon > . > -- http://www.jaxtr.com/blessed_hope -- 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/CAN-X3%3DZdOzLRe8AwUA-0QstS3aHvPafttLy4wk83e3enpZ-cBw%40mail.gmail.com.