Lighttpd

如何在具有 ubuntu 16.04 的 lighttpd 伺服器上使用多個域設置letsencrypt?

  • November 23, 2018

我正在嘗試從頭開始在 lighttpd 上設置letsencrypt。我目前在 16.10 xenial 上執行 lighttpd,並希望將現有站點從 http 轉移到 https。我知道 Apache 和 ngnix 有一個自動設置過程,但我不願意把東西移過來。我有六個主機名,在一對使用虛擬主機託管的域上,每個主機都有單獨的塊。

我該怎麼做?

它需要一些試驗和錯誤,並將來自多個來源的位放在一起。

您可能希望根據自己的需要做一些不同的事情。在這種情況下,我沒有做一些人們包括在內的事情,還有一些事情是可選的。

我從這個指南開始,然後大相徑庭

如果您想生成自己的 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 是,你應該很好。

大多數工具都支持“啞網路伺服器”模式,在這種模式下,它們提供需要由您的網路伺服器在/.well-known/acme-challenge/目錄中提供服務的文件。

也可以使用某種動態語言(lua、php、…:連接請求文件名'.'和公鑰雜湊)生成該內容

引用自:https://serverfault.com/questions/842387