TreeSky

自动申请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/里

  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/ssl/www.xxxx.com/Nginx/www.xxxx.com.pem;  # 指定证书的位置,绝对路径
        ssl_certificate_key /etc/ssl/www.xxxx.com/Nginx/www.xxxx.com.key;  # 绝对路径,同上
        ssl_session_timeout 5m;

注意事项:

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

分类:

技术点:

相关文章:

  • 2022-02-24
  • 2021-07-24
  • 2022-03-01
  • 2022-12-23
  • 2022-12-23
  • 2021-05-19
  • 2022-12-23
猜你喜欢
  • 2021-11-24
  • 2022-12-23
  • 2022-03-15
  • 2021-12-06
  • 2021-11-28
  • 2021-11-10
  • 2022-12-23
相关资源
相似解决方案