快速签发 Let's Encrypt 证书指南
说在前面
本文仅记录给自己的网站添加“小绿锁”的动手操作过程,不涉及 HTTPS 工作原理等内容的讲解,感兴趣的同学可以参考篇尾的文章自行了解。
简单了解下我的实验环境:
- 云服务器:CentOS 7.4
- 网站宿主:Nginx 1.12.2
- 备案域名:www.esofar.cn
这里以
www.esofar.cn作为演示域名,届时一定要修改为自己的域名。
什么是 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
安装很简单,一条命令:
curl https://get.acme.sh | sh
整个安装过程进行了以下几步,了解一下即可:
- 把 acme.sh 安装到当前用户的主目录
$HOME下的.acme.sh文件夹中,即~/.acme.sh/,之后所有生成的证书也会放在这个目录下; - 创建了一个指令别名
alias acme.sh=~/.acme.sh/acme.sh,这样我们可以通过acme.sh命令方便快速地使用 acme.sh 脚本; - 自动创建
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 esofar.cn -d www.esofar.cn -w /home/wwwroot/esofar.cn
简单解释下这条命令涉及的几个参数:
--issue是 acme.sh 脚本用来颁发证书的指令;-d是--domain的简称,其后面须填写已备案的域名;-w是--webroot的简称,其后面须填写网站的根目录。
证书签发成功会有如下输出:


从截图看出,生成的证书放在了/root/.acme.sh/esofar.cn目录。
另外,可以通过下面两个常用acme.sh命令查看和删除证书:
# 查看证书列表
acme.sh --list
# 删除证书
acme.sh remove <SAN_Domains>
至此,证书就下载成功。
安装证书
我的站点是由 Nginx 承载的,所以本节内容重点记录如何将证书安装到 Nginx,其他 webserver 请参考 acme.sh 文档自行实践。废话不多说,进入本节正题。
上一小节,生成的证书放在了/root/.acme.sh/esofar.cn目录,因为这是 acme.sh 脚本的内部使用目录,而且目录结构可能会变化,所以我们不能让 Nginx 的配置文件直接读取该目录下的证书文件。
正确的做法就是使用--installcert命令,指定目标位置,然后证书文件会被 copy 到相应的位置。
一条命令即可解决:
acme.sh --installcert -d esofar.cn \
--key-file /etc/nginx/ssl/esofar.cn.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 esofar.cn;
ssl on;
ssl_certificate /etc/nginx/ssl/fullchain.cer;
ssl_certificate_key /etc/nginx/ssl/esofar.cn.key;
root /home/wwwroot/esofar.cn;
index index.html;
location / {
try_files $uri $uri/ @router;
index index.html;
}
location @router {
rewrite ^.*$ /index.html last;
}
}
server {
listen 80;
server_name esofar.cn;
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
相关阅读
- README.md - acme.sh | Github
- 中文说明 - acme.sh | Github
- Blogs and tutorials - acme.sh | Github
- HTTPS从认识到线上实战全记录 - 我是小茗同学 - 博客园
快速签发 Let's Encrypt 证书指南的更多相关文章
- LNMP V1.4一键快速部署Let's Encrypt免费SSL证书
老左年前在"军哥LNMP V1.4测试版一键脚本安装以及功能上的升级体验"已经简单的体验到目前还没有正式版本的V1.4版本,理论上会在今年儿童节正式上线.从体验和实际的版本变动文档 ...
- Linux下使用acme.sh申请和管理Let’s Encrypt证书
关于Let's Encrypt 免费SSL证书 Let's Encrypt 作为一个公共且免费 SSL 的项目逐渐被广大用户传播和使用,是由 Mozilla.Cisco.Akamai.IdenTrus ...
- 教你快速撸一个免费HTTPS证书
摘要: 免费 HTTPS 证书,了解一下? HTTPS 已成为业界标准,这篇博客将教你申请Let's Encrypt的免费 HTTPS 证书. 本文的操作是在 Ubuntu 16.04 下进行,使用 ...
- 最简单的,在win,linux中,用powershell,自动获取Let's Encrypt证书方法
powershell传教士原创 2020-04-12 Let's Encrypt证书有效期3个月,支持泛域名[*.你的网站.net].支持n天内(一般10天内就够用了),用脚本自动续期. 简介: 这个 ...
- 使用acme.sh签发Let's Encrypt的免费数字证书
--------------安装----------------curl https://get.acme.sh | sh#让alias生效source ~/.bashrc ------------- ...
- 使用 acme.sh 签发续签 Let‘s Encrypt 证书 泛域名证书
1. 安装 acme.sh 安装很简单, 一个命令: curl https://get.acme.sh | sh 并创建 一个 bash 的 alias, 方便你的使用 alias acme.sh=~ ...
- Let's Encrypt 证书 wget 报错
最近发现一个奇怪的问题,网站使用 let's encrypt 的免费证书,浏览器访问时正常,但是wget的时候报错.报错信息如下: wget https://www.example.com --202 ...
- 使用Go和Let's Encrypt证书部署HTTPS
为什么要使用HTTPS?使用HTTPS的途径有哪些?如何用Go来部署HTTPS?拿出你的小本本,你要的干货都在这儿! HTTPS的好处我们已在之前的文章中提高好多.它加密浏览器和服务器之间的流量,保障 ...
- 获取Let`s Encrypt证书的三种方式
1,acme.sh 方式 1)获取acme脚本 curl https://get.acme.sh | sh 2)开始获取证书 acme.sh强大之处在于,可以自动配置DNS,不用去域名后台操作解析记录 ...
随机推荐
- C#中string.Format 用法详解
这篇文章主要介绍了C#中string.format用法,以实例形式较为详细的讲述了string.format格式化的各种用法,非常具有实用价值,需要的朋友可以参考下 本文实例总结了C#中string. ...
- 基于Promise封装uni-app的request方法,实现类似axios形式的请求
https://my.oschina.net/u/2428630/blog/3004860 uni-app框架中 安装(项目根目录下运行) npm install uni-request --save ...
- Kafka笔记5(内部工作原理)
集群成员关系: Kafka使用zookeeper维护集群成员信息,每个broker拥有唯一标识符,这个标识符可以在配置文件里指定也可以自动生成,会注册到Zookeeper的/brokers/ids路径 ...
- SQL Server创建存储过程——动态SQL
简介: 存储过程(stored procedure)是一组为了完成特定功能的SQL语句集合,经编译后存储在服务器端的数据库中,利用存储过程可以加速SQL语句的执行. 自定义存储过程,由用户创建并能完成 ...
- mac下mysql安装及配置启动
---恢复内容开始--- 原始链接:https://segmentfault.com/q/1010000000475470 按照如下方法成功安装并启动: mysql.server start//启动服 ...
- java多线程探究
本文主要是一些线程理论性的知识,随后将贴出研究的源码,包含线程池,锁,线程组等简单的demo,欢迎大家下载1.进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程 ...
- 【JavaScript】事件捕获、事件冒泡与事件委托
2018年12月18日 最近在学习js时,遇到了三个名词:事件捕获.事件冒泡.事件委托. 一.事件捕获和事件冒泡 事件捕获和事件冒泡是为了解决网页中的事件流(事件发生的顺序)而提出的概念. 事件捕获是 ...
- vue知识总结
vue: 渐进式JavaScript 框架 Vue项目构建 npm install -g vue vue init webpack-simple my-project cd my-project np ...
- 2018-2019-2 网络对抗技术 20165335 Exp4 恶意代码分析
实验内容: 一.使用schtacks进行系统运行监控,使用sysmon工具监控系统的具体进程,使用各种工具进行监控,并针对软件的启动回连,安装到目标机,以及其他的控制行为的分析,同时,对主机的注册表, ...
- 【转】git示意图