如何在具有 ubuntu 16.04 的 lighttpd 服务器上设置具有多个域的 letsencrypt?

如何在具有 ubuntu 16.04 的 lighttpd 服务器上设置具有多个域的 letsencrypt?

我正在尝试从头开始在 lighttpd 上设置 letsencrypt。我目前在 16.10 xenial 上运行 lighttpd,并希望将现有网站从 http 移至 https。我知道 Apache 和 ngnix 有一个自动设置过程,但我不愿意将所有内容移至 https。我有六个主机名,分布在一对使用虚拟主机托管的域上,每个主机都有单独的块。

我该如何做呢?

答案1

大多数工具都支持“哑网络服务器”模式,在该模式中,它们在目录中提供需要由网络服务器提供的文件/.well-known/acme-challenge/

也可以使用某些动态语言(lua、php、...:连接请求文件名'.'和公钥哈希)来生成该内容

答案2

这需要一些反复试验,并将来自多个来源的信息整合在一起。

你可能希望根据自己的需要做一些不同的事情。在这种情况下,我没有完成了一些人们包括的事情,还有一些事情是可选的。

我从这个开始指导并且分歧很大

如果你想生成自己的 ssl.dh 文件现在做。这是可选的,需要一段时间

cd /etc/ssl/certs

然后

openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096速度很慢,有点多余 openssl dhparam -dsaparam -out etc/ssl/certs/dhparam.pem快很多

接下来,按照以下说明安装 letsencrypt 的 certbot指示

$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install certbot

生成证书。我选择为“example.com”域中的所有主机都生成一个证书,并为“example.org”生成一个单独的证书。

certbot 使用你的 Web 服务器端口,因此关闭首先是你的 lighttpd 实例

生成证书只需运行

certbot certonly --standalone -d example.org用于一个域名和 certbot certonly --standalone -d example.com -d chat.example.com证书中的多个域名(最多 20 个)。

lighttpd 需要一个 pem 文件,而 letsencrypt 需要一对(最初!),因此您需要合并它们。转到cd /etc/letsencrypt/live/每个文件夹并运行cat privkey.pem cert.pem > ssl.pem

为了我们的目的,我们假设您在“/etc/letsencrypt/live/chat.example.com/”和“/etc/letsencrypt/live/example.org/”中有文件

为了测试目的,我们假设您希望将其中一个证书作为默认证书,并且您希望保持端口 80 可用以进行测试,以查看服务器是否以您的更改启动。

添加区块阅读

$SERVER["socket"] == ":443" {
    ssl.engine                  = "enable"
    ssl.pemfile                 = "/etc/letsencrypt/live/chat.example.com/ssl.pem"
    ssl.ca-file                 = "/etc/letsencrypt/live/chat.example.com/fullchain.pem"

}

您可以稍后替换它,这是最低限度,可让您与 http 一起运行 https。

任何没有明确设置连接到 https 的主机都将使用这些证书。这是一组可行且最小的测试设置。

启动lighttpd并测试。

现在,如果你严肃的您可能需要更多设置,例如使用我们讨论过的 ssl.dh 设置,并且您花了两个小时在开始时生成一个 dhparam.pem 文件。您可以用类似这样的内容替换刚刚添加的块 - 这作为整个服务器的默认设置。

$SERVER["socket"] == ":443" {
ssl.engine                  = "enable"
ssl.pemfile                 = "/etc/letsencrypt/live/chat.example.com/ssl.pem"
ssl.ca-file                 = "/etc/letsencrypt/live/chat.example.com/fullchain.pem"
ssl.dh-file                 = "/etc/ssl/certs/jmg2dhparam.pem"
ssl.ec-curve                = "secp384r1"
ssl.honor-cipher-order      = "enable"
ssl.cipher-list             = "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"
ssl.use-compression         = "disable"
}

$HTTP["scheme"] == "http" {
    # capture vhost name with regex conditiona -> %0 in redirect pattern
    # must be the most inner block to the redirect rule
    $HTTP["host"] =~ ".*" {
        url.redirect = (".*" => "https://%0$0")
    }
}

它使用更全面的设置(根据个人喜好进行调整)来实现 HTTPS,并将任何 HTTP 连接重定向到 HTTPS。

如果您想要具有不同密钥集的域,您可以在主机块中覆盖这些设置。

$HTTP["host"] =~ "(^|\.)example\.org$" {
server.document-root = "/var/www/example"
server.errorlog = "/var/log/lighttpd/example/error.log"
accesslog.filename = "/var/log/lighttpd/example/access.log"
server.error-handler-404 = "/e404.php"
ssl.pemfile                 = "/etc/letsencrypt/live/example.org/ssl.pem"
ssl.ca-file                 = "/etc/letsencrypt/live/example.org/fullchain.pem"
}

重新启动服务器,进行测试以确保端口 80 不可连接,并且 https 可以连接,这样就没问题了。

相关内容