一尘不染

在浏览器中不使用https时,Golang ListenAndServeTLS返回数据

go

以下是我的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浏览器执行的操作相同,但是下载了该站点):

使用http

问题 :为什么会有问号?


阅读 606

收藏
2020-07-02

共1个答案

一尘不染

如果将输出通过管道传输到od,,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。

2020-07-02