使用 acme.sh 自动生成免费 https 证书
Let's Encrypt是一个于2015年三季度推出的数字证书认证机构,旨在以自动化流程消除手动创建和安装证书的复杂流程,并推广使万维网服务器的加密连接无所不在,为安全网站提供免费的SSL/TLS证书。适用于个人网站等小站点。
Let's Encrypt 证书有效期为90天,过期需要重新申请,手动操作会比较麻烦。acme.sh 就解决了这些麻烦,它提供了快速生成证书,同时定时刷新证书功能。这里介绍一下具体的使用流程:
安装
curl https://get.acme.sh | sh
生成证书
http 方式需要在你的网站根目录下放置一个文件, 来验证你的域名所有权,完成验证. 然后就可以生成证书了.
acme.sh --issue -d mydomain.com --webroot /home/wwwroot/mydomain.com/
如果你用的 nginx服务器, 或者反代, acme.sh 还可以智能的从 nginx的配置中自动完成验证, 你不需要指定网站根目录:
acme.sh --issue -d mydomain.com --nginx
注意, 无论是 apache 还是 nginx 模式, acme.sh在完成验证之后, 会恢复到之前的状态, 都不会私自更改你本身的配置. 好处是你不用担心配置被搞坏, 也有一个缺点, 你需要自己配置 ssl 的配置, 否则只能成功生成证书, 你的网站还是无法访问https. 但是为了安全, 你还是自己手动改配置吧.
copy/安装 证书
前面证书生成以后, 接下来需要把证书 copy 到真正需要用它的地方. 注意, 默认生成的证书都放在安装目录下: ~/.acme.sh/, 请不要直接使用此目录下的文件, 例如: 不要直接让 nginx/apache 的配置文件使用这下面的文件. 这里面的文件都是内部使用, 而且目录结构可能会变化. 正确的使用方法是使用 --install-cert 命令,并指定目标位置, 然后证书文件会被copy到相应的位置, 例如:
acme.sh --install-cert -d mydomain.com \
--key-file /path/to/keyfile/in/nginx/mydomain.com.key.pem \
--fullchain-file /path/to/fullcha/in/nginx/mydomain.com.cert.pem \
--reloadcmd "nginx -s reload"
更新证书
目前证书在 60 天以后会自动更新, 你无需任何操作. 今后有可能会缩短这个时间, 不过都是自动的, 你不用关心.
Nginx 配置
server {
listen 443;
server_name mydomain.com;
ssl on;
ssl_certificate /path/to/fullcha/in/nginx/mydomain.com.cert.pem;
ssl_certificate_key /path/to/keyfile/in/nginx/mydomain.com.key.pem;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://localhost:3000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host:$server_port;
}
}
参考文档: