tls1.3 ctr panic in fips only mode
Nobody has claimed this yet.
- Dominant language
- Go
- Stars
- 431
- Forks
- 44
- Avg merge
- 21h 18m
- Merged PRs (30d)
- 30
Description
Microsoft build of Go version
1.24.3
What is your operating system and platform?
linux amd64
Output of go env in your module/workspace:
go env
What did you do?
build a go app spawning an http server with msft go fork, enable tls1.2 and tls1.3, start the app with fips only mode (https://go.dev/doc/security/fips140) and run ssltest to verify tls connectivity
What did you see happen?
panic during tls 1.3 handshakes:
http: panic serving 127.0.0.1:53824: crypto/cipher: use of CTR with non-AES ciphers is not allowed in FIPS 140-only mode
goroutine 143 [running]:
net/http.(*conn).serve.func1()
net/http/server.go:1947 +0xbe
panic({0x227f400?, 0x2925430?})
runtime/panic.go:792 +0x132
crypto/cipher.NewCTR({0x2940c70?, 0xc00019f1a0?}, {0xc000131100, 0x10, 0x79?})
crypto/cipher/ctr.go:46 +0x429
crypto/tls.(*Config).encryptTicket(0xc0003b2d20, {0xc000131080, 0x49, 0x80}, {0xc000174180, 0x10cb662?, 0xc000308790?})
crypto/tls/ticket.go:339 +0x1e8
crypto/tls.(*serverHandshakeState).sendSessionTicket(0xc000308750)
crypto/tls/handshake_server.go:873 +0x1c5
crypto/tls.(*serverHandshakeState).handshake(0xc000308750)
crypto/tls/handshake_server.go:125 +0x319
crypto/tls.(*Conn).serverHandshake(0xc00026dc08, {0x2944270, 0xc000340640})
crypto/tls/handshake_server.go:64 +0x111
crypto/tls.(*Conn).handshakeContext(0xc00026dc08, {0x2944238, 0xc0004046f0})
crypto/tls/conn.go:1568 +0x36b
crypto/tls.(*Conn).HandshakeContext(...)
crypto/tls/conn.go:1508
net/http.(*conn).serve(0xc0001cebd0, {0x2944238, 0xc000182c00})
net/http/server.go:1971 +0xeb3
created by net/http.(*Server).Serve in goroutine 137
net/http/server.go:3454 +0x485
What did you expect to see?
TLS 1.3 connection completing without issues
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the reported TLS 1.3 handshake in FIPS-only mode with the Microsoft Go build and ssltest. Start with crypto/cipher/ctr.go and crypto/tls/ticket.go, following the stack through Config.encryptTicket; done means the TLS 1.3 connection completes without the non-AES CTR panic.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- go
- Domain
- cryptography, security
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 42/100