From d6e98c8b0547ebf9c0180e8e5c0f30e4007371e3 Mon Sep 17 00:00:00 2001 From: yuhan6665 <1588741+yuhan6665@users.noreply.github.com> Date: Sat, 12 Sep 2026 20:09:36 -0400 Subject: [PATCH] crypto/tls: check FIPS 140-3 compliance of leaf even with InsecureSkipVerify Fixes #80074 Change-Id: I5c619a090293a7668e26699c29b194a56a6a6964 Reviewed-on: https://go-review.googlesource.com/c/go/+/804200 Reviewed-by: Daniel McCarney Auto-Submit: Filippo Valsorda Reviewed-by: Mark Freeman LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com Reviewed-by: Cherry Mui --- handshake_client.go | 7 ++++++- handshake_server.go | 6 ++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/handshake_client.go b/handshake_client.go index 3aa4ef3..9f766ee 100644 --- a/handshake_client.go +++ b/handshake_client.go @@ -1162,9 +1162,14 @@ func (c *Conn) verifyServerCertificate(certificates [][]byte) error { } } + if fips140tls.Required() && !isCertificateAllowedFIPS(certs[0]) { + c.sendAlert(alertBadCertificate) + err := errors.New("server's certificate is not allowed in FIPS 140-3 mode") + return &CertificateVerificationError{UnverifiedCertificates: certs, Err: err} + } + switch certs[0].PublicKey.(type) { case *rsa.PublicKey, *ecdsa.PublicKey, ed25519.PublicKey: - break case *mldsa.PublicKey: if c.vers < VersionTLS13 { c.sendAlert(alertIllegalParameter) diff --git a/handshake_server.go b/handshake_server.go index 4e8d531..a749cc0 100644 --- a/handshake_server.go +++ b/handshake_server.go @@ -994,6 +994,12 @@ func (c *Conn) processCertsFromClient(certificate Certificate) error { c.scts = certificate.SignedCertificateTimestamps if len(certs) > 0 { + if fips140tls.Required() && !isCertificateAllowedFIPS(certs[0]) { + c.sendAlert(alertBadCertificate) + err := errors.New("client's certificate is not allowed in FIPS 140-3 mode") + return &CertificateVerificationError{UnverifiedCertificates: certs, Err: err} + } + switch certs[0].PublicKey.(type) { case *ecdsa.PublicKey, *rsa.PublicKey, ed25519.PublicKey: case *mldsa.PublicKey: