Contents
  1. 1. 安装openssl
  2. 2. 使用Let’s Encrypt获取免费ssl证书
  3. 3. 配置lighttpd
  4. 4. 自动每月更新证书
  5. 5. 重定向http服务到https(如果需要)
  6. 6. 参考资料

本文介绍了如何在lighttpd上配置https访问,使用Let’s Encrypt获取免费SSL证书,以及自动更新证书
by kowen

安装openssl

1
apt-get install openssl*

执行以下命令看到有(ssl)即代表成功

1
lighttpd -v

使用Let’s Encrypt获取免费ssl证书

let’s encrypt是比较流行的一个免费ssl证书颁发机构,我们使用简易的脚本来获取,见参考资料1

  1. 建立目录,下载脚本

    1
    2
    3
    4
    5
    mkdir letsencrypt
    cd letsencrypt
    wget https://raw.githubusercontent.com/xdtianyu/scripts/master/lets-encrypt/letsencrypt.conf
    wget https://raw.githubusercontent.com/xdtianyu/scripts/master/lets-encrypt/letsencrypt.sh
    chmod +x letsencrypt.sh
  2. 修改配置文件letsencrypt.conf,把 DOMAIN_KEY DOMAIN_DIR DOMAINS 三个参数改为你自己的信息,注意把LIGHTTPD=TRUE前的#号删除,否则不能生成pem文件。比如:

    1
    2
    3
    4
    5
    6
    ACCOUNT_KEY="letsencrypt-account.key"
    DOMAIN_KEY="kowen.cn.key"
    DOMAIN_DIR="/var/www/blog-public"
    DOMAINS="DNS:kowen.cn,DNS:www.kowen.cn"
    \#ECC=TRUE
    LIGHTTPD=TRUE

注意:需要已经绑定DOMAINS的域名到 DOMAIN_DIR 指定的目录,即通过 http://kowen.cn http://www.kowen.cn 可以访问到 /var/www/blog-public 目录,用于域名的验证.否则会出现错误

  1. 执行命令生成一系列文件
    1
    ./letsencrypt.sh letsencrypt.conf

里面有两个lighttpd用到的文件:
 lets-encrypt-x3-cross-signed.pem和kowen.pem,其中kowen.pem是lighttpd配置文件中的ssl.pemfile,lets-encrypt-x3-cross-signed.pem是ssl.ca-file

配置lighttpd

通过编辑配置文件 /etc/lighttpd/lighttpd.conf来启用ssl,有几种方式可供选择。配置完成后要重启lighttpd服务生效。

  1. 让服务器仅提供https访问,全局设置中添加ssl配置,更改服务端口为443

    1
    2
    3
    4
    ssl.engine = "enable"
    ssl.pemfile = "/root/letsencrypt/kowen.pem"
    ssl.ca-file = "/root/letsencrypt/lets-encrypt-x3-cross-signed.pem"
    server.port = 443 #将原来的端口改为443
  2. 不改变原配置,添加443端口访问

    1
    2
    3
    4
    5
    $SERVER["socket"] == ":443" {
    ssl.engine = "enable"
    ssl.pemfile = "/etc/lighttpd/certs/www.example.com.pem"
    ssl.ca-file = "/etc/lighttpd/fullchain.pem"
    }
  3. 设置443端口为新的虚拟主机

    1
    2
    3
    4
    5
    6
    $SERVER["socket"] == ":443" {
    server.document-root = "/srv/ssl" # use your ssl directory here
    ssl.engine = "enable"
    ssl.pemfile = >"/etc/lighttpd/certs/www.example.com.pem"
    ssl.ca-file = "/etc/lighttpd/fullchain.pem"
    }
  4. 为不同的虚拟主机配置不同的证书文件

    1
    2
    3
    4
    5
    6
    7
    8
    $HTTP["host"] == "www.example.org" {
    ssl.pemfile = "/etc/lighttpd/certs/www.example.org.pem"
    sl.ca-file = "/etc/lighttpd/fullchain.pem"
    }
    $HTTP["host"] == "mail.example.org" {
    ssl.pemfile = "/etc/lighttpd/certs/mail.example.org.pem"
    sl.ca-file = "/etc/lighttpd/fullchain.pem"
    }

自动每月更新证书

Let’s Encrypt有有效期,需要续期才能继续使用

编辑定时任务

1
crontab -e

添加以下任务,根据你的Letsencrypt脚本目录进行相应修改

1
2
# m h dom mon dow command
0 0 1 * * /root/letsencrypt/letsencrypt.sh /root/letsencrypt/letsencrypt.conf >> /var/log/lets-encrypt.log>&1

重定向http服务到https(如果需要)

首先要在配置中添加重定向组件:

1
2
3
4
5
server.modules = (
...
"mod_redirect",
...
)

然后配置虚拟主机80端口重定向到https服务:

1
2
3
4
5
6
$SERVER["socket"] == ":80" {
$HTTP["host"] =~ "example.org" {
url.redirect = ( "^/(.*)" => "https://example.org/$1" )
server.name = "example.org"
}
}

也可以重定向所有端口到对应https服务:

1
2
3
4
5
$SERVER["socket"] == ":80" {
$HTTP["host"] =~ "(.*)" {
url.redirect = ( "^/(.*)" => "https://%1/$1" )
}
}

参考资料

Contents
  1. 1. 安装openssl
  2. 2. 使用Let’s Encrypt获取免费ssl证书
  3. 3. 配置lighttpd
  4. 4. 自动每月更新证书
  5. 5. 重定向http服务到https(如果需要)
  6. 6. 参考资料