以下是我的tls后端:
package main import ( "fmt" "net/http" ) const ( PORT = ":8443" PRIV_KEY = "./private_key" PUBLIC_KEY = "./public_key" ) func rootHander(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "Nobody should read this.") } func main() { http.HandleFunc("/", rootHander) err := http.ListenAndServeTLS(PORT, PUBLIC_KEY, PRIV_KEY, nil) if err != nil { fmt.Printf("main(): %s\n", err) } }
密钥是使用以下两行生成的:
openssl genrsa -out private_key 2048 openssl req -new -x509 -key private_key -out public_key -days 365
当我启动tls服务器并使用浏览器(https://example.com:8443)访问站点时, 在 忽略浏览器警告 后 ,我得到了预期的结果:
Nobody should read this.
到目前为止,一切都很酷。
现在,当我将浏览器指向http://example.com:8443(注意使用的是http, 而不是 https)时,我得到了Firfox的以下结果(Chrome浏览器执行的操作相同,但是下载了该站点):
问题 :为什么会有问号?
如果将输出通过管道传输到od,,curl -k -3 http://localhost:8443 | od -A n -t x1则将获得以下15 03 01 00 02 02 0a由浏览器呈现/处理的字节序列。
curl -k -3 http://localhost:8443 | od -A n -t x1
15 03 01 00 02 02 0a
根据https://code.google.com/p/go/issues/detail?id=2253的说法,TLS是“我不明白您说什么”的TLS。