Skip to content

Commit

Permalink
crypto/tls: always send a Certificate message if one was requested.
Browse files Browse the repository at this point in the history
If a CertificateRequest is received we have to reply with a
Certificate message, even if we don't have a certificate to offer.

Fixes #3339.

R=golang-dev, r, ality
CC=golang-dev
https://golang.org/cl/5845067
  • Loading branch information
agl committed Mar 19, 2012
1 parent d05b386 commit aa1d417
Showing 1 changed file with 10 additions and 2 deletions.
12 changes: 10 additions & 2 deletions src/pkg/crypto/tls/handshake_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -166,8 +166,11 @@ func (c *Conn) clientHandshake() error {
}

var certToSend *Certificate
var certRequested bool
certReq, ok := msg.(*certificateRequestMsg)
if ok {
certRequested = true

// RFC 4346 on the certificateAuthorities field:
// A list of the distinguished names of acceptable certificate
// authorities. These distinguished names may specify a desired
Expand Down Expand Up @@ -238,9 +241,14 @@ func (c *Conn) clientHandshake() error {
}
finishedHash.Write(shd.marshal())

if certToSend != nil {
// If the server requested a certificate then we have to send a
// Certificate message, even if it's empty because we don't have a
// certificate to send.
if certRequested {
certMsg = new(certificateMsg)
certMsg.certificates = certToSend.Certificate
if certToSend != nil {
certMsg.certificates = certToSend.Certificate
}
finishedHash.Write(certMsg.marshal())
c.writeRecord(recordTypeHandshake, certMsg.marshal())
}
Expand Down

0 comments on commit aa1d417

Please sign in to comment.