IT评测·应用市场-qidao123.com

标题: Docker获取Let`s Encrypt SSL 证书 [打印本页]

作者: 宁睿    时间: 2023-4-28 14:22
标题: Docker获取Let`s Encrypt SSL 证书
文中的操作都是在CentOS Stream release 9下执行的,使用的是root用户。
1. 安装docker
  1. # 卸载原有的docker
  2. yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
  3. # 安装依赖
  4. yum install -y yum-utils device-mapper-persistent-data lvm2
  5. # 配置docker-ce源
  6. yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  7. # 安装docker
  8. yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
  9. # 安装docker-compose
  10. wget https://github.com/docker/compose/releases/download/v2.17.2/docker-compose-linux-x86_64
  11. chmod +x docker-compose-linux-x86_64 && mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose && ldconfig
复制代码
2. Let`s Encrypt及Certbot介绍

关于Let`s Encrypt可以参见这里
certbot安装使用参加这里
3. Docker运行Certbot获取证书

为了方便维护、升级,同时也避免破坏本地的开发环境,我这里使用docker方式来运行certbot。整个过程分为两步:首次申请证书和证书更新。
3.1 首次申请证书

因为我的文章都是通过jekyll运行的静态网站,之后会通过nginx来运行,所以这里就以nginx为例来配置网站的tls证书。
  1. server {
  2.     listen      80;
  3.     server_name example.com www.example.com;
  4.     # 高优先级,仅用于更新证书
  5.     location ~ /.well-known/acme-challenge {
  6.         allow all;
  7.         root /data/letsencrypt;
  8.     }
  9. }
复制代码
  1. version: '3.3'
  2. services:
  3.   nginx:
  4.     image: nginx:1.23.4-alpine
  5.     container_name: frontend
  6.     volumes:
  7.       - ./default.conf:/etc/nginx/conf.d/default.conf
  8.       - ./frontend:/usr/share/nginx/html
  9.     ports:
  10.       - 80:80
复制代码
docker run --rm -it -v ./certbot/etc/letsencrypt:/etc/letsencrypt -v ./certbot/var/log/letsencrpt:/var/log/letsencrypt -v ./frontend:/data/letsencrypt certbot/certbot:latest certonly --webroot --email your@eamil.com --agree-tos --no-eff-email --webroot-path=/data/letsencrypt -d example.com -d example.com
运行结束后可以在./certbot/etc/letsencrypt/live目录下找到example.com文件夹,其中包含证书文件fullchain.pem和私钥文件privkey.pem。
  1. version: '3.3'
  2. services:
  3.   nginx:
  4.     image: nginx:1.23.4-alpine
  5.     container_name: frontend
  6.     volumes:
  7.       - ./default.conf:/etc/nginx/conf.d/default.conf
  8.       # - ./frontend:/usr/share/nginx/html
  9.       - ./certbot/etc/letsencrypt/live:/letsencrypt/live        # 当前证书目录
  10.       - ./certbot/etc/letsencrypt/archive:/letsencrypt/archive  # 历史证书目录
  11.       - ./dhparam-2048.pem:/letsencrypt/dhparam-2048.pem        # 使用2048位DH(Diffie-Hellman)参数
  12.     ports:
  13.       - 80:80
  14.       - 443:443
复制代码
2048为DH参数生成命令:openssl dhparam -out ./dhparam-2048.pem 2048
  1. # 处理http请求
  2. server {
  3.     listen      80;
  4.     server_name example.com www.example.com;
  5.     # 重定向到https
  6.     location / {
  7.         rewrite ^ https://$host$request_uri? permanent;
  8.     }
  9.     # 高优先级,仅用于更新证书
  10.     location ~ /.well-known/acme-challenge {
  11.         allow all;
  12.         root /data/letsencrypt;
  13.     }
  14. }
  15. # 处理https请求
  16. server {
  17.     listen 443 ssl http2;
  18.     server_name example.com www.example.com;
  19.     server_tokens off;
  20.     ssl_certificate /letsencrypt/live/example.com/fullchain.pem;
  21.     ssl_certificate_key /letsencrypt/live/example.com/privkey.pem;
  22.     ssl_buffer_size 8k;
  23.     ssl_dhparam /letsencrypt/dhparam-2048.pem; # 使用2048位DH参数,加强安全
  24.     ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
  25.     ssl_prefer_server_ciphers on;
  26.     ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;
  27.     ssl_ecdh_curve secp384r1;
  28.     ssl_session_tickets off;
  29.     # OCSP stapling
  30.     ssl_stapling on;
  31.     ssl_stapling_verify on;
  32.     resolver 8.8.8.8;
  33.     root /usr/share/nginx/html;
  34.     index index.html;
  35. }
复制代码
3.2 证书更新

  1. #!/bin/bash
  2. docker run -it --rm \
  3. -v ./certbot/etc/letsencrypt:/etc/letsencrypt \
  4. -v ./certbot/var/lib/letsencrypt:/var/lib/letsencrypt \
  5. -v ./certbot/var/log/letsencrypt:/var/log/letsencrypt \
  6. -v ./site:/data/letsencrypt \
  7. certbot/certbot \
  8. renew --webroot -w /data/letsencrypt --quiet && docker kill --signal=HUP frontend
复制代码
声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
Author: mengbin
blog: mengbin
Github: mengbin92
cnblogs: 恋水无意

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4