说在前面

本文仅记录给自己的网站添加“小绿锁”的动手操作过程,不涉及 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

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

  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 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

相关阅读

快速签发 Let's Encrypt 证书指南的更多相关文章

  1. LNMP V1.4一键快速部署Let's Encrypt免费SSL证书

    老左年前在"军哥LNMP V1.4测试版一键脚本安装以及功能上的升级体验"已经简单的体验到目前还没有正式版本的V1.4版本,理论上会在今年儿童节正式上线.从体验和实际的版本变动文档 ...

  2. Linux下使用acme.sh申请和管理Let’s Encrypt证书

    关于Let's Encrypt 免费SSL证书 Let's Encrypt 作为一个公共且免费 SSL 的项目逐渐被广大用户传播和使用,是由 Mozilla.Cisco.Akamai.IdenTrus ...

  3. 教你快速撸一个免费HTTPS证书

    摘要: 免费 HTTPS 证书,了解一下? HTTPS 已成为业界标准,这篇博客将教你申请Let's Encrypt的免费 HTTPS 证书. 本文的操作是在 Ubuntu 16.04 下进行,使用 ...

  4. 最简单的,在win,linux中,用powershell,自动获取Let's Encrypt证书方法

    powershell传教士原创 2020-04-12 Let's Encrypt证书有效期3个月,支持泛域名[*.你的网站.net].支持n天内(一般10天内就够用了),用脚本自动续期. 简介: 这个 ...

  5. 使用acme.sh签发Let's Encrypt的免费数字证书

    --------------安装----------------curl https://get.acme.sh | sh#让alias生效source ~/.bashrc ------------- ...

  6. 使用 acme.sh 签发续签 Let‘s Encrypt 证书 泛域名证书

    1. 安装 acme.sh 安装很简单, 一个命令: curl https://get.acme.sh | sh 并创建 一个 bash 的 alias, 方便你的使用 alias acme.sh=~ ...

  7. Let's Encrypt 证书 wget 报错

    最近发现一个奇怪的问题,网站使用 let's encrypt 的免费证书,浏览器访问时正常,但是wget的时候报错.报错信息如下: wget https://www.example.com --202 ...

  8. 使用Go和Let's Encrypt证书部署HTTPS

    为什么要使用HTTPS?使用HTTPS的途径有哪些?如何用Go来部署HTTPS?拿出你的小本本,你要的干货都在这儿! HTTPS的好处我们已在之前的文章中提高好多.它加密浏览器和服务器之间的流量,保障 ...

  9. 获取Let`s Encrypt证书的三种方式

    1,acme.sh 方式 1)获取acme脚本 curl https://get.acme.sh | sh 2)开始获取证书 acme.sh强大之处在于,可以自动配置DNS,不用去域名后台操作解析记录 ...

随机推荐

  1. Tea for Mac(mac笔记软件)中文版

    为大家分享一款好用且免费的mac笔记软件,Tea for Mac提供了实时渲染的Markdown,功能全面,支持各种快捷键,使用tea mac版时,在段首打@即可快速插入图片.标题.列表等元素,非常便 ...

  2. Asp.net MVC WebApi项目的自动接口文档及测试功能打开方法

    https://blog.csdn.net/foren_whb/article/details/78866133

  3. JS生成当前月份包括最近12个月内的月份

    var last_year_month = function() { var result = []; for(var i = 0; i < 12; i++) { var d = new Dat ...

  4. xgboost 最优参数, df某一个字段进行字符串搜索

    0.909323  with:   {'max_depth': 6, 'min_child_weight': 0.8, 'n_estimators': 800} df_huoguo = df[df.c ...

  5. 关于Android中使用BottomNavigationView切换横屏导致返回主页的问题

    问题: 如图,"发现"页即为主页,然后我们切换到"我"页,一切正常. 那么问题来了,如果切换到"我"页后把手机横屏,则会出现下面的情况. 嗯 ...

  6. python 选课系统

    couser.py: import sys,osBASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))sys.pa ...

  7. arcgis for JavaScript API 4.5与4.3的区别

    arcgis 4.5与4.3区别: 鉴于本人使用4.3时间比较久,而arcgis for JavaScript API于9月28日推出了4.5版本,但是直接更换4.5的init.js会出现意想不到的错 ...

  8. Pyenv部署

    一.Git克隆方式 1.安装git yum -y install git 2.克隆pyenv到本地 git clone https://github.com/pyenv/pyenv.git ~/.py ...

  9. windows server 2008 R2服务器无法通过ShellClass获取mp3音乐时长

    我们先看一段代码,获取mp3播放时长: #region GetMediaDetailInfo 获取媒体文件属性信息 /// <summary> /// 获取媒体文件属性信息 /// < ...

  10. Unity如何退出游戏

    使用 Application.Quit(),但在 editor 模式下使用 Application.Quit()是没用的,要用 EditorApplication.isPlaying = false. ...