One great aspect of the certificates is that they can be revoked - so simply revoking a certificate will disable access across the board. Certificates are also supported by HSM and the like. It can simplify and secure the systems according to accepted security standards a bit more straightforward in my opinion.
Passwords are going away… > On Jun 30, 2022, at 11:55 AM, Martin Schnabel <m...@mb0.org> wrote: > > Sorry, i may have misunderstood the private network part, hope my answer was > helpful anyway. My usecase was a local area network without a fixed ip or dns > names, like common home network appliances. I thought about using client > certificates too, but decided it would be easier to use common session cookie > based password authentication over the tls connection. > > But now i am interested if i am missing something. What would be the reason > to use client certificates instead? > >> On 6/30/22 16:29, Hugh Myrie wrote: >> 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 >> <mailto: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 <mailto: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 >> <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 >> <mailto:golang-nuts%2bunsubscr...@googlegroups.com>. >> > To view this discussion on the web visit >> >> https://groups.google.com/d/msgid/golang-nuts/20220630113506.ky4a25f6ovrciccf%40carbon >> >> <https://groups.google.com/d/msgid/golang-nuts/20220630113506.ky4a25f6ovrciccf%40carbon>. >> -- >> http://www.jaxtr.com/blessed_hope <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 >> <mailto: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 >> >> <https://groups.google.com/d/msgid/golang-nuts/CAN-X3%3DZdOzLRe8AwUA-0QstS3aHvPafttLy4wk83e3enpZ-cBw%40mail.gmail.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/C0B93337-A4C4-43B5-9DFE-3467D4F67CF4%40ix.netcom.com.