mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
crypto/tls: align cert decode alert w/ BSSL
For malformed client/server certificates in a TLS handshake send a decode_error alert, matching BoringSSL behaviour. Previously crypto/tls used a bad_certificate alert for this purpose. The TLS specification is imprecise enough to allow this to be considered a spec. justified choice, but since all other places in the protocol encourage using decode_error for structurally malformed messages we may as well do the same here and get some extra cross-impl consistency for free. This also allows un-ignoring the BoGo GarbageCertificate-[Client|Server]-[TLS12|TLS13] tests. Updates #72006 Change-Id: Ide45ba1602816e71c3289a60e77587266c3b9036 Reviewed-on: https://go-review.googlesource.com/c/go/+/652995 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Junyang Shao <shaojunyang@google.com> Reviewed-by: Roland Shoemaker <roland@golang.org>
This commit is contained in:
parent
5b4209fedb
commit
4635ad047a
3 changed files with 2 additions and 3 deletions
|
|
@ -54,7 +54,6 @@
|
||||||
"KyberKeyShareIncludedSecond": "we always send the Kyber key share first",
|
"KyberKeyShareIncludedSecond": "we always send the Kyber key share first",
|
||||||
"KyberKeyShareIncludedThird": "we always send the Kyber key share first",
|
"KyberKeyShareIncludedThird": "we always send the Kyber key share first",
|
||||||
"GREASE-Server-TLS13": "We don't send GREASE extensions",
|
"GREASE-Server-TLS13": "We don't send GREASE extensions",
|
||||||
"GarbageCertificate*": "TODO ask davidben, alertDecode vs alertBadCertificate",
|
|
||||||
"SendBogusAlertType": "sending wrong alert type",
|
"SendBogusAlertType": "sending wrong alert type",
|
||||||
"EchoTLS13CompatibilitySessionID": "TODO reject compat session ID",
|
"EchoTLS13CompatibilitySessionID": "TODO reject compat session ID",
|
||||||
"*Client-P-224*": "no P-224 support",
|
"*Client-P-224*": "no P-224 support",
|
||||||
|
|
|
||||||
|
|
@ -1096,7 +1096,7 @@ func (c *Conn) verifyServerCertificate(certificates [][]byte) error {
|
||||||
for i, asn1Data := range certificates {
|
for i, asn1Data := range certificates {
|
||||||
cert, err := globalCertCache.newCert(asn1Data)
|
cert, err := globalCertCache.newCert(asn1Data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.sendAlert(alertBadCertificate)
|
c.sendAlert(alertDecodeError)
|
||||||
return errors.New("tls: failed to parse certificate from server: " + err.Error())
|
return errors.New("tls: failed to parse certificate from server: " + err.Error())
|
||||||
}
|
}
|
||||||
if cert.cert.PublicKeyAlgorithm == x509.RSA {
|
if cert.cert.PublicKeyAlgorithm == x509.RSA {
|
||||||
|
|
|
||||||
|
|
@ -909,7 +909,7 @@ func (c *Conn) processCertsFromClient(certificate Certificate) error {
|
||||||
var err error
|
var err error
|
||||||
for i, asn1Data := range certificates {
|
for i, asn1Data := range certificates {
|
||||||
if certs[i], err = x509.ParseCertificate(asn1Data); err != nil {
|
if certs[i], err = x509.ParseCertificate(asn1Data); err != nil {
|
||||||
c.sendAlert(alertBadCertificate)
|
c.sendAlert(alertDecodeError)
|
||||||
return errors.New("tls: failed to parse client certificate: " + err.Error())
|
return errors.New("tls: failed to parse client certificate: " + err.Error())
|
||||||
}
|
}
|
||||||
if certs[i].PublicKeyAlgorithm == x509.RSA {
|
if certs[i].PublicKeyAlgorithm == x509.RSA {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue