dong瓜

导航

自动申请Let's Encrypt的https加密证书,过期后自动更新

Let's Encrypt 简介

  如果要启用HTTPS,我们就需要从证书授权机构(以下简称CA) 处获取一个证书,Let's Encrypt 就是一个 CA。我们可以从 Let's Encrypt 获得网站域名的免费的证书。

Certbot 简介

  是Let's Encrypt官方推荐的获取证书的客户端,可以帮我们获取免费的Let's Encrypt 证书。Certbot 是支持所有 Unix 内核的操作系统的,

Certbot工作原理(--webroot模式)

  不论是第一次申请证书,还是更新证书,Certbot都会发起一次ACME请求,来验证你是否拥有该域名。如果验证通过,Certbot就会将新证书安装到本地服务,其实就是将证书保存在一个目录中。证书一般包含两个文件(包含公钥、私钥以及证书等信息),web服务器需要配置使用这两个证书文件,来实现HTTPS访问。

ACME验证过程如下:

  1. 假设你有一个域名:xxxx.com,和一个公网IP:xxx.xxx.xxx.xxx,并设置好了DNS解析;

  2. 配置好一台web服务器,在80端口和443端口接受examle.com的请求;

  3. CertbotLet's Encrypt发起证书申请;

  4. Let's Encrypt返回Certbot一个唯一的token,并会自动把token存放在你的服务器根目录.well-known/acme-challenge/里(注意:该文件不能删除,证书过期后自动更新证书时会验证token是否一致)

  5. 配置好web服务器,使Certbot可以通过url:http://xxxx.com/.well-known/acme-challenge/{token}访问到token;

  6. Let's Encrypt CA访问上述url,如果获取到的token和它发送给Certbottoken一致,就可以证明你拥有该域名,就安装证书,位置在/etc/letsencrypt/live/目录下

安装certbot命令:

  sudo apt-get update;

  sudo apt-get install software-properties-common

  sudo add-apt-repository universe

  sudo add-apt-repository ppa:certbot/certbot

  sudo apt-get update

  sudo apt-get install certbot

申请证书命令:采用(--webroot模式)

  certbot certonly --webroot -w /var/www/html/www.xxxx.com -d www.xxxx.com

  注意:-w:指定该域名的根目录;-d:指定域名

证书文件说明:

  cert.pem - Apache服务器端证书
  chain.pem - Apache根证书和中继证书
  fullchain.pem - Nginx所需要ssl_certificate文件
  privkey.pem - 安全证书KEY文件

证书自动续期:

  命令:crontab -e

  在定时文件写入即可:

    0 */12 * * * certbot renew --quiet --renew-hook "/etc/init.d/nginx reload"

nginx1.4 ssl配置

  nginx.conf文件的http里开启ssl

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;

  sites-available/www.xxxx.com开启443端口监听:

        #listen 80 default_server;
        #listen [::]:80 default_server;
        # SSL configuration
        listen 443 ssl; #要去掉default_server不然多个域名会有多个配置文件都有listen 443 ssl default_server会报错
        # listen [::]:443 ssl default_server;
        ssl_certificate /etc/letsencrypt/live/www.xxxx.com/fullchain.pem;  # 指定证书的位置,绝对路径
        ssl_certificate_key/etc/letsencrypt/live/www.xxxx.com/privkey.pem;  # 绝对路径,同上
        ssl_session_timeout 5m;

实现步骤;

  1、配置nginx可以访问 http://xxxx.com/.well-known/acme-challenge/目录下的文件

  2、安装certbot

  3、申请证书命令:采用(--webroot模式)

  4、nginx1.4 ssl配置,可以https访问

  5、/.well-known/acme-challenge目录下的文件{token}不能删除,以后自动更新证书会用到

注意事项:

  1、确保url:http://xxxx.com/.well-known/acme-challenge/{token}可以通过web服务器访问

    因为还没有完成http加密,所以还要用http访问,那怎样可以访问 /.well-known/acme-challenge目录下的文件,需在nginx配置文件的80端口如下设置即可访问到该文件

    该域名配置80端口需添加如下:

    location '/.well-known/acme-challenge' {
        root  /var/www/html/www.xxxxx.com;
    }

  2、申请证书(certbot certonly --webroo)验证连续5次认证失败,需等一小时在申请证书认证(官方的限制)

      3、命令certbot certonly --webroo 的 -w 设置的根目录要为www.xxxx.com的网站目录,

     如:当出现多个子域名时,都部署在服务器的/var/www/html下创建子域名目录时,创建了www.xxxx.com目录,则-w的值为:/var/www/html/www.xxxx.com   -d的值为:www.xxxx.com

      参考:https://blog.csdn.net/xs18952904/article/details/79262646

  4、在服务器上更新全部过期的网站的ssl证书,在linux执行命令即可:certbot renew

posted on 2021-03-19 10:31  dong瓜(TreeSky)  阅读(566)  评论(0)    收藏  举报