Я попытался запустить этот пример кода из документации autocert, изменив его на использование моего домена:
package main
import (
"fmt"
"log"
"net/http"
"golang.org/x/crypto/acme/autocert"
)
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, TLS user! Your config: %+v", r.TLS)
})
log.Fatal(http.Serve(autocert.NewListener("mydomain.work"), mux))
}
В браузере я увидел ошибку CloudFlare, сообщающую Error 525 SSL handshake failed
. Вывод программы Go был
2020/02/27 00:44:10 http: TLS handshake error from 172.69.22.250:26624: acme/autocert: unable to satisfy "https://acme-v02.api.letsencrypt.org/acme/authz-v3/3031814088" for domain "mydomain.work": no viable challenge type found
Проблема сохранялась, когда я отключил функцию CloudTlare Always Use HTTPS, которая блокировала вызов http-01. Это также сохранялось, когда я отключал TLS в консоли CloudFlare. Наконец-то я заработал, вернувшись к BaseI c DNS NameCheap.
Мне нравится функциональность CloudFlare, поэтому у меня возникает вопрос: как заставить пакет autocert Go работать с CloudFlare? Или это не нужно, потому что я мог бы просто использовать самозаверяющий сертификат с параметром полного шифрования CloudFlare?