Quellcode durchsuchen

crypto/tls: set Conn.ConnectionState.ServerName unconditionally

Moves the state.ServerName assignment to outside the if
statement that checks for handshakeComplete.

Fixes #15571

Change-Id: I6c4131ddb16389aed1c410a975f9aa3b52816965
Reviewed-on: https://go-review.googlesource.com/22862
Run-TryBot: Adam Langley <agl@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Adam Langley <agl@golang.org>
tls13
Atin M vor 8 Jahren
committed by Adam Langley
Ursprung
Commit
4b78482c8b
2 geänderte Dateien mit 43 neuen und 1 gelöschten Zeilen
  1. +2
    -1
      conn.go
  2. +41
    -0
      handshake_server_test.go

+ 2
- 1
conn.go Datei anzeigen

@@ -1246,6 +1246,8 @@ func (c *Conn) ConnectionState() ConnectionState {

var state ConnectionState
state.HandshakeComplete = c.handshakeComplete
state.ServerName = c.serverName

if c.handshakeComplete {
state.Version = c.vers
state.NegotiatedProtocol = c.clientProtocol
@@ -1254,7 +1256,6 @@ func (c *Conn) ConnectionState() ConnectionState {
state.CipherSuite = c.cipherSuite
state.PeerCertificates = c.peerCertificates
state.VerifiedChains = c.verifiedChains
state.ServerName = c.serverName
state.SignedCertificateTimestamps = c.scts
state.OCSPResponse = c.ocspResponse
if !c.didResume {


+ 41
- 0
handshake_server_test.go Datei anzeigen

@@ -1080,6 +1080,47 @@ func TestClientAuth(t *testing.T) {
runServerTestTLS12(t, test)
}

func TestSNIGivenOnFailure(t *testing.T) {
const expectedServerName = "test.testing"

clientHello := &clientHelloMsg{
vers: VersionTLS10,
cipherSuites: []uint16{TLS_RSA_WITH_RC4_128_SHA},
compressionMethods: []uint8{compressionNone},
serverName: expectedServerName,
}

serverConfig := testConfig.clone()
// Erase the server's cipher suites to ensure the handshake fails.
serverConfig.CipherSuites = nil

c, s := net.Pipe()
go func() {
cli := Client(c, testConfig)
cli.vers = clientHello.vers
cli.writeRecord(recordTypeHandshake, clientHello.marshal())
c.Close()
}()
hs := serverHandshakeState{
c: Server(s, serverConfig),
}
_, err := hs.readClientHello()
defer s.Close()

if err == nil {
t.Error("No error reported from server")
}

cs := hs.c.ConnectionState()
if cs.HandshakeComplete {
t.Error("Handshake registered as complete")
}

if cs.ServerName != expectedServerName {
t.Errorf("Expected ServerName of %q, but got %q", expectedServerName, cs.ServerName)
}
}

func bigFromString(s string) *big.Int {
ret := new(big.Int)
ret.SetString(s, 10)


Laden…
Abbrechen
Speichern