精选资源
分享最好的给你

Let’s Encrypt 免费泛域名SSL证书一键申请与SSL使用教程

Let’s Encrypt 简介

Let’s Encrypt 是一个由非营利性组织 互联网安全研究小组(ISRG)提供的免费、自动化和开放的证书颁发机构(CA)。

简单的说,借助 Let’s Encrypt 颁发的证书可以为我们的网站免费启用 HTTPS(SSL/TLS) 。

Let’s Encrypt免费证书的签发/续签都是脚本自动化的,官方提供了几种证书的申请方式方法,点击此处 快速浏览。

官方推荐使用 Certbot 客户端来签发证书,这种方式可参考文档自行尝试,不做评价。

这里直接使用第三方脚本 acme.sh 申请,据了解这种方式可能是目前 Let’s Encrypt 免费证书客户端最简单、最智能的 shell 脚本,可以自动发布和续订 Let’s Encrypt 中的免费证书。

acme.sh 申请证书前的准备

1、VPS服务器:使用acme.sh脚本自动申请和续订免费的 Let’s Encrypt 证书,必须准备好一台linux服务器。

2、做好域名dns解析,将域名解析到准备好的vps IP上。

acme.sh 申请证书教程

安装 acme.sh

安装很简单,一条命令:

curl https://get.acme.sh | sh 

整个安装过程进行了以下几步,了解一下即可:

  1. 把 acme.sh 安装到当前用户的主目录$HOME下的.acme.sh文件夹中,即~/.acme.sh/,之后所有生成的证书也会放在这个目录下;
  2. 创建了一个指令别名alias acme.sh=~/.acme.sh/acme.sh,这样我们可以通过acme.sh命令方便快速地使用 acme.sh 脚本;
  3. 自动创建cronjob定时任务, 每天 0:00 点自动检测所有的证书,如果快过期了,则会自动更新证书。

安装命令执行完毕后,执行acme.sh --version确认是否能正常使用acme.sh命令。

https://github.com/Neilpang/acme.sh  
v2.7.9 

如有版本信息输出则表示环境正常;如果提示命令未找到,执行source ~/.bashrc命令重载一下环境配置文件。

整个安装过程不会污染已有的系统任何功能和文件,所有的修改都限制在安装目录~/.acme.sh/中。

生成证书

据 acme.sh 官方文档介绍,其实现了 acme 协议支持的所有验证协议,一般有两种方式验证:http 和 dns 验证。

也就是我们有两种选择签发证书,这里我直接选择 http 验证方式,另外一种方式本篇不做介绍,可参考文档自行尝试。

签发证书也很简单,一条命令:

acme.sh –issue -d vpsba.net -d www.vpsba.net -w /home/wwwroot/vpsba.net 

简单解释下这条命令涉及的几个参数:

  • --issue是 acme.sh 脚本用来颁发证书的指令;
  • -d--domain的简称,其后面须填写需要申请证书的域名;
  • -w--webroot的简称,其后面须填写网站的根目录。

生成的证书放在了/root/.acme.sh/vpsba.net目录。

另外,可以通过下面两个常用acme.sh命令查看和删除证书:

# 查看证书列表  
acme.sh –list   
  
# 删除证书  
acme.sh remove <SAN_Domains>  

安装证书

我的站点是由 Nginx 承载的,所以本节内容重点记录如何将证书安装到 Nginx,其他 webserver 请参考 acme.sh 文档自行实践。废话不多说,进入本节正题。

上一小节,生成的证书放在了/root/.acme.sh/vpsba.net目录,因为这是 acme.sh 脚本的内部使用目录,而且目录结构可能会变化,所以我们不能让 Nginx 的配置文件直接读取该目录下的证书文件。

正确的做法就是使用--installcert命令,指定目标位置,然后证书文件会被 copy 到相应的位置。

一条命令即可解决:

acme.sh  –installcert -d vpsba.net   
         –key-file /etc/nginx/ssl/vpsba.net.key   
         –fullchain-file /etc/nginx/ssl/fullchain.cer   
         –reloadcmd “service nginx force-reload”  

这里我将证书放到了/etc/nginx/ssl/目录下。

最后一步就是,修改 Nginx 配置文件启用 ssl,修改完成后需要重启下 Nginx,这一块不再详述。Nginx 配置请参考:

server {  
        listen 443 ssl;  
        server_name vpsba.net;  
          
        ssl on;  
        ssl_certificate      /etc/nginx/ssl/fullchain.cer;  
        ssl_certificate_key  /etc/nginx/ssl/vpsba.net.key;  
  
        root /home/wwwroot/vpsba.net;  
        index index.html;  
      
        location / {  
            try_files $uri $uri/ @router;  
            index index.html;  
        }  
      
        location @router {  
            rewrite ^.*$ /index.html last;  
        }  
    }  
      
    server {  
        listen 80;  
        server_name vpsba.net;  
        return 301 https://$server_name$request_uri;  
    }  

更新证书

目前 Let’s Encrypt 的证书有效期是90天,时间到了会自动更新,您无需任何操作。 今后有可能会缩短这个时间, 不过都是自动的,不需要您关心。

但是,您也可以强制续签证书:

acme.sh –renew -d example.com –force 

更新 acme.sh

目前由于 acme 协议和 letsencrypt CA 都在频繁的更新, 因此 acme.sh 也经常更新以保持同步。

升级 acme.sh 到最新版:

acme.sh –upgrade

如果您不想手动升级,,可以开启自动升级:

acme.sh  –upgrade  –auto-upgrade

您也可以随时关闭自动更新:

acme.sh –upgrade  –auto-upgrade  0  

总结

使用 acme.sh 脚本申请 免费的Let’s Encrypt 证书可以说是非常简单方便了,自动续期后基本就不用管了。

当然,除了使用 acme.sh 脚本进行申请外,目前主流的主机控制面板也已经支持了一键申请 Let’s Encrypt 证书 ,如:BT.cn、 WDCP 等。

赞(1)
未经允许不得转载:VPS吧 » Let’s Encrypt 免费泛域名SSL证书一键申请与SSL使用教程

评论 4

  1. #1

    acme.sh –issue -d vpsba.net -d http://www.vpsba.net -w /home/wwwroot/vpsba.net
    应该是acme.sh –issue
    文章很受用,谢谢博主!!

    biubang5年前 (2019-02-18)回复
    • 看你网站还有一些图片资源的引用链接是http哦

      VPSba5年前 (2019-02-27)回复
      • 我又来了2333,上次发重了还发错了。
        就是签发证书的那个命令: acme.sh -issue 这个 issue 参数应该是 俩个 –
        不知道为啥,我打出来又被合并成一个长的 -。

        biubang5年前 (2019-05-22)回复
  2. #2

    acme.sh –issue -d vpsba.net -d http://www.vpsba.net -w /home/wwwroot/vpsba.net
    应该是 acme.sh –issue
    SSL配置成功,谢谢博主的文章!

    biubang5年前 (2019-02-18)回复