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: