什么是 Let’s Encrypt?

部署 HTTPS 网站的时候需要证书,证书由 CA (Certificate Authority )机构签发,大部分传统 CA 机构签发证书是需要收费的,这不利于推动 HTTPS 协议的使用。Let’s Encrypt 也是一个 CA 机构,但这个 CA 机构是免费的!!!也就是说签发证书不需要任何费用。

什么是通配符证书?

在没有出现通配符证书之前,Let’s Encrypt 支持两种证书。

1)单域名证书:证书仅仅包含一个主机。

2)SAN 证书:一张证书可以包括多个主机(Let’s Encrypt 限制是 20),也就是证书可以包含下列的主机:www.example.comwww.example.cnblog.example.com 等等。

证书包含的主机可以不是同一个注册域,不要问我注册域是什么?注册域就是向域名注册商购买的域名。

对于个人用户来说,由于主机并不是太多,所以使用 SAN 证书完全没有问题,但是对于大公司来说有一些问题:

  • 子域名非常多,而且过一段时间可能就要使用一个新的主机。
  • 注册域也非常多。

读者可以思考下,对于大企业来说,SAN 证书可能并不能满足需求,类似于 sina 这样的网站,所有的主机全部包含在一张证书中,而使用 Let’s Encrypt 证书是无法满足的。

Let’s Encrypt 通配符证书

通配符证书就是证书中可以包含一个通配符,比如 .example.com、.example.cn,读者很快明白,大型企业也可以使用通配符证书了,一张证书可以防止更多的主机了。

这个功能可以说非常重要,从功能上看 Let’s Encrypt 和传统 CA 机构没有什么区别了,会不会触动传统 CA 机构的利益呢?

为什么选择Let’s Encrypt?

Let’s Encrypt和其他认证机构的区别:

  • 免费,Let’s Encrypt提供期限是90天的免费电子证书
  • 提供工具certbot自动生成电子证书文件  任何人都可以基于 ACME 协议实现一个客户端,官方推荐的客户端是Certbot

如何申请 Let’s Encrypt 通配符证书

安装Certbot

从官方源安装最新版certbot(最新版为0.22.0,从0.22.0版本才开始支持泛域名申请)

wget https://dl.eff.org/certbot-auto
chmod a+x ./certbot-auto

初始化

./certbot-auto

获取证书

因为目前大多数国内的DNS服务商不在API支持的列表里,所以以下使用手动方式进行DNS认证,只要将下方命令中的*.thinkbig.com替换为自己的域名即可。注意!域名的 minirplus.com 解析记录必须以 A记录 方式指向当前运行命令的服务器IP,而不能使用CNAME记录。

./certbot-auto certonly --manual -d *.thinkbig.com --agree-tos --no-bootstrap --manual-public-ip-logging-ok --preferred-challenges dns- --server https://acme-v02.api.letsencrypt.org/directory
运行该命令后,会要求 输入邮箱,用于接收证书过期通知:
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):

接着会出现一段广告,大意是收集客户邮箱给赞助商,Y 或 N 均可

-------------------------------------------------------------------------------
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o:

接着重要的部分来了,在域名注册商的网站,解析记录中添加一个 _acme-challenge 前缀的域名 TXT记录,记录的内容为中间显示的随机码_MdwehUGJ_qSMWNy7acNo_QzuS1YnV8_772JZUGmqQY

我用的是阿里云,找到对应的域名,添加解析记录即可

-------------------------------------------------------------------------------
Please deploy a DNS TXT record under the name
_acme-challenge.thinkbig.com with the following value: _MdwehUGJ_qSMWNy7acNo_QzuS1YnV8_772JZUGmqQY Before continuing, verify the record is deployed.
-------------------------------------------------------------------------------
Press Enter to Continue

接着确保当前域名的根记录 thinkbig.com 为 A记录 并且指向当前服务器IP(这条原本不成问题,因为国外的服务商的DNS根域名只能添加A记录,但是国内的DNSPOD则更加灵活,可以添加CNAME记录,所以会在认证的时候出现问题)

按回车,进行认证

等待片刻,出现如下信息,说明认证成功

申请操作成功后, 会在界面中输出证书的存放路径, 以及证书的到期时间 (90天)

Waiting for verification...
Cleaning up challenges IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/thinkbig.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/thinkbig.com/privkey.pem
Your cert will expire on --. To obtain a new or tweaked
version of this certificate in the future, simply run certbot-auto
again. To non-interactively renew *all* of your certificates, run
"certbot-auto renew"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

证书的存放路径

( 这里以thinkbig.com为例 )

生成证书中会创建 /etc/letsencrypt 文件夹, 证书文件默认存放在 /etc/letsencrypt/live/thinkbig.com 文件夹中, 其中 thinkbig.com 取自第一个域名
在 thinkbig.com 文件夹中包含 4 个文件 ./cert.pem ./chain.pem ./fullchain.pem ./privkey.pem

  • cert.pem 域名证书
  • chain.pem 根证书及中间证书
  • fullchain.pem 由 cert.pem 和 chain.pem 合并而成
  • privkey.pem 证书私钥

创建一个 2048 位的 Diffie-Hellman 文件
(nginx 默认使用 1024 位的 Diffie–Hellman 进行密钥交换, 安全性太低)

openssl dhparam -out /etc/letsencrypt/live/dhparams.pem 

nginx TSL 配置 (强制http重定向到https)

( 这里以thinkbig.com为例 )

首先对 http 协议进行 301 重定向到 https 协议

server {
listen ;
server_name example.com www.thinkbig.com;
return https://thinkbig.com$request_uri;
}

Nginx Https 相关配置( 这里以thinkbig.com为例 )

server {
listen ssl;
server_name thinkbig.com www.thinkbig.com; # 配置站点证书文件地址
ssl_certificate /etc/letsencrypt/live/thinkbig.com/fullchain.pem;
# 配置证书私钥
ssl_certificate_key /etc/letsencrypt/live/thinkbig.com/privkey.pem; # 配置 Diffie-Hellman 交换算法文件地址
ssl_dhparam /etc/letsencrypt/live/dhparams.pem; # 配置服务器可使用的加密算法
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS'; # 指定服务器密码算法在优先于客户端密码算法时,使用 SSLv3 和 TLS 协议
ssl_prefer_server_ciphers on; # ssl 版本 可用 SSLv2,SSLv3,TLSv1,TLSv1.,TLSv1.
# ie6 只支持 SSLv2,SSLv3 但是存在安全问题, 故不支持
ssl_protocols TLSv1 TLSv1. TLSv1.; # 配置 TLS 握手后生成的 session 缓存空间大小 1m 大约能存储 个 session
ssl_session_cache shared:SSL:50m;
# session 超时时间
ssl_session_timeout 1d; # 负载均衡时使用 此处暂时关闭 详情见 https://imququ.com/post/optimize-tls-handshake.html
# 1.5. 及以上支持
ssl_session_tickets off; # 浏览器可能会在建立 TLS 连接时在线验证证书有效性,从而阻塞 TLS 握手,拖慢整体速度。OCSP stapling 是一种优化措施,服务端通过它可以在证书链中封装证书颁发机构的 OCSP(Online Certificate Status Protocol)响应,从而让浏览器跳过在线查询。服务端获取 OCSP 一方面更快(因为服务端一般有更好的网络环境),另一方面可以更好地缓存 以上内容来自 https://imququ.com/post/my-nginx-conf-for-wpo.html
# 1.3. 及以上支持
ssl_stapling on;
ssl_stapling_verify on;
# 根证书 + 中间证书
ssl_trusted_certificate /etc/letsencrypt/live/thinkbig.com/fullchain.pem; # HSTS 可以告诉浏览器,在指定的 max-age 内,始终通过 HTTPS 访问该域名。即使用户自己输入 HTTP 的地址,或者点击了 HTTP 链接,浏览器也会在本地替换为 HTTPS 再发送请求 相关配置见 https://imququ.com/post/sth-about-switch-to-https.html
add_header Strict-Transport-Security max-age=; # 在此填写原本 http 协议中的配置
}

以上配置完成后, 重启 nginx 即可完成对 https 的切换

service nginx restart

Apache Https 相关配置( 这里以thinkbig.com为例 )

进入/etc/apache2/sites-available,修改泛域名配置文件(这里以000-default.conf为例),添加SSL配置,将下面配置中的SSL证书地址,替换为之前成功获取的证书地址(如直接使用以下配置,请修改DocumentRoot和Directory目录为泛域名指向的目录)

<VirtualHost *:>
ServerAdmin admin@thinkbig.com
DocumentRoot /var/www/vps
ServerSignature Off
<Directory /var/www/vps >
Options -Indexes
</Directory>
</VirtualHost> <IfModule mod_ssl.c>
<VirtualHost *:>
ServerAdmin admin@thinkbig.com
DocumentRoot /var/www/vps
ServerSignature Off
<Directory /var/www/vps >
Options -Indexes
</Directory>
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/thinkbig.com/fullchain.pem;
SSLCertificateKeyFile /etc/letsencrypt/live/thinkbig.com/privkey.pem
</VirtualHost>
</IfModule>

更新证书:

certbot生成的证书是有90天期限的。
使用以下命令即可进行 续期, 续期成功后需要服务器

./certbot-auto renew

该命令只会对快到期的证书才会进行更新, 如果希望强制更新, 可以增加 --force-renewal 参数

自动更新证书:

crontab中加上下边这句:

    */ * certbot-auto renew --quiet --force-renewal

了解更多,https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au

申请 Let’s Encrypt 泛域名证书 及 Nginx/Apache 证书配置的更多相关文章

  1. Let's Encrypt泛域名使用和Nginx配置拆分

    上一期写了 使用Let's Encrypt实现网站https化 ,随着二级域名的增多,每个二级域名需要一张 SSL 证书,这可太不优雅了,泛域名表示我可以更优雅. 作者:IT王小二 博客:https: ...

  2. sdm 使用阿里云域名申请 Let’s Encrypt 通配符 域名证书

    安装acme 进入 套件中心 点击安装 Git Server 之后进入SSh会使用git命令 方法1--------------------------------------- 获取代码 git c ...

  3. StartCom 申请 SSL 证书及 Nginx HTTPS 支持配置全攻略

    来源:https://www.williamyao.com/index.php/archives/1397/ 前言 最近收到 StartCom 的邮件,数字证书即将过期,想到去年在 StartSSL ...

  4. https阿里云证书购买与apache环境配置

    1.在阿里云云盾安全->CA证书购买 2.下载证书解压文件,一般有四个文件 3.在/etc/apache2  下创建一个文件夹cert 放入以上四个文件(路径可自己任意选择) 4.$sudo a ...

  5. Let's Encrypt泛域名SSL证书申请

    操作系统:CentOS 7 github:https://github.com/Neilpang/acme.sh 有中文说明: https://github.com/Neilpang/acme.sh ...

  6. Nginx二级域名及多Server反向代理配置

    Nginx强大的正则表达式支持,可以使server_name的配置变得很灵活,如果你要做多用户博客,那么每个用户拥有自己的二级域名也就很容易实现了. 注:nginx反向代理同一ip多个域名,给head ...

  7. Let's Encrypt免费泛域名证书申请

    一. 下载acme.sh,以下四条命令任选一条即可 curl https://get.acme.sh | shwget -O - https://get.acme.sh | sh curl https ...

  8. 新开源HTML5单文件网页版ACME客户端,可在线申请Let's Encrypt、ZeroSSL免费HTTPS多域名通配符泛域名SSL/TLS证书(RSA/ECC/ECDSA)

    目录 开源项目的起源 项目地址 使用方法 第一步:选择Let's Encrypt.ZeroSSL或其他证书颁发机构 第二步:证书配置,填写域名 第三步:完成域名所有权的验证 第四步:下载保存证书PEM ...

  9. Let's encrypt申请泛域名证书

    1.下载工具 wget https://dl.eff.org/certbot-auto chmod a+x ./certbot-auto 2.初始化 ./certbot-auto 3.获取证书(1) ...

随机推荐

  1. Esper学习之十二:EPL语法(八)

    今天的内容十分重要,在Esper的应用中是十分常用的功能之一.它是一种事件集合,我们可以对这个集合进行增删查改,所以在复杂的业务场景中我们肯定不会缺少它.它就是Named Window. 由于本篇篇幅 ...

  2. sencha touch 侧边栏扩展(只隐藏不销毁)

    基于Ext.ux.MenuButton改造而来,和它不同的是,不会每次都去销毁侧边栏,只是单纯的隐藏,属性配置方面没啥区别,每次点击按钮显示时,会触发showMenu事件/方法 代码如下: /** * ...

  3. 【CF884F】Anti-Palindromize 费用流

    [CF884F]Anti-Palindromize 题意:定义一个串是反回文的,当且仅当对于1<=i<=len,$a_i!=a_{len-i+1}$. 现在给出一个长度为n的串S(n是偶数 ...

  4. python--利用列表推导式快速生成xml格式数据

    在接口自动化测试中,我们经常将要发送的数据放到excel里. json数据放至excel方便,但最近的一个测试,数据是xml格式发送的 如下: 属性 必选/可选 描述 1. Message Eleme ...

  5. CentOS 6.8下Apache绑定多个域名的方法

    如何通过设置Apache的http.conf文件,进行多个域名的绑定(假设我们要绑定的域名是discuz11.com和discuz22.com,独立IP为25.25.25.25). 域名/IP地址 域 ...

  6. Spark2 oneHot编码--标准化--主成分--聚类

    1.导入包 import org.apache.spark.sql.SparkSession import org.apache.spark.sql.Dataset import org.apache ...

  7. HOJ-2056 Bookshelf(线性动态规划)

    L is a rather sluttish guy. He almost never clean up his surroundings or regulate his personal goods ...

  8. 洛谷P2463 Sandy的卡片【后缀数组】【二分】

    题目描述 Sandy和Sue的热衷于收集干脆面中的卡片. 然而,Sue收集卡片是因为卡片上漂亮的人物形象,而Sandy则是为了积攒卡片兑换超炫的人物模型. 每一张卡片都由一些数字进行标记,第i张卡片的 ...

  9. 2.3AutoEncoder

    AutoEncoder是包含一个压缩和解压缩的过程,属于一种无监督学习的降维技术. 神经网络接受大量信息,有时候接受的数据达到上千万,可以通过压缩 提取原图片最具有代表性的信息,压缩输入的信息量,在将 ...

  10. ZOJ 2314 - Reactor Cooling - [无源汇上下界可行流]

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2314 The terrorist group leaded by ...