---
title: "Letsencrypt 笔记"
date: 2021-11-06T20:52:00+08:00
lastmod: 2021-11-06T20:52:00+08:00
keywords: []
tags: ["letsencrypt", "certbot", "ssl"]
categories: ["web"]
---

## 安装 certbot
- 在 alpine linux 中安装 certbot
    ```bash
    apk add --no-cache certbot openssl
    ```

- 注册
    ```bash
    certbot register --register-unsafely-without-email --agree-tos
    ```

## 普通域名证书
- 申请 ssl 证书，有效期 90 天
    ```bash
    certbot certonly -n -d x.x.com --standalone

    # 证书文件生成到 /etc/letsencrypt/live/x.x.com/ 下
    # 参数 -d 可以使用多次来指定多个域名，也可以在一个 -d 参数中使用逗号分隔多个域名
    # 参数 --cert-name 可以指定证书文件的父级目录名字(替换默认的 x.x.com)
    ```

- 续签 ssl 证书
    ```bash
    cerbot renew --force-renewal
    ```

- 生成 2048 位的交换密钥文件
    ```bash
    openssl dhparam -out /etc/letsencrypt/dhparam.pem 2048
    ```

## 通配域名证书
- 申请 ssl 证书，有效期 90 天
    ```bash
    certbot certonly --manual -d '*.x.com' \
        --preferred-challenges dns \
        --server https://acme-v02.api.letsencrypt.org/directory

    # 按照提示，在对应的域名运营商平台新增或修改 _acme-challenge 记录的 txt 值
    # 证书文件生成到 /etc/letsencrypt/live/x.com/ 下
    # 参数 --cert-name 可以指定证书文件的父级目录名字(替换默认的 x.com)
    ```

- 续签 ssl 证书，使用 certonly 子命令指定域名单独更新
    ```bash
    certbot certonly --force-renewal --manual -d '*.x.com' \
        --preferred-challenges dns \
        --server https://acme-v02.api.letsencrypt.org/directory

    # 按照提示，在对应的域名运营商平台修改 _acme-challenge 记录的 txt 值
    ```

- 生成 2048 位的交换密钥文件
    ```bash
    openssl dhparam -out /etc/letsencrypt/dhparam.pem 2048
    ```

## 使用证书
- nginx 配置 ssl
    ```
    server {
        listen                    443 ssl;
        server_name               x.x.x;
        ssl_certificate           /etc/letsencrypt/live/x.x.x/fullchain.pem;
        ssl_certificate_key       /etc/letsencrypt/live/x.x.x/privkey.pem;
        ssl_session_cache         shared:le_nginx_SSL:10m;
        ssl_session_timeout       1440m;
        ssl_session_tickets       off;
        ssl_prefer_server_ciphers off;
        ssl_protocols             TLSv1.2 TLSv1.3;
        ssl_ciphers               "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";
        ssl_dhparam               /etc/letsencrypt/dhparam.pem;
        location / {
            return 404;
        }
    }
    ```

