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