如何在具有 ubuntu 16.04 的 lighttpd 伺服器上使用多個域設置letsencrypt?
我正在嘗試從頭開始在 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、…:連接請求文件名
'.'
和公鑰雜湊)生成該內容