使用acme.sh从Let's encrypt获取https证书
给网站添加https以提高安全性。
以下以debian+nginx为例,命令均建议以root用户或root权限运行。
首先需要安装依赖项socat和curl(如果不需要使用standalone模式,即已经安装有可以提供web服务的程序,则可以不安装socat):
apt-get install socat curl
获取acme.sh:
curl https://get.acme.sh | sh
之后acme.sh 会安装到~/.acme.sh目录下。
如果未安装任何web服务,且没有其他程序占用80端口,则可以用standalone模式,acme.sh在获取证书时会临时占用80端口。获取ECC证书:
~/.acme.sh/acme.sh --issue -d 域名 --standalone -k ec-256
如果已安装了占用80端口的web服务,则可以指定网站的根目录(注意域名要与站点路径匹配),以下以nginx的默认路径(/var/www/html)为例:
~/.acme.sh/acme.sh --issue -d 域名 -w /var/www/html -k ec-256
接下来就可以创建证书存放路径并安装证书了,此处以将证书相关文件安装到/etc/web_https为例:
mkdir /etc/web_https/
~/.acme.sh/acme.sh --installcert -d 域名 --fullchainpath /etc/web_https/https.crt --keypath /etc/web_https/https.key --ecc
然后在nginx的网站配置文件中启用https。将SSL Configure的部分反注释,并添加证书地址:
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_certificate /etc/web_https/https.crt;
ssl_certificate_key /etc/web_https/https.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
server_name 域名;
之后重启web服务即可:
service nginx restart
也可以不停止nginx服务,重新加载配置:
service nginx force-reload
试访问任意网站下的任意文件,并将url头的http改成https,如果浏览器提示安全则表明证书和配置有效。
acme.sh会每60天自动更新证书,但如果采用standalone模式获取的证书,则renew时可能与正在运行的web服务冲突,如果需要更新时可以自行手动更新,在停用web服务后执行以下命令即可:
~/.acme.sh/acme.sh --renew -d 域名 --force --ecc
如果之前指定了网站的根目录,则renew的时候无需停止网站的服务程序。
如果长时间没有更新脚本,则可能脚本版本滞后而出现问题,acme.sh脚本自身带有了更新功能,执行以后会将脚本更新到最新版本。
~/.acme.sh/acme.sh --upgrade