论如何给自己的小站加一把小绿锁

安装Certbot工具

Certbot是Let’s Encrypt官方推荐的自动化工具,支持多种操作系统和Web服务器(如Nginx、Apache),以Ubuntu为例安装Certbot及插件:

sudo apt update
sudo apt install certbot python3-certbot-nginx  # 若使用Nginx则安装此插件
sudo apt install certbot-dns-cloudflare        # 若需DNS验证(如Cloudflare)

 

选择验证方式并申请证书

Let’s Encrypt支持两种主流验证方式,需根据场景选择:

HTTP-01验证(适合单域名)

适用场景:服务器可直接开放80/443端口,且域名已解析到服务器IP

申请证书:

certbot certonly --webroot -w /var/www/html/your_domain -d your_domain.com

 

其中 -w:指定该域名网站的根目录,确保可通过 http://example.com/.well-known/acme-challenge 访问验证文件;-d:指定域名

可在对应的 server 块(通常是 80 端口的 HTTP 配置)中添加以下规则,允许公开访问 .well-known/acme-challenge 目录:

server {
    listen 80;
    server_name example.com www.example.com;

    # 强制所有流量使用 HTTPS(可选,但建议申请证书时暂时注释掉)
    # return 301 https://$host$request_uri;

    # 允许 Let's Encrypt 验证文件的访问
    location ^~ /.well-known/acme-challenge/ {
        root /var/www/html;  # 替换为你的 Web 根目录(与Certbot的 -w 参数一致)
        default_type "text/plain";
        try_files $uri =404;
    }

    # 其他规则...
}

 

或自动配置Nginx(若安装插件):

certbot --nginx -d your_domain.com

 

DNS-01验证(适合通配符域名或服务器无法开放端口)

适用场景:通配符证书(如*.example.com)或使用Cloudflare等DNS服务商

获取DNS服务商API密钥(以Cloudflare为例):

# 配置文件(如~/.secrets/certbot/cloudflare.ini)
dns_cloudflare_email = [email protected]
dns_cloudflare_api_key = YOUR_API_KEY

 

申请证书:

certbot certonly --dns-cloudflare --dns-cloudflare-credentials ~/.secrets/certbot/cloudflare.ini -d *.example.com

 

证书路径

证书文件通常位于/etc/letsencrypt/live/your_domain/,包含fullchain.pem(公钥)和privkey.pem(私钥)

配置自动续期

Let’s Encrypt证书有效期为90天,需定期续期

测试续期命令:

certbot renew --dry-run

 

添加定时任务(Cron):

# 每天检查续期,证书到期前30天内自动续签
0 0 */5 * * certbot renew --quiet --renew-hook "systemctl restart nginx"

 

–renew-hook参数用于续期后重启服务

查看和管理证书

列出所有证书:

certbot certificates

 

撤销证书:

certbot revoke --cert-path /etc/letsencrypt/live/www.example.com/fullchain.pem

 

删除证书:

certbot delete

 

旧的内容

1.准备

没什么好准备的,Python 2.7+git就行了

需要将域名解析到当前VPS主机IP中!

注意申请时关闭nginx服务器以免80端口被占用导致无法验证

2.获取证书

首先下载证书获取工具

git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt

 

先安装certbot:

./certbot-auto --install-only

 

直接申请证书。一步搞定,就是这么简单:

./certbot-auto certonly --standalone --email [email protected] -d example.com -d www.example.com

 

如有疑问查看帮助

./certbot-auto --help all

 

在完成Let’s Encrypt证书的生成之后,我们会在”/etc/letsencrypt/live/域名/”目录下有4个文件就是生成的密钥证书文件。

cert.pem – Apache服务器端证书
chain.pem – Apache根证书和中继证书
fullchain.pem – Nginx所需要ssl_certificate文件
privkey.pem – 安全证书KEY文件

我们使用的Nginx环境,那就需要用到fullchain.pem和privkey.pem两个证书文件。

3.配置SSL

nginx配置

修改站点的配置:

server {
    # SSL configuration

    listen 443 ssl;
    listen [::]:443 ssl;
    ssl on;

    ssl_certificate   /etc/letsencrypt/live/test.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/test.com/privkey.pem;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

    root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
                try_files $uri $uri/ =404;
        }
}

 

仅限Https访问

有了Https,我们一般也就不想要http的访问了,或者说想把所有的http请求转为https。方法有很多种,我的方法是使用rewrite,把原先的Http全部转化为Https。
一个例子如下:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    server_name test.com;
    rewrite ^(.*) https://$server_name$1 permanent;

}

 

禁止IP直接访问

#禁止IP访问 
server 
{ 
listen 80 default; 
server_name _; 
return 500; 
}

 

自此,个人小站的小绿锁就加上了。

4.证书续期

Let’s Encrypt 生成的免费证书为3个月时间,使用 certbot renew 可以无限免费续签 Https 证书。
为了方便,我们可以使用crontab进行自动续期。注意在使用certbot renew的时候,要先关闭nginx才能成功。

 

直接使用命令:

./certbot-auto renew

 

就可以了

其他有的说利用命令更新:

./certbot-auto certonly --renew-by-default --email [email protected] -d example.com -d www.example.com

 

似乎不适用于lnmp脚本所安装的环境,lnmp安装的nginx配置文件不是在默认目录,这个命令会因路径问题出错。

参考:github/certbotSzeCheng

 

申请Let’s Encrypt免费SSL证书
https://ailitonia.com/archives/%e7%94%b3%e8%af%b7lets-encrypt%e5%85%8d%e8%b4%b9ssl%e8%af%81%e4%b9%a6/
本文被阅读了:4,911次
作者
Ailitonia
发布于
2018年2月12日
许可协议
版权声明

作者头像
关于 @Ailitonia
正因站在了巨人的肩膀上,才越发觉得自己渺小。不求成为巨人,但求与其同行。 把自己所见所闻,记录下来。
→查看所有由Ailitonia发布的文章