首页 > 其他分享 >Docker获取Let`s Encrypt SSL 证书

Docker获取Let`s Encrypt SSL 证书

时间:2023-04-28 09:23:31浏览次数:46  
标签:Encrypt ssl nginx letsencrypt Let Docker com docker certbot

文中的操作都是在CentOS Stream release 9下执行的,使用的是root用户。

1. 安装docker

# 卸载原有的docker
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
# 安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
# 配置docker-ce源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装docker
yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 安装docker-compose
wget https://github.com/docker/compose/releases/download/v2.17.2/docker-compose-linux-x86_64
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. 创建nginx配置文件default.conf
server {
    listen      80;
    server_name example.com www.example.com;

    # 高优先级,仅用于更新证书
    location ~ /.well-known/acme-challenge {
        allow all;
        root /data/letsencrypt;
    }
}
  1. docker-compose文件:
version: '3.3'

services:
  nginx:
    image: nginx:1.23.4-alpine
    container_name: frontend
    volumes:
      - ./default.conf:/etc/nginx/conf.d/default.conf
      - ./frontend:/usr/share/nginx/html
    ports:
      - 80:80
  1. 启动web服务: docker-compse up -d
  2. 启动certbot申请证书:

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 [email protected] --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. 停止web服务:docker-compose down
  2. 更新compose文件:
version: '3.3'

services:
  nginx:
    image: nginx:1.23.4-alpine
    container_name: frontend
    volumes:
      - ./default.conf:/etc/nginx/conf.d/default.conf
      # - ./frontend:/usr/share/nginx/html
      - ./certbot/etc/letsencrypt/live:/letsencrypt/live        # 当前证书目录
      - ./certbot/etc/letsencrypt/archive:/letsencrypt/archive  # 历史证书目录
      - ./dhparam-2048.pem:/letsencrypt/dhparam-2048.pem        # 使用2048位DH(Diffie-Hellman)参数
    ports:
      - 80:80
      - 443:443

2048为DH参数生成命令:openssl dhparam -out ./dhparam-2048.pem 2048

  1. 更新nginx配置文件
# 处理http请求
server {
    listen      80;
    server_name example.com www.example.com;

    # 重定向到https
    location / {
        rewrite ^ https://$host$request_uri? permanent;
    }

    # 高优先级,仅用于更新证书
    location ~ /.well-known/acme-challenge {
        allow all;
        root /data/letsencrypt;
    }
}

# 处理https请求
server {
    listen 443 ssl http2;
    server_name example.com www.example.com;

    server_tokens off;

    ssl_certificate /letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /letsencrypt/live/example.com/privkey.pem;

    ssl_buffer_size 8k;

    ssl_dhparam /letsencrypt/dhparam-2048.pem; # 使用2048位DH参数,加强安全

    ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;

    ssl_ecdh_curve secp384r1;
    ssl_session_tickets off;

    # OCSP stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8;

    root /usr/share/nginx/html;
    index index.html;
}
  1. 重新启动web服务:docker-compose up -d

3.2 证书更新

  1. 通过以下脚本可以实现证书更新:
#!/bin/bash

docker run -it --rm \
-v ./certbot/etc/letsencrypt:/etc/letsencrypt \
-v ./certbot/var/lib/letsencrypt:/var/lib/letsencrypt \
-v ./certbot/var/log/letsencrypt:/var/log/letsencrypt \
-v ./site:/data/letsencrypt \
certbot/certbot \
renew --webroot -w /data/letsencrypt --quiet && docker kill --signal=HUP frontend
  1. crontab -e新增一条定时任务,每月1号00:00更新一次证书:0 0 1 * * {{YOURPATH}}/renew.sh

声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
Author: mengbin
blog: mengbin
Github: mengbin92
cnblogs: 恋水无意


标签:Encrypt,ssl,nginx,letsencrypt,Let,Docker,com,docker,certbot
From: https://www.cnblogs.com/lianshuiwuyi/p/17360921.html

相关文章

  • Docker-Compose部署xxl-job-admin
    Docker-Compose部署xxl-job-admin最近在探索微服务想做一个分布式任务调度中心,发现用之前.net的Quartz不太行Quartz作为开源作业调度中的佼佼者,是作业调度的首选。但是集群环境中Quartz采用API的方式对任务进行管理,从而可以避免上述问题,但是同样存在以下问题:问题一:调用API的的方......
  • Docker CLI docker compose ls常用命令
    Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。Docker是内核虚拟化,不使用Hypervisor是不完全虚拟化,依赖内核的特性实现资源隔离。本文主要介绍DockerCLI中d......
  • let 和 const的区别
    let和const的区别在JavaScript中,let和const都是用来声明变量的关键字,它们的主要区别在于变量的可变性和作用域范围。let声明的变量是可变的(mutable),可以重新赋值,但不能重新声明。const声明的变量是不可变的(immutable),不能重新赋值,也不能重新声明。letx=10;x=20......
  • 虚拟机安装docker镜像
    一、下载centOs镜像文件    下载地址:http://mirrors.aliyun.com/centos/7/isos/x86_64/ (目前试例选择的是CentOS-7-x86_64-DVD-2009.iso:桌面版,也可根据需求选择Everything版本的,基本上包含了全部配置)二、下载VMware   目前选择的是 16破解版,随便下载找个下载地......
  • Docker创建运行Redis并挂载
    一、拉取redis镜像1、在线状态下拉取redis镜像dockerpullredis:版本号2、离线状态下获取redis镜像将在线状态拉取额redis镜像打成tar包dockersave-oredis.tarredis:版本号sudodockerload-iredis.tar二、运行redis容器dockerrun--restart=always--log-optmax......
  • 解决docker in docker http推送问题
    FROMdocker:18.09-dindENVDOCKER_HOST=unix:///var/run/docker.sockADD./main/bin/RUNmkdir-p/etc/docker&&echo-e'{"insecure-registries":["ip:5000"]}'>/etc/docker/daemon.jsonENTRYPOINT["/usr/local/......
  • docker安装mysql
    Docker安装MySQLDocker是一个开源的容器化平台,可以方便地搭建各种环境,包括MySQL数据库。在本教程中,我们将介绍如何使用Docker安装MySQL。步骤1:安装Docker首先,您需要在您的计算机上安装Docker。您可以在Docker官方网站下载适用于您的操作系统的DockerDesktop应用程序并安装。......
  • docker-harbor
    一、本地私有仓库1.本地私有仓库简介docker本地仓库,存放镜像,本地的机器上传和下载,pull/push。使用私有仓库有许多优点:①节省网络带宽,针对于每个镜像不用每个人都去中央仓库上面去下载,只需要从私有仓库中下载即可;②提供镜像资源利用,针对于公司内部使用的镜像,推送到本地的私有......
  • MissingServletRequestParameterException: Required request parameter 'xxx' for me
    关于简单参数传递的一个异常先前情提要一下,在练习一个带分页的员工查询请求功能,接口文档描述如下其中页码跟记录数是必须参数,然后有个按姓名模糊查询,这个参数是可有可无的然后我最初写的代码长这样用@RequestParam注解来获取这个url中携带的简单参数然后测试页面的时候......
  • docker-compose的使用
    1.docker-compose.yml中支持的模板命令参考:https://yeasy.gitbook.io/docker_practice/compose/compose_filea.build通过docker-compose在启动容器之前现根据Dockerfile构建镜像,然后根据构建镜像启动容器b.command指令覆盖容器启动后默认执行的命令c.container_name指......