Debian/Ubuntu上如何使用免费Lets Encrypt TLS/SSL证书保护Lighttpd
在Debian/Ubuntu Linux上,如何为Lighttpd Web服务器配置https?
如何使用Lets Encrypt免费SSL证书保护Lighttpd服务器?
如何使用Lets Encrypt免费TLS/SSL证书配置Lighttpd?
Lighttpd服务器如何配置HTTPS?
Linux web服务器如何安装TLS/SSL证书?
如何在Linux上使用Lets Encrypt设置Lighttpd?
配置说明
- Lighttpd默认的配置文件:
/etc/lighttpd/lighttpd.conf
- Ubuntu/Debian Linux默认的Lighttpd SSL配置文件:
/etc/lighttpd/conf-enabled/10-ssl.conf
- Lighttpd SSL认证目录:
/etc/lighttpd/ssl/theitroad.test/
- Lighttpd DocumentRoot(根)路径:
/var/www/html/
- TLS/SSL端口:
443
- 域名:
www.theitroad.test
- 公网IP:
171.32.32.111
安装acme.sh客户端
执行以下apt-get命令/apt命令:
$ sudo apt-get install git bc wget curl
使用git克隆脚本
执行以下命令,使用git克隆acme.sh客户端:
$ cd /tmp $ git clone https://github.com/Neilpang/acme.sh.git $ sudo -i # cd /tmp/acme.sh/ # ./acme.sh --install
创建/.well-known/acme-challenge/目录
创建目录并设置权限:
# mkdir -vp /var/www/html/.well-known/acme-challenge/ # chown -R www-data:www-data /var/www/html/.well-known/acme-challenge/ # chmod -R 0555 /var/www/html/.well-known/acme-challenge/
创建保存SSL证书的目录
执行以下mkdir命令:
# mkdir -p /etc/lighttpd/ssl/theitroad.test/
创建dhparam.pem文件
执行以下命令来创建Diffie-Hellman(DH)组文件:
# cd /etc/lighttpd/ssl/theitroad.test/ # openssl dhparam -out dhparam.pem -dsaparam 4096
为域名颁发证书
语法为:
acme.sh --issue -w /server.document-root-path/ -d www.example.com acme.sh --issue -w /var/www/html/ -d example.com -k 2048
这里我们为www.theitroad.test颁发证书:
# acme.sh --issue -w /var/www/html -d www.theitroad.test -k 4096
启用Lighttpd SSL模块
执行以下命令:
# lighttpd-enable-mod ssl
Enabling ssl: ok Run /etc/init.d/lighttpd force-reload to enable changes
在Lighttpd 中配置SSL
编辑文件/etc/lighttpd/conf-enabled/10-ssl.conf:
# vi /etc/lighttpd/conf-enabled/10-ssl.conf
参考配置:
# turn on ssl # $SERVER["socket"] == "0.0.0.0:443" { ssl.engine = "enable" ssl.disable-client-renegotiation = "enable" ssl.pemfile = "/etc/lighttpd/ssl/theitroad.test/ssl.pem" ssl.ca-file = "/etc/lighttpd/ssl/theitroad.test/ca.cer" ssl.dh-file = "/etc/lighttpd/ssl/theitroad.test/dhparam.pem" # ECDH/ECDHE ciphers curve strength ssl.ec-curve = "secp384r1" ssl.use-compression = "disable" # Environment flag for HTTPS enabled setenv.add-environment = ( "HTTPS" => "on" ) ssl.use-sslv2 = "disable" ssl.use-sslv3 = "disable" ssl.honor-cipher-order = "enable" ssl.cipher-list = "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH" # HSTS(15768000 seconds = 6 months) setenv.add-response-header = ( "Strict-Transport-Security" => "max-age=15768000;" ) }
下面的配置只支持Firefox 63,Android 10.0,Chrome 70,Edge 75,Java 11,OpenSSL 1.1.1,Opera 57和Safari 12.1:
# Only supports TLS 1.3 and no support for SSL 2/3 or TLS v/1.1/1.2 ssl.openssl.ssl-conf-cmd = ("Protocol" => "ALL, -SSLv2, -SSLv3, -TLSv1, -TLSv1.1, -TLSv1.2") ssl.cipher-list = "" ssl.honor-cipher-order = "disable"
以下配置支持Firefox 27,Android 4.4.2,Chrome 31,Edge,Windows 7上的IE 11,Java 8u31,OpenSSL 1.0.1,Opera 20和Safari 9:
# General-purpose servers with a variety of clients # All SSL suport disabled including TLS 1 and 1.1 # Only supports TLS 1.2 and 1.3 ssl.openssl.ssl-conf-cmd = ("Protocol" => "ALL, -SSLv2, -SSLv3, -TLSv1, -TLSv1.1") ssl.cipher-list = "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384" ssl.honor-cipher-order = "disable"
为Lighttpd Web服务器安装颁发的证书
首先为lighttpd ssl.pem文件创建一个钩子,如下所示:
# vi /root/.acme.sh/www.theitroad.test/hook.sh
脚本内容如下:
#!/bin/bash dom="www.theitroad.test" #your domain name dest="/etc/lighttpd/ssl/theitroad.test" #lighttpd ssl path root croot="/root/.acme.sh/${dom}" #acme.sh root path for your domain ### NO edit below ### sslfile="${dest}/ssl.pem" #lighttpd .pem file path certfile="${croot}/${dom}.cer" #lighttpd certficate file path keyfile="${croot}/${dom}.key" #lighttpd key file path echo "Running lighttpd cmd..." /bin/cat "${certfile}" "${keyfile}" > "${sslfile}" /bin/systemctl restart lighttpd
设置可执行权限:
# chmod +x /root/.acme.sh/www.theitroad.test/hook.sh
上面的脚本将创建一个/etc/lighttpd/ssl/theitroad.test/ssl.pem文件。
执行下面的命令,安装证书并重启lighttpd Web服务器:
# acme.sh --installcert -d www.theitroad.test \ --capath /etc/lighttpd/ssl/theitroad.test/ca.cer \ --reloadcmd '/root/.acme.sh/www.theitroad.test/hook.sh'
配置防火墙
配置UFW防火墙,打开443端口(https):
# ufw allow proto tcp from any to 171.32.32.111 port 443
测试
验证lighttpd是否在端口443上运行
# netstat -tulpn | grep ':443'
在浏览器中打开下面地址:
https://www.theitroad.test
如何升级acme.sh客户端?
# acme.sh --upgrade
如何续订Lets Encrypt SSL证书?
# acme.sh --renew -d www.theitroad.test
crontab 自动续订证书
可以在crontab添加计划任务,自动续订证书。
$ sudo crontab -l
计划任务示例:
1 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null