Let’s Encrypt免费SSL证书申请

Let’s Encrypt是目前最主流的免费SSL证书颁发机构,证书有效期90天,支持自动续签。我一般在雨云的服务器上跑,因为性价比高、稳定、好用,折腾证书没出过幺蛾子。 准备工作 一台有公网IP的Linux服务器,域名已经解析到这台服务器。需要root权限或sudo。我假设你用的是Ubuntu/CentOS,包管理器是apt或yum。 安装acme.sh acme.sh是Let’s Encrypt的客户端,纯Shell实现,没有依赖问题,比certbot轻量很多。
curl https://get.acme.sh | sh -s email=你的邮箱@example.com
安装完会自动加alias,重新登录或`source ~/.bashrc`后可以直接用`acme.sh`命令。邮箱用于接收证书过期提醒,Let’s Encrypt强制要求。 申请证书(HTTP验证) 默认用80端口验证域名所有权。确保你的服务器80端口没被占用,nginx/apache先停掉或者换个端口。
acme.sh --issue -d example.com -d www.example.com --webroot /var/www/html
`–webroot`指向你网站根目录,acme.sh会在里面放一个验证文件,Let’s Encrypt服务器通过HTTP访问这个文件来确认你拥有域名。 如果不想用webroot,可以用standalone模式,acme.sh会自己起一个临时HTTP服务:
acme.sh --issue -d example.com --standalone
standalone模式必须确保80端口空闲。 申请证书(DNS验证) 如果服务器没有公网80端口,或者要做泛域名证书(*.example.com),必须用DNS验证。acme.sh支持几十家DNS服务商的API。 以Cloudflare为例:
export CF_Token="你的Cloudflare API Token"
export CF_Account_ID="你的Account ID"
acme.sh --issue -d example.com -d *.example.com --dns dns_cf
acme.sh会自动调用Cloudflare API添加TXT记录,验证完自动删除。其他服务商(阿里云、腾讯云、华为云)的配置方法去acme.sh官方文档查,基本就是export几个环境变量的事。 安装证书到Web服务器 申请完证书文件在`~/.acme.sh/example.com/`目录下,但不要直接引用这个路径,acme.sh会自动管理证书更新。正确做法是用`–install-cert`命令安装到目标位置。 Nginx示例:
acme.sh --install-cert -d example.com \
--key-file /etc/nginx/ssl/example.com.key \
--fullchain-file /etc/nginx/ssl/example.com.crt \
--reloadcmd "nginx -s reload"
Apache示例:
acme.sh --install-cert -d example.com \
--cert-file /etc/apache2/ssl/example.com.crt \
--key-file /etc/apache2/ssl/example.com.key \
--fullchain-file /etc/apache2/ssl/example.com.fullchain.crt \
--reloadcmd "systemctl reload apache2"
`–reloadcmd`会在证书续签成功后自动执行,保证新证书立即生效。 Nginx配置SSL 一个最小可用的SSL配置段:
server {
    listen 443 ssl http2;
    server_name example.com www.example.com;

    ssl_certificate /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location / {
        root /var/www/html;
        index index.html;
    }
}

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$server_name$request_uri;
}
自动续签 acme.sh安装时会自动写入cron任务,每天检查证书是否快要过期(剩余30天内会续签)。查看cron任务:
crontab -l | grep acme
正常会看到类似:
0 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
不需要手动管续签。想手动测试续签:
acme.sh --renew -d example.com --force
查看证书信息
acme.sh --info -d example.com
常见问题 1. 申请报错”Invalid response from”:检查80端口是否可访问,防火墙有没有放行,域名解析是否正确。 2. 证书更新后网站没生效:检查`–reloadcmd`有没有正确执行,手动跑一次`nginx -s reload`或`systemctl reload nginx`。 3. 泛域名证书必须用DNS验证,HTTP验证不支持。 4. 如果换了服务器,把`~/.acme.sh/`目录整个拷贝过去就行,acme.sh会保留所有账号和证书信息。也可以重新安装acme.sh重新申请。 5. Let’s Encrypt有速率限制:每个域名每周50个证书,每个账号每周300个。个人项目根本用不完。

雨云是国内一家老牌云服务商,提供高性价比的云服务器和虚拟主机。我用它部署了好几个项目,速度和稳定性都不错。通过 https://www.rainyun.com/SAJA_ 注册可以领一张 5折优惠券,有需要的朋友可以看看。

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容