0°

acme.sh 申请管理 Let's Encrypt 证书完整教程

Let's Encrypt 项目是由互联网安全研究小组 ISRG,(Internet Security Research Group)主导并开发的一个新型数字证书认证机构(CA Certificate Authority)。该项目旨在开发一个自由且开放的自动化 CA 套件,并向公众提供相关的证书免费签发服务以降低安全通讯的财务、技术和教育成本。在过去的一年中,互联网安全研究小组拟定了 ACME 协议草案,并首次实现了使用该协议的应用套件:服务端 Boulder 和客户端 letsencrypt。

随着谷歌、百度、各种主流浏览器对 HTTPS 协议的支持越来越完善,现在站点使用 HTTPS 协议普及率是越来越高了,个人博客站点和中小企业站点在选择 SSL 证书时,首先要考虑的是成本和部署管理方便,Let's Encrypt 的 SSL 证书可以说是目前最为合适的了,Let's Encrypt 独有的 SSL 证书申请获取方式让很多站长们抓狂,今天明月就结合多年的服务器运维经验给大家详细的分享一个完整教程。

Let's Encrypt 项目是由互联网安全研究小组 ISRG,(Internet Security Research Group)主导并开发的一个新型数字证书认证机构(CA Certificate Authority)。该项目旨在开发一个自由且开放的自动化 CA 套件,并向公众提供相关的证书免费签发服务以降低安全通讯的财务、技术和教育成本。在过去的一年中,互联网安全研究小组拟定了 ACME 协议草案,并首次实现了使用该协议的应用套件:服务端 Boulder 和客户端 letsencrypt。

Let's Encrypt 的诞生离不开 ACME(自动证书管理环境 Automated Certificate Management Environment)协议的拟定。而 acme.sh 实现了 ACME 协议, 可以从 Let's Encrypt 生成免费的证书。

acme.sh 申请管理 Let's Encrypt 证书完整教程

ACME 协议是什么?

说到 ACME 协议,我们不得不提一下传统 CA 的认证方式。Let's Encrypt 服务所签发的证书为(域名认证证书 DV Domain-validated Certificate),签发这类证书需要域名所有者完成以下至少一种挑战 Challenge 以证明自己对域名的所有权:

  • 验证申请人对域名的 Whois 信息中邮箱的控制权;
  • 验证申请人对域名的常见管理员邮箱(如以 admin@、postmaster@ 开头的邮箱等)的控制权;
  • 在 DNS 的 TXT 记录中发布一条 CA 提供的字符串;
  • 在包含域名的网址中特定路径发布一条 CA 提供的字符串。

不难发现,其中最容易实现自动化的一种操作必然为最后一条,ACME 协议中的 Simple HTTP 认证即是用一种类似的方法对从未签发过任何证书的域名进行认证。该协议要求在访问 'http://域名/.well-known/acme-challenge/指定字符串' 时返回特定的字符串。

然而实现该协议的客户端 ;Let's Encrypt 做了更多——它不仅可以通过 ACME 协议配合服务端 Boulder 的域名进行独立 standalone 的认证工作,同时还可以自动配置常见的服务器软件(目前支持 Nginx 和 Apache)以完成认证。

acme.sh 申请管理 Let's Encrypt 证书完整教程

好吧,上面都是一些“废话”级别的介绍而已,大家可以略过,总而言之就是今天要使用到的 acme.sh 脚本是个基于 ACME 协议的 Let's Encrypt 证书申请、管理的工具,并且功能非常的强大和完善。用好 acme.sh 就可以完全免费的让站点拥有 HTTPS,其兼容性几乎囊括了所有主流浏览器。

在我的博客上【Linux 下使用 acme.sh 申请和管理 Let’s Encrypt 证书】一文里简单的介绍了 acme.sh 提供了两种方式来申请 SSL 证书,分别是 HTTP 方式和 DNS 方式,根据明月的经验 DNS 方式最稳定高效,所以今天的教程我们主要以 DNS 方式为主。

所谓的 DNS 方式其实就是在域名上添加一条 txt 解析记录, 验证域名所有权来申请获取到 SSL 证书的,这种方式的好处是, 你不需要任何服务器, 不需要任何公网 IP, 只需要 DNS 的解析记录即可完成验证。其实 DNS 方式的真正强大之处在于可以使用域名解析商提供的 API 自动添加 txt 记录完成验证。目前 acme.sh 支持的 DNS 解析商大概有如下图这些:

acme.sh 申请管理 Let's Encrypt 证书完整教程

可以看到国内的阿里云 DNS、DNSPod、CloudXNS 都在支持中,下面就以阿里云 DNS 为例来给大家讲解一下 acme.sh 申请 SSL 证书的过程,域名我们就以 mysite.com 为例。

首先我们要先获取到域名解析商的 API,也就是阿里云 DNS 的 AccessKey(包含 AccessKey ID 和 Access Key Secret),一般新注册的阿里云账号需要大家“创建 AccessKey”,具体位置在登录阿里云后点击用户头像里的“AccessKeys”即可进入了,如果没有现成的 AccessKey 那么点击右上角偏下的“创建 AccessKey”新建一个就是了,注意哦,这里会要求短信验证阿里云账号绑定的手机号的!因为 AccessKey 非常重要,在创建完成后悔自动隐藏 Access Key Secret 的,所以建议大家复制粘贴 AccessKey ID 和 Access Key Secret 到一个安全的地方保存起立,以后随时用可以随时复制粘贴,当然你要是记忆力超群可以记住 AccessKey ID 和 Access Key Secret,就当我没说!

有了域名解析商的 API 后,还需要确认一下要申请 SSL 证书的域名是不是在这个域名解析商处完成的解析,不是明月废话多,是真的有站长干过这种事儿,创建完 AccessKey,就在 acme.sh 里申请 SSL 证书了,这无论如何也是无法通过验证的,直到最后发现域名是用 CloudXNS 解析的,无语了都。

现在我们就可以在服务器上使用 acme.sh 了,当前前提是你的服务器上已经安装了 acme.sh,如果没有安装请移步【Linux 下使用 acme.sh 申请和管理 Let’s Encrypt 证书】一文里有安装 acme.sh 的方法,如果你是 LNMP1.6 一键安装包部署的服务器生产环境就已经自带 acme.sh 了,位置在 /usr/local/acme.sh ,注意手动安装的 acme.sh 和 LNMP1.6 集成的 acme.sh 位置是不一样的哦!

下面再给大家分享几个 acme.sh 常用命令,以方便大家管理 SSL 证书:

acme.sh --list #列出当前所有域名 SSL 证书以及申请时间和到期时间

acme.sh --renew-all --force #强制更新所有域名的 SSL 证书

acme.sh --version #查看 acme.sh 版本

acme.sh --upgrade  #更新 acme.sh 脚本

acme.sh  --upgrade  --auto-upgrade #让 acme.sh 利用系统 crontab 自动更新脚本

acme.sh  --upgrade  --auto-upgrade 0 #禁止 acme.sh 自动更新
「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论