现在已经有很多的免费ssl证书提供商,国内的也有,
不过国内政策要求还要把key给他们,
我们还是用Let’s Encrypt吧。
这里有官方中文文档 ->biubiubiu
官方推荐的是使用Certbot ACME 客户端
但是这里用的是acme.sh
acme.sh是个开源的shell脚本,要更为轻量,对于我的破烂vps还是选择轻量点的吧。
Acme.sh也有中文的简单教程,很详细:-(´▽`)-
关于acme.sh
Acme.sh会在每天 0:00 点自动检测所有的证书,需要更新时会自动更新
acme所有东西都在~/.acme.sh/
下面,不会对外造成影响
安装acme.sh
curl https://get.acme.sh | sh
可以设置别名,不然命令太长了alias acme.sh=~/.acme.sh/acme.sh
生成证书
可以自己设置
acme.sh --issue -d mydomain.com -d www.mydomain.com --webroot /home/wwwroot/mydomain.com/
nginx/apache可以自动获取域名
acme.sh --issue -d mydomain.com --apache
acme.sh --issue -d mydomain.com --nginx
使用nginx模式在安装过程中遇到错误
[Mon Mar 2 15:42:33 UTC 2020] Can not find conf file for domain seyana.life
[Mon Mar 2 15:42:33 UTC 2020] Please add '--debug' or '--log' to check more details.
这是因为在nginx中,我配置server_name 为localhost
server_name localhost
acme.h是根据这个获取域名的,所以会出错,需要为绑定的域名
设置好后重新运行就成功了。
安装证书
用提供的命令可以一次把证书和key复制到指定目录
acme.sh --installcert -d www.xxxxx.come
--key-file /root/ssl/key/key.pem
--fullchain-file /root/ssl/cert/cert.pem
--reloadcmd "service nginx force-reload"
不建议把证书留在~/.acme.sh/中,
关于配置,不提供自动配置,需要自己配置
下面是nginx的443配置例子
server {
listen 443 ssl;
server_name www.xxx.com xxx.com;#域名
ssl_certificate /root/ssl/cert/cert.pem;#证书路径
ssl_certificate_key /root/ssl/key/key.pem;#key路径
#...
}
之后可以用301永久重定向把http 的80端口也转发到443上
rewrite ^/(.*)$ https://www.****.com/$1 permanent;
这样即使用http访问也会跳转到https上,当然这样的转换方式仍然存在风险,可以开启HSTS固定访问https等措施,具体还是留到https优化里把。
小锁锁get√
其他acme.h2命令
acme.sh --upgrade #更新
acme.sh --upgrade --auto-upgrade #开启自动更新
acme.sh --upgrade --auto-upgrade 0 #关闭自动更新
更多更高级的用法在wiki上 wwwww