Go version
go version go1.24.0 linux/amd64
Output of go env in your module/workspace:
AR='ar'
CC='gcc'
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_ENABLED='1'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
CXX='g++'
GCCGO='gccgo'
GO111MODULE=''
GOAMD64='v1'
GOARCH='amd64'
GOAUTH='netrc'
GOBIN=''
GOCACHE='/home/scott/.cache/go-build'
GOCACHEPROG=''
GODEBUG=''
GOENV='/home/scott/.config/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFIPS140='off'
GOFLAGS=''
GOGCCFLAGS='-fPIC -m64 -pthread -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=/tmp/go-build240290176=/tmp/go-build -gno-record-gcc-switches'
GOHOSTARCH='amd64'
GOHOSTOS='linux'
GOINSECURE=''
GOMODCACHE='/home/scott/go/pkg/mod'
GOOS='linux'
GOPATH='/home/scott/go'
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/home/scott/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.0.linux-amd64'
GOSUMDB='sum.golang.org'
GOTELEMETRY='local'
GOTELEMETRYDIR='/home/scott/.config/go/telemetry'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/home/scott/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.0.linux-amd64/pkg/tool/linux_amd64'
GOVCS=''
GOVERSION='go1.24.0'
GOWORK=''
PKG_CONFIG='pkg-config'
What did you do?
In updating our software to 1.24, using FIPS mode (in our case BoringCrypto in order to be against a CMVP validated module), TLS broke in our cluster communication. We generate ECDSA P-521 keys for our certificates, which according to our read of Implementation Guidance for FIPS 140-3 and the Cryptographic Module Validation Program, and SP 800-186 is an allowed curve when paired with SHA-512 (ECDSAWithP521AndSHA512). These are rejected by Go 1.24, due to this list of allowed ciphers in crypto/tls/defaults.go:
// defaultSupportedSignatureAlgorithmsFIPS currently are a subset of
// defaultSupportedSignatureAlgorithms without Ed25519 and SHA-1.
var defaultSupportedSignatureAlgorithmsFIPS = []SignatureScheme{
PSSWithSHA256,
PSSWithSHA384,
PSSWithSHA512,
PKCS1WithSHA256,
ECDSAWithP256AndSHA256,
PKCS1WithSHA384,
ECDSAWithP384AndSHA384,
PKCS1WithSHA512,
}
This list over prunes defaultSupportedSignatureAlgorithms, losing the last non-SHA-1 line, or possibly P-521 wasn't allowed in FIPS 140-2 but is in -3. In addition, Ed25519 should probably also be supported in FIPS 140-3 (not -2 of course).
What did you see happen?
"error handshaking cluster connection: error="tls: peer doesn't support any of the certificate's signature algorithms"
What did you expect to see?
A successfully negotiated TLS connection.
Go version
go version go1.24.0 linux/amd64
Output of
go envin your module/workspace:What did you do?
In updating our software to 1.24, using FIPS mode (in our case BoringCrypto in order to be against a CMVP validated module), TLS broke in our cluster communication. We generate ECDSA P-521 keys for our certificates, which according to our read of Implementation Guidance for FIPS 140-3 and the Cryptographic Module Validation Program, and SP 800-186 is an allowed curve when paired with SHA-512 (ECDSAWithP521AndSHA512). These are rejected by Go 1.24, due to this list of allowed ciphers in
crypto/tls/defaults.go:This list over prunes defaultSupportedSignatureAlgorithms, losing the last non-SHA-1 line, or possibly P-521 wasn't allowed in FIPS 140-2 but is in -3. In addition, Ed25519 should probably also be supported in FIPS 140-3 (not -2 of course).
What did you see happen?
"error handshaking cluster connection: error="tls: peer doesn't support any of the certificate's signature algorithms"
What did you expect to see?
A successfully negotiated TLS connection.