Безопасный сервер веб-сокетов в Go с помощью Autocert - PullRequest
0 голосов
/ 03 февраля 2019

Я пытаюсь настроить защищенный сервер веб-сокетов (wss://), используя 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

Это код, который я использую для запуска сервера веб-сокетов:

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("", "")
}

Itдолжен автоматически получить новый сертификат, если в кэше его нет (папка certs).Сообщение об ошибке говорит мне, что существует проблема при согласовании протокола при создании нового сертификата.Нужно ли где-нибудь добавлять поддерживаемые протоколы?

1 Ответ

0 голосов
/ 03 февраля 2019

Я не уверен, в чем ваша проблема, но пытаюсь добавить HostPolicy, чтобы сообщить менеджеру, на какой хост разрешено отвечать.вот пример https://github.com/kjk/go-cookbook/blob/master/free-ssl-certificates/main.go#L77

Примечание: в качестве рекомендации попробуйте использовать 443 или 8443 в качестве безопасных портов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...