mirror of
https://github.com/golang/go
synced 2024-11-25 05:57:57 -07:00
http: do TLS handshake explicitly before copying TLS state
Previously we were snapshotting the TLS state into *Request before we did the HTTP ReadRequest, the first Read of which triggered the TLS handshake implicitly. Fixes #1956 R=golang-dev, rsc CC=agl, golang-dev https://golang.org/cl/4630072
This commit is contained in:
parent
9843ca5e2b
commit
7e29f1add8
@ -522,7 +522,12 @@ func TestHeadResponses(t *testing.T) {
|
|||||||
|
|
||||||
func TestTLSServer(t *testing.T) {
|
func TestTLSServer(t *testing.T) {
|
||||||
ts := httptest.NewTLSServer(HandlerFunc(func(w ResponseWriter, r *Request) {
|
ts := httptest.NewTLSServer(HandlerFunc(func(w ResponseWriter, r *Request) {
|
||||||
fmt.Fprintf(w, "tls=%v", r.TLS != nil)
|
if r.TLS != nil {
|
||||||
|
w.Header().Set("X-TLS-Set", "true")
|
||||||
|
if r.TLS.HandshakeComplete {
|
||||||
|
w.Header().Set("X-TLS-HandshakeComplete", "true")
|
||||||
|
}
|
||||||
|
}
|
||||||
}))
|
}))
|
||||||
defer ts.Close()
|
defer ts.Close()
|
||||||
if !strings.HasPrefix(ts.URL, "https://") {
|
if !strings.HasPrefix(ts.URL, "https://") {
|
||||||
@ -530,20 +535,17 @@ func TestTLSServer(t *testing.T) {
|
|||||||
}
|
}
|
||||||
res, err := Get(ts.URL)
|
res, err := Get(ts.URL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
if res == nil {
|
if res == nil {
|
||||||
t.Fatalf("got nil Response")
|
t.Fatalf("got nil Response")
|
||||||
}
|
}
|
||||||
if res.Body == nil {
|
defer res.Body.Close()
|
||||||
t.Fatalf("got nil Response.Body")
|
if res.Header.Get("X-TLS-Set") != "true" {
|
||||||
|
t.Errorf("expected X-TLS-Set response header")
|
||||||
}
|
}
|
||||||
body, err := ioutil.ReadAll(res.Body)
|
if res.Header.Get("X-TLS-HandshakeComplete") != "true" {
|
||||||
if err != nil {
|
t.Errorf("expected X-TLS-HandshakeComplete header")
|
||||||
t.Error(err)
|
|
||||||
}
|
|
||||||
if e, g := "tls=true", string(body); e != g {
|
|
||||||
t.Errorf("expected body %q; got %q", e, g)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -152,6 +152,7 @@ func newConn(rwc net.Conn, handler Handler) (c *conn, err os.Error) {
|
|||||||
c.buf = bufio.NewReadWriter(br, bw)
|
c.buf = bufio.NewReadWriter(br, bw)
|
||||||
|
|
||||||
if tlsConn, ok := rwc.(*tls.Conn); ok {
|
if tlsConn, ok := rwc.(*tls.Conn); ok {
|
||||||
|
tlsConn.Handshake()
|
||||||
c.tlsState = new(tls.ConnectionState)
|
c.tlsState = new(tls.ConnectionState)
|
||||||
*c.tlsState = tlsConn.ConnectionState()
|
*c.tlsState = tlsConn.ConnectionState()
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user