Нужна помощь в автоматизации обработки сертификатов TLS в Go - PullRequest
1 голос
/ 21 июня 2020

У меня простой веб-сервер Go, и я хочу, чтобы он использовал сертификаты TLS. Я знаю certbot, приложение python, и до сих пор часто им пользовался, но мне хотелось бы все в значительной степени автоматизировать. Вот где я наткнулся на https://github.com/caddyserver/certmagic, что довольно круто. Однако я не могу осмыслить, используя его в сочетании с настраиваемой структурой сервера.

srv := http.Server{
    ReadTimeout: 1 * time.Second,
    WriteTimeout: 2 * time.Second,
    IdleTimeout: 10 * time.Second,
    ReadHeaderTimeout: 2 * time.Second,
    Handler: router,
    Addr: serverAddr,
}

if fileExists(serverCertFile) && fileExists(serverKeyFile) {
    if err := srv.ListenAndServeTLS(serverCertFile, serverKeyFile); err != nil && err != http.ErrServerClosed {
        panic("Couldn't start server with TLS")
    }
} else {
    if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
        panic("Couldn't start server")
    }
}

До сих пор я подходил к проблеме таким образом, просто используя вручную запрошенные сертификаты. Есть предложения?

1 Ответ

1 голос
/ 21 июня 2020

Документы здесь предлагают использовать Listen() вместо HTTPS(), чтобы использовать свои собственные http.Server значения.

listener, err := certmagic.Listen([]string{"yourdomain.com"})

srv := http.Server{
    ReadTimeout: 1 * time.Second,
    WriteTimeout: 2 * time.Second,
    IdleTimeout: 10 * time.Second,
    ReadHeaderTimeout: 2 * time.Second,
    Handler: router,
    Addr: serverAddr,
}

srv.Serve(listener)

Документ для Listent()

Listen управляет сертификатами для domainName и возвращает прослушиватель TLS. Он использует конфигурацию по умолчанию. Поскольку эта удобная функция возвращает только прослушиватель с поддержкой TLS и не предполагает, что HTTP также обслуживается, запрос HTTP будет отключен. Переменная пакета Default изменена так, что запрос HTTP отключен. Вызов этой функции означает ваше согласие с Соглашением с подписчиком и / или Условиями обслуживания.

...