在golang net / http中处理TLSNextProto的正确方法是什么?

时间:2013-09-23 06:44:17

标签: http ssl https go

使用golang的net/http包和SPDY。有些事让我很困惑:

根本无法读取*tls.Conn TLSNextProto函数。任何读取尝试都将获得“通过对等方重置连接”错误。

运行以下程序,然后使用启用了SPDY的Chrome访问https://localhost:8080/

我是否以错误的方式使用TLS连接对象?请帮忙。

package main

import (
    "crypto/tls"
    "log"
    "net/http"
)

func main() {
    server := &http.Server{
        Addr: ":8080",
        TLSConfig: &tls.Config{
            NextProtos: []string{"spdy/3"},
        },
        TLSNextProto: map[string]func(*http.Server, *tls.Conn, http.Handler){
            "spdy/3": func(s *http.Server, conn *tls.Conn, h http.Handler) {
                buf := make([]byte, 1)
                if n, err := conn.Read(buf); err != nil {
                    log.Panicf("%v|%v\n", n, err)
                }
            },
        },
    }

    err := server.ListenAndServeTLS("/path/to/host.cert", "/path/to/host.key")
    if err != nil {
        log.Fatal(err)
    }
}

1 个答案:

答案 0 :(得分:1)

行。我知道了。这是证书问题。如果server.ListenAndServeTLS()使用的证书未由浏览器(Chrome)信任的CA签名,则将重置连接。要创建您自己的CA和证书,请遵循http://datacenteroverlords.com/2012/03/01/creating-your-own-ssl-certificate-authority/