我正在尝试使用wss://
来设置安全的Websocket服务器(acme/autocert
)。该程序启动,但是当我尝试连接到它时,出现以下错误:
http: TLS handshake error from <IP>: acme/autocert:
unable to authorize "<my domain>"; challenge "tls-alpn-01" failed with error:
acme: authorization error for <my domain>: 403 urn:acme:error:unauthorized:
Cannot negotiate ALPN protocol "acme-tls/1" for tls-alpn-01 challenge
这是我用来启动websocket服务器的代码:
func Run() {
hub = newHub()
go hub.run()
mux := http.NewServeMux()
mux.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) {
serveWs(hub, w, r)
})
certManager := autocert.Manager{
Prompt: autocert.AcceptTOS,
Cache: autocert.DirCache("certs"),
}
server := &http.Server{
Addr: ":8080",
Handler: mux,
TLSConfig: &tls.Config{
GetCertificate: certManager.GetCertificate,
},
}
go server.ListenAndServeTLS("", "")
}
当缓存(certs
文件夹中没有证书)时,它将自动获得新证书。错误消息告诉我在创建新证书时协商协议时出现问题。我需要在某处添加受支持的协议吗?
答案 0 :(得分:1)
我不确定您的问题是什么,但是尝试添加HostPolicy以便让管理员知道允许哪个主机响应。这里是一个示例https://github.com/kjk/go-cookbook/blob/master/free-ssl-certificates/main.go#L77
注意:建议您尝试使用443或8443作为安全端口。