hashicorp/nomad · error
Specified cipher suites don't support the certificate signat
Error message
Specified cipher suites don't support the certificate signature algorithm %s, consider adding more cipher suites to match this signature algorithm.
What it means
After parsing the cipher list, ParseCiphers cross-checks each cipher's signature algorithm (RSA vs ECDSA) against the signature algorithm of the configured certificate. If no specified cipher supports the certificate's signature algorithm, the TLS handshake could never succeed, so the function errors out with this guidance message.
Source
Thrown at helper/tlsutil/config.go:427
if keyLoader.GetCertificate() != nil {
supportedSignatureAlgorithm, err := getSignatureAlgorithm(keyLoader.GetCertificate())
if err != nil {
return []uint16{}, err
}
for _, cipher := range parsedCiphers {
if supportedCipherSignatures[cipher] == supportedSignatureAlgorithm {
// Positive case, return the matched cipher suites as the signature
// algorithm is also supported
return suites, nil
}
}
// Negative case, if this is reached it means that none of the specified
// cipher suites signature algorithms match the signature algorithm
// for the certificate.
return []uint16{}, fmt.Errorf("Specified cipher suites don't support the certificate signature algorithm %s, consider adding more cipher suites to match this signature algorithm.", supportedSignatureAlgorithm)
}
// Default in case this function is called but TLS is not actually configured
// This is only reached if the TLS certificate is nil
return []uint16{}, nil
}
// getSignatureAlgorithm returns the signature algorithm for a TLS certificate
// This is determined by examining the type of the certificate's public key,
// as Golang doesn't expose a more straightforward API which returns this
// type
func getSignatureAlgorithm(tlsCert *tls.Certificate) (signatureAlgorithm, error) {
privKey := tlsCert.PrivateKey
switch privKey.(type) {
case *rsa.PrivateKey:
return rsaStringRepr, nil
case *ecdsa.PrivateKey:
return ecdsaStringRepr, nilView on GitHub (pinned to 482b49bf1a)
Solutions
- Add cipher suites matching the certificate's signature algorithm (e.g. add TLS_ECDHE_ECDSA_* ciphers for an ECDSA cert).
- Or issue a certificate whose key type matches the configured cipher suites.
- Remove the restrictive tls_cipher_suites setting to use the defaults, which cover both algorithms.
Example fix
// before tls_cipher_suites = "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256" // cert is ECDSA // after tls_cipher_suites = "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"
Defensive patterns
Strategy: validation
Validate before calling
// ensure ciphers cover the cert's key type
isECDSA := cert.SignatureAlgorithm == x509.ECDSAWithSHA256 || cert.SignatureAlgorithm == x509.ECDSAWithSHA384
needPrefix := "TLS_ECDHE_RSA_"
if isECDSA { needPrefix = "TLS_ECDHE_ECDSA_" }
if !strings.Contains(tlsCipherSuites, needPrefix) {
return fmt.Errorf("add %s* ciphers to match cert signature algorithm", needPrefix)
} Prevention
- Pair cipher lists with certificate key types explicitly.
- When rotating certs, re-check tls_cipher_suites compatibility.
- Prefer omitting tls_cipher_suites to use safe defaults covering both algorithms.
When it happens
Trigger: Calling ParseCiphers with a certificate whose key is ECDSA (or RSA) while every cipher in TLSCipherSuites is for the other key type, e.g. an ECDSA cert paired only with TLS_ECDHE_RSA_* ciphers.
Common situations: Switching certificates from RSA to ECDSA (or vice versa) without updating tls_cipher_suites; restricting the cipher list too aggressively for hardening; automated TLS rotation changing the key type.
Understand the failure class
- SSL/TLS and certificate errors — how TLS handshakes and certificate validation fail.
Related errors
- no PEM-encoded data found
- failed to parse cert key pair: %w
- failed to parse cert bytes: %w
- Failed to read CA file: %v
- Failed to parse any valid certificates in CA file: %s
AI-assisted analysis of hashicorp/nomad@482b49bf1a (2026-09-04).
Data as JSON: /api/errors/1c379c5980477594.
Report an issue: GitHub.