• https证书auto


    Let’s Encrypt是一个由非营利性组织互联网安全研究小组(ISRG)提供的免费、自动化和开放的证书颁发机构(CA)。
    简单的说,借助Let’s Encrypt颁发的证书可以为我们的网站免费启用HTTPS(SSL/TLS)
    客户端#
    Let’s Encrypt 使用 ACME 协议来验证您对给定域名的控制权并向您颁发证书。要获得 Let’s Encrypt 证书,您需要选择一个要使用的 ACME 客户端软件。Let’s Encrypt 不控制或审查第三方客户端,也不能保证其安全性或可靠性。
    官方提供了几种证书的申请方式方法
    https://letsencrypt.org/zh-cn/docs/client-options/

    1)certbot#

    它既可以仅为您获取证书,也可以帮助您安装证书(如果您需要的话)。它易于使用,适用于许多操作系统,并且具有出色的文档。

    https://certbot.eff.org/

    2)acme.sh#

    目前 Let's Encrypt 免费证书客户端最简单、最智能的 shell 脚本,可以自动发布和续订 Let's Encrypt 中的免费证书

    https://github.com/acmesh-official/acme.sh
    

    安装acme.sh

    1. 自动安装#
    curl https://get.acme.sh | sh (网络问题可能失败)
    
    2. 手动安装#
    git clone https://github.com/acmesh-official/acme.sh.git
    cd ./acme.sh
    ./acme.sh --install
    

    安装过程如下:

    1. 默认安装到当前用户的主目录$HOME下的.acme.sh文件夹中,即~/.acme.sh/,之后所有生成的证书也会按照域名放在这个目录下;

    2. 创建指令别名: alias acme.sh=~/.acme.sh/acme.sh, 通过acme.sh命令方便快速地使用 acme.sh 脚本

    3. 自动创建cronjob定时任务,每天 0:00 点自动检测所有的证书,如果快过期了,则会自动更新证书

    #每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书
    0 0 * * * /root/.acme.sh/acme.sh --cron --home /root/.acme.sh > /dev/null
    
    3. 测试收否安装成功
    [root@RainGod acme.sh]# acme.sh --version
    https://github.com/acmesh-official/acme.sh
    v2.8.9
    

    如有版本信息输出则表示环境正常;如果提示命令未找到,执行source ~/.bashrc命令重载一下环境配置文件。
    整个安装过程不会污染已有的系统任何功能和文件,所有的修改都限制在安装目录~/.acme.sh/中。

    使用acme.sh生成证书

    1. HTTP 方式#

    http 方式需要在你的网站根目录下放置一个文件, 以此来验证你的域名所有权,完成验证,只需要指定域名, 并指定域名所在的网站根目录,acme.sh 会全自动的生成验证文件, 并放到网站的根目录, 然后自动完成验证,该方式较适合独立域名的站点使用,比如博客站点等

    ./acme.sh  --issue  -d mydomain.com -d www.mydomain.com  --webroot  /home/wwwroot/mydomain.com/
    
    - issue 是acme.sh脚本用来颁发证书的指令;
    - d是 --domain的简称,其后面须填写已备案的域名;
    - w是 --webroot的简称,其后面须填写网站的根目录。
    

    示例:

    ./acme.sh --issue -d devopsing.site -d www.devopsing.site --webroot /var/www/html/blog/
    

    证书签发成功会有如下输出:

    执行成功,默认为生成如下证书:

    root@ecs-ubuntu18:/etc/nginx/sites-available# ls ~/.acme.sh/devopsing.site/ -l
    total 28
    -rw-r--r-- 1 root root 1587 Dec 16 12:34 ca.cer
    -rw-r--r-- 1 root root 1866 Dec 16 12:34 devopsing.site.cer
    -rw-r--r-- 1 root root  642 Dec 16 12:34 devopsing.site.conf
    -rw-r--r-- 1 root root 1001 Dec 16 12:33 devopsing.site.csr
    -rw-r--r-- 1 root root  232 Dec 16 12:33 devopsing.site.csr.conf
    -rw-r--r-- 1 root root 1679 Dec 16 12:33 devopsing.site.key
    -rw-r--r-- 1 root root 3453 Dec 16 12:34 fullchain.cer
    

    如果用的apache/nginx服务器, acme.sh 还可以智能的从 nginx的配置中自动完成验证, 不需要指定网站根目录:

    acme.sh --issue -d mydomain.com --apache
    
    acme.sh --issue -d mydomain.com --nginx
    
    2. DNS 方式#

    适合用于生成范解析证书
    优势:不需要任何服务器, 不需要任何公网 ip, 只需要 dns 的解析记录即可完成验证
    劣势:如果不同时配置 Automatic DNS API,使用这种方式 acme.sh 将无法自动更新证书,每次都需要手动再次重新解析验证域名所有权`

    1. 生成证书记录#
        https://github.com/acmesh-official/acme.sh/wiki/DNS-manual-mode
    

    注意,第一次执行时使用 --issue,-d 指定需要生成证书的域名

    ./acme.sh --issue -d *.example.com --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please
    
    [root@RainGod acme.sh]# ./acme.sh --issue -d *.yangyijing.cn --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please
    

    参数解释:

    --dns [dns_hook]    Use dns manual mode or dns api. Defaults to manual mode when argument is omitted.
    
    
    --yes-I-know-dns-manual-mode-enough-go-ahead-please  Force use of dns manual mode.
    See:  https://github.com/acmesh-official/acme.sh/wiki/dns-manual-mode
    
    1. 在域名解析中手动添加TXT记录#
      如果第一次添加该域名,会提示如下信息,需要在DNS解析中添加TXT记录,用作判断你是否拥有域名使用权
    [Wed Apr 28 11:55:48 CST 2021] Using CA: https://acme-v02.api.letsencrypt.org/directory
    [Wed Apr 28 11:55:49 CST 2021] Create account key ok.
    [Wed Apr 28 11:55:49 CST 2021] Registering account: https://acme-v02.api.letsencrypt.org/directory
    [Wed Apr 28 11:55:50 CST 2021] Registered
    [Wed Apr 28 11:55:50 CST 2021] ACCOUNT_THUMBPRINT='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
    [Wed Apr 28 11:55:50 CST 2021] Creating domain key
    [Wed Apr 28 11:55:51 CST 2021] The domain key is here: /root/.acme.sh/*.yangyijing.cn/*.yangyijing.cn.key
    [Wed Apr 28 11:55:51 CST 2021] Single domain='*.yangyijing.cn'
    [Wed Apr 28 11:55:51 CST 2021] Getting domain auth token for each domain
    [Wed Apr 28 11:55:52 CST 2021] Getting webroot for domain='*.yangyijing.cn'
    [Wed Apr 28 11:55:52 CST 2021] Add the following TXT record:
    [Wed Apr 28 11:55:52 CST 2021] Domain: '_acme-challenge.yangyijing.cn'
    [Wed Apr 28 11:55:52 CST 2021] TXT value: 'HqvHxxxxxxx-xxxxxxxxxxx-Jm22cxYV0k'
    [Wed Apr 28 11:55:52 CST 2021] Please be aware that you prepend _acme-challenge. before your domain
    [Wed Apr 28 11:55:52 CST 2021] so the resulting subdomain will be: _acme-challenge.yangyijing.cn
    [Wed Apr 28 11:55:52 CST 2021] Please add the TXT records to the domains, and re-run with --renew.
    [Wed Apr 28 11:55:52 CST 2021] Please add '--debug' or '--log' to check more details.
    [Wed Apr 28 11:55:52 CST 2021] See: https://github.com/acmesh-official/acme.sh/wiki/How-to-debug-acme.sh
    

    去阿里云控制台解析一下域名
    验证解析是否生效

    [root@RainGod acme.sh]# nslookup -q=TXT _acme-challenge.yangyijing.cn
    Server:		8.8.8.8
    Address:	8.8.8.8#53
    
    Non-authoritative answer:
    _acme-challenge.yangyijing.cn	text = "HqvH2Wf5qQ6mU5-lPg_BBrqrfWXT9nuG-Jm22cxYV0k"
    
    Authoritative answers can be found from:
    
    1. 重新生成证书#
      注意,这里第二次执行是用的是 --renew
    ./acme.sh --renew -d *.yangyijing.cn  --yes-I-know-dns-manual-mode-enough-go-ahead-please 
    
    [root@RainGod acme.sh]# ll /root/.acme.sh/*.yangyijing.cn/
    total 28
    -rw-r--r-- 1 root root 1587 Apr 28 13:46 ca.cer
    -rw-r--r-- 1 root root 3433 Apr 28 13:46 fullchain.cer
    -rw-r--r-- 1 root root 1846 Apr 28 13:46 *.yangyijing.cn.cer
    -rw-r--r-- 1 root root  616 Apr 28 13:46 *.yangyijing.cn.conf
    -rw-r--r-- 1 root root  976 Apr 28 13:46 *.yangyijing.cn.csr
    -rw-r--r-- 1 root root  210 Apr 28 13:46 *.yangyijing.cn.csr.conf
    -rw-r--r-- 1 root root 1679 Apr 28 11:55 *.yangyijing.cn.key
    
    

    4.使用阿里云DNS api进行证书申请(支持自动更新)

    dns 方式的真正强大之处在于可以使用域名解析商提供的 api 自动添加 txt 记录完成验证,acme.sh 目前支持 cloudflare, dnspod, cloudxns, godaddy 以及 ovh 等数十种解析商的自动集成。

        https://github.com/acmesh-official/acme.sh/wiki/dnsapi
    

    阿里云DNS API
    首先获取阿里云的操作API 的 AccessKey ID和AccessKey Secret

    export Ali_Key="key值"
    export Ali_Secret="key Secret"
    
    # 给出的 api id 和 api key 会被自动记录下,下次就不用再次执行上述命令
    
    acme.sh --issue --dns dns_ali -d *.example.com --force
    

    示例:

    export Ali_Key="LTAI4F****i8qEeKeRios2r"
    export Ali_Secret="nIpymix0s****a0bJNgERE0QzjSrkF"
    acme.sh --issue --dns dns_ali -d *.devopsing.site --force
    

    DnsPod API

    export DP_Id="1234"
    export DP_Key="sADDsdasdgdsf"
    acme.sh --issue  --dns dns_dp   -d *.example.com
    
    查看/删除证书#

    查看安装证书 acme.sh --list

    [root@RainGod acme.sh]# acme.sh --list
    Main_Domain      KeyLength  SAN_Domains  CA               Created                       Renew
    *.yangyijing.cn  ""         no           LetsEncrypt.org  Wed Apr 28 06:05:24 UTC 2021  Sun Jun 27 06:05:24 UTC 20
    

    删除证书 acme.sh remove <SAN_Domains>

    user@ecs-ubuntu18:~$ acme.sh remove devopsing.site
    [Thu Dec 17 14:05:53 CST 2020] devopsing.site is removed, the key and cert files are in /home/user/.acme.sh/devopsing.site
    [Thu Dec 17 14:05:53 CST 2020] You can remove them by yourself.
    
    使用acme.sh安装证书

    上面生成的证书放在了~/.acem.sh/目录,使用--installcert命令,指定目标位置,可将证书copy 到相应的位置

    server {
            listen 443 ssl;
            server_name demo.com;
    
            ssl_certificate      /etc/nginx/ssl/fullchain.cer;
            ssl_certificate_key  /etc/nginx/ssl/<domain>.key;
    

    https://www.cnblogs.com/FLY_DREAM/p/14221136.html#certbot

  • 相关阅读:
    如何快速给pod添加健康检查?
    如何快速下载vagrant的box?
    如何快速新建sql的demo环境?
    如何快速将某个用户添加sudo免密以及docker权限?
    七、Docker+nginx
    六、Docker+Gitlab
    五、Docker+Sqlserver
    四、Docker+Tomcat
    Docker 内程序时间设置,很重要
    三、Docker镜像的相关操作
  • 原文地址:https://www.cnblogs.com/yangtao416/p/14714357.html
Copyright © 2020-2023  润新知