Hey!
Thanks for your response, and I'm sorry for the delay in responding, I was getting pulled in a few other directions.
I passed some of your concerns off to a colleague of mine who packages and maintains OpenSSL, who had this response:
```
I am not using Google Groups so I cannot reply to the e-mail directly
but here is my opinion:
We are (at least for now) aiming at making the enabled algorithms and
other parameters in the TLS stack implementation configurable. There is
no requirement to disallow applications to use some algorithm outside
of TLS that is disallowed by the policy if that application forcibly
chooses it.
I do not know the details of the TLS stack in go so I do not know if it
provides any configuration knobs in form of API calls at all. I.e.
whether you can choose which ciphersuites are used/enabled, which
signature algorithms are allowed, which groups for ECDH and DH are
allowed, what is the minimum key size and DH parameter size, which TLS
protocol version are enabled, etc. in a connection. If there are no
such knobs, I understand that implementing the configurability is a
non-trivial task.
The mechanism is already implemented in the three main TLS
implementations that we have in RHEL - openssl, gnutls, and nss. All
these three libraries load a configuration file on their initialization
that selects the default set of algorithms used and allowed in TLS. The
support in these three libraries slightly differs but the basic
principle is the same.
As for having newer versions of Go support for newer algorithms - yes,
that is of course a slight complication. However our use in crypto-
policies in RHEL (or other Linux based OSes) and having the crypto-
policies being part of the OS ensures that we always have the policy
consistent with the library version that we ship.
In general two possible approaches can be taken in the policy
configuration - either start from no algorithms and add enabled ones,
or start from the default set and subtract algorithms that should be
disabled. Either of these have its pros/cons and both of them would be
acceptable.
To avoid completely breaking things on mismatches between the crypto
policy configuration and the go TLS library version the loading/parsing
of the configuration should tolerate old algorithms that are no longer
support or in general any unknown algorithms. This is how for example
the OpenSSL configuration works. However as I said it is a role of the
OS crypto policy vendor to avoid shipping old/broken crypto policy with
the go stack so other behavior such as completely breaking the TLS
stack or having an error logged and ignoring the policy if it is broken
is also acceptable.
I hope this explanation helps.
```