For the complete documentation index, see llms.txt.

Go TLS Configuration

Go TLS Configuration
  4 min read

This is a summary of available algorithms in Go upstream TLS configuration, and the Chainguard Hardening changes to these.

Chainguard hardened TLS removes non-default, legacy, and deprecated algorithms to align with the Chainguard Hardened OpenSSL configuration. Everything it removes was already disabled by default in upstream Go, so default configurations don’t use any of it, and all of it has already been removed from Chainguard Hardened OpenSSL.

  • Go 1.27: Chainguard builds offer hardened TLS as an opt-in. Without opting in, they behave like upstream Go 1.27.
  • Go 1.28: Chainguard builds support only hardened TLS. Removed algorithms can’t be enabled.

Hardened TLS affects only applications that opt in to insecure settings:

  • Applications that rely on the tlsrsakex, tls3des, tls10server, tlssha1, or x509sha1 GODEBUG settings. Upstream Go has already removed all of these except tlssha1.
  • Applications that set Config.MaxVersion to TLS 1.1 or earlier.
  • Applications that list only removed cipher suites in Config.CipherSuites, without any that are still available.

All of these settings are insecure.

In the tables below, Default means enabled by default, Available means supported but enabled only through configuration, and Removed means not supported.

The tables are presented in the format similar to the IANA TLS Parameters.

For more information about Transport Layer Security (TLS) please see the following references:

TLS Versions

ValueVersionGo 1.27Go 1.27 HardenedGo 1.28
0x0304TLSv1.3DefaultDefaultDefault
0x0303TLSv1.2DefaultDefaultDefault
0x0302TLSv1.1AvailableRemoved
0x0301TLSv1.0AvailableRemoved

In Go 1.27, TLS 1.0 and 1.1 are only enabled when Config.MinVersion is set below VersionTLS12. Go 1.27 Hardened removes TLS 1.0 and 1.1, and Go 1.28 won’t support them.

TLS Cipher Suites

ValueCipher SuiteGo 1.27Go 1.27 HardenedGo 1.28
TLSv1.3
0x13,0x01TLS_AES_128_GCM_SHA256DefaultDefaultDefault
0x13,0x02TLS_AES_256_GCM_SHA384DefaultDefaultDefault
0x13,0x03TLS_CHACHA20_POLY1305_SHA256DefaultDefaultDefault
TLSv1.2
0x00,0x05TLS_RSA_WITH_RC4_128_SHAAvailableRemoved
0x00,0x0ATLS_RSA_WITH_3DES_EDE_CBC_SHAAvailableRemoved
0x00,0x2FTLS_RSA_WITH_AES_128_CBC_SHAAvailableRemoved
0x00,0x35TLS_RSA_WITH_AES_256_CBC_SHAAvailableRemoved
0x00,0x3CTLS_RSA_WITH_AES_128_CBC_SHA256AvailableRemoved
0x00,0x9CTLS_RSA_WITH_AES_128_GCM_SHA256AvailableRemoved
0x00,0x9DTLS_RSA_WITH_AES_256_GCM_SHA384AvailableRemoved
0xC0,0x07TLS_ECDHE_ECDSA_WITH_RC4_128_SHAAvailableRemoved
0xC0,0x09TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHADefaultDefaultDefault
0xC0,0x0ATLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHADefaultDefaultDefault
0xC0,0x11TLS_ECDHE_RSA_WITH_RC4_128_SHAAvailableRemoved
0xC0,0x12TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHAAvailableRemoved
0xC0,0x13TLS_ECDHE_RSA_WITH_AES_128_CBC_SHADefaultDefaultDefault
0xC0,0x14TLS_ECDHE_RSA_WITH_AES_256_CBC_SHADefaultDefaultDefault
0xC0,0x23TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256AvailableAvailableAvailable
0xC0,0x27TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256AvailableAvailableAvailable
0xC0,0x2BTLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256DefaultDefaultDefault
0xC0,0x2CTLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384DefaultDefaultDefault
0xC0,0x2FTLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256DefaultDefaultDefault
0xC0,0x30TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384DefaultDefaultDefault
0xCC,0xA8TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256DefaultDefaultDefault
0xCC,0xA9TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256DefaultDefaultDefault

TLS Supported Groups

ValueSupported GroupGo 1.27Go 1.27 HardenedGo 1.28
PQC TLSv1.3
514MLKEM1024AvailableRemoved
4587SecP256r1MLKEM768DefaultDefaultDefault
4588X25519MLKEM768DefaultDefaultDefault
4589SecP384r1MLKEM1024DefaultDefaultDefault
TLSv1.2 & TLSv1.3
23secp256r1DefaultDefaultDefault
24secp384r1DefaultDefaultDefault
25secp521r1DefaultDefaultDefault
29x25519DefaultDefaultDefault

TLS SignatureScheme

ValueSignature SchemeGo 1.27Go 1.27 HardenedGo 1.28
PQC TLSv1.3
0x0904mldsa44DefaultDefaultDefault
0x0905mldsa65DefaultDefaultDefault
0x0906mldsa87DefaultDefaultDefault
TLSv1.2 & TLSv1.3
0x0401rsa_pkcs1_sha256DefaultDefaultDefault
0x0403ecdsa_secp256r1_sha256DefaultDefaultDefault
0x0501rsa_pkcs1_sha384DefaultDefaultDefault
0x0503ecdsa_secp384r1_sha384DefaultDefaultDefault
0x0601rsa_pkcs1_sha512DefaultDefaultDefault
0x0603ecdsa_secp521r1_sha512DefaultDefaultDefault
0x0804rsa_pss_rsae_sha256DefaultDefaultDefault
0x0805rsa_pss_rsae_sha384DefaultDefaultDefault
0x0806rsa_pss_rsae_sha512DefaultDefaultDefault
0x0807ed25519DefaultDefaultDefault
TLSv1.2
0x0201rsa_pkcs1_sha1AvailableRemoved
0x0203ecdsa_sha1AvailableRemoved

In Go 1.27, SHA-1 signatures in the TLS 1.2 handshake require GODEBUG=tlssha1=1. In TLS 1.3, rsa_pkcs1_* and SHA-1 schemes are accepted only for signatures in certificates.

Elliptic Curves

OIDElliptic CurveGo 1.27Go 1.27 HardenedGo 1.28
1.2.840.10045.3.1.7prime256v1 (P-256, secp256r1)DefaultDefaultDefault
1.3.132.0.33secp224r1 (P-224)AvailableRemoved
1.3.132.0.34secp384r1 (P-384)DefaultDefaultDefault
1.3.132.0.35secp521r1 (P-521)DefaultDefaultDefault

In Go 1.27, P-224 certificates can only be used with TLS 1.2 and earlier, because TLS 1.3 ECDSA signature schemes are bound to P-256, P-384 and P-521.

Last updated: 2026-09-28 14:00