如何自动申请免费的SSL 证书

上次介绍了如何经过第三方网站申请免费的SSL 证书,但有效期只有三个月,三个月以后又须要再次申请,记得还好,若是忘了可能还会形成没必要要的损失。php

Let's Encrypt 是一个免费提供的SSL 证书的CA,虽然每次签发的有效期都只有三个月,可是发证是自动化的,发证速度较快,而且能够经过脚原本自动续签,为我的网站使用HTTPS提供了一个不错的选择。html

Let’s Encrypt (如下简称LE)的证书签发主要使用基于 ACME协议 的证书自动管理客户端来实现。nginx

LE官方推荐的客户端是 Certbot ,本文中就是使用 Certbot 来获取和续签证书。服务器

LE 是如何自动签发证书的

假设如今要申请CA 证书的域名是 example.comapp

首先由WebServer(也就是咱们用户端的服务器)的管理客户端(如Certbot)发送请求到LE,让LE来验证客户端是否真的控制example.com这个域名,接下来LE会提出一些验证动做(原文challenges),好比让客户端在一个很明显的路径上放指定的文件。同时,LE还会发出一个随机数,客户端须要用这个随机数和客户端本身的私钥来进行签名。post

WebServer上的客户端完成LE指定的域名验证动做而且将加密后的签名后,再次发送请求到LE要求验证,LE会验证发回来的签名是否正确,而且验证域名验证动做是否完成,以下载指定的文件而且判断文件里面的内容是否符合要求。网站

这些验证都完成之后,能够申请证书了。加密

完成验证后,客户端生成本身的私钥以及 Certificate Signing Request(CSR) 发送到LE服务器,LE服务器会将CA证书(也是公钥)发放到你的服务器。spa

这样就完成了CA证书的自动化发放了。code

使用Certbot 获取证书

LE 的CA 证书发放原理看着还挺麻烦的,但若是使用 Certbot 客户端,整个过程仍是挺简单的。

在正式获取证书以前,推荐先去Certbot 官网选择适合本身的系统环境。

我这边系统环境是Nginx + Ubuntu 18.04 LTS,因此下面介绍的安装流程只适用于Ubuntu + Nginx

1. 安装 snap

snap) 是Canonical公司发布的全新的软件包管理方式,它相似一个容器拥有一个应用程序全部的文件和库,各个应用程序之间彻底独立。使用snap 包的好处就是它解决了应用程序之间的依赖问题,使应用程序之间更容易管理。可是由此带来的问题就是它占用更多的磁盘空间。

$ sudo apt update
$ sudo apt install snapd

2. 安装 certbot

在安装 Certbot 以前,最好先移除历史快照。

$ sudo apt-get remove certbot

进行安装:

$ sudo snap install --classic certbot

3. 生成证书

安装完成以后,下一步须要作的就是生成证书了,这里有两种方式:

  1. 生成证书并自动配置
$ sudo certbot --nginx
  1. 生成证书手动配置
$ sudo certbot certonly --nginx

我选择的是手动配置,大概流程以下:

  1. 输入经常使用邮箱,用来接收通知和恢复密钥。
  2. 赞成使用协议。
  3. 输入须要作受权的域名,多个域名用空格隔开。
  4. 等待验证经过。

若是其中某个域名验证失败,则不会生成密码。

一切正常的话,能够看到/etc/letsencrypt/live/your_sites/目录下多了四个文件:

  • cert.pem : 公钥,服务器证书
  • chain.pem : 中间证书
  • fullchain.pem : 前两个的合集
  • privkey.pem : 私钥

其中配置Nginx SSL 只须要用到fullchain.pemprivkey.pem

server {
    listen       443 ssl;
    server_name www.example.com;

    ssl on;
    ssl_certificate /etc/letsencrypt/live/www.exampl.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;
    ...
}

至此,就已经完成了生成证书到配置的所有过程了。

自动续签

若是快要到期了,可使用certbot renew对证书进行更新,须要注意的是,若是证书还没有过时,则不会更新。

能够配合conrtab使用,每半个月的凌晨三点自动续签一次。

$ 0 3 15 * * certbot renew

参考连接

相关文章
相关标签/搜索