.hd-box .hd-fr

IT之家学院:Let's Encrypt证书一处申请多服务器同步教程

2019-01-20 14:36IT之家特约(xubiaosunnny)0评
感谢IT之家网友xubiaosunnny的线索投递!

我自己域名的SSL证书都是使用的Let's Encrypt,不但免费而且使用Certbot申请也特别方便快速。之前都是申请单域名的证书,在每个需要的服务器上分别单独申请。

开始需要证书的服务少还好,后来越来越多了,自己的一个小网站、NextCloud服务器、OpenVPN、家里的路由器后台、OpenMediaVault等,这样的话在每个机器上都得申请一次,太繁琐。而Let's Encrypt支持泛域名申请,那么我们就可以在一台服务器上申请然后同步到其他服务器上。

于是我抽空这两天简单做了一个Let's Encrypt证书自动续租及其他服务器自动同步的程序。服务运行模式为客户端-服务器模式,代码使用Python3开发。

>>GitHub项目地址<<

整套服务的两种工作模式:

具体教程如下:

certbot-async

该项目是一个Let's Encrypt证书续租及服务器间同步程序,目的是为泛域名证书在一台服务器上申请,其他需要证书的服务器自动同步。

服务端

在启动服务端程序之前,首先要使用Certbot(地址:https://certbot.eff.org/)成功申请证书。

参考以下链接及官方文档:https://www.hi-linux.com/posts/6968.html

将项目克隆到/root/certbot-asnyc,如在其他位置需自行修改命令参数

该服务须以管理员权限运行,因为Let's Encrypt目录的用户为root。如果root用户没有生成过ssh key,还需先使用ssh-keygen生成公钥。

在项目下创建server_config.json来配置相关设置,可选配置参数:

{
    "domain": "xxx.xx", //申请证书的域名,如xubiaosunny.online
    "certbot_path": "", // certbot-auto文件位置,建议将其放入/usr/bin下
    "renew_period": 10, //续租周期,默认10天尝试续租一次
    "port": 8000, //服务监听端口
    "access_key": "", //认证key
    //配置邮箱以便通知续租情况,可不配置
    "smtp_server": "", //邮箱服务器地址
    "smtp_port": "", //邮箱服务器端口
    "smtp_ssl": true, //是否启用SSL
    "smtp_email": "", //邮箱地址
    "smtp_password": "", //邮箱密码
    "notify_receiver": "" //接收通知的邮箱
}

在项目下创建whitelist.txt以启用在白名单功能,将允许访问的ip一行一个写入文件内。删除该文件则所有ip均可访问。

服务端启动可选参数:

-r, --renew 直接续租,不启动服务
-s, --ssl  使用https启动服务,默认使用http

Docker启动

1、首先安装docker

sudo apt-get update
sudo apt-get install docker-ce

2、构建镜像

docker build --rm -f "Dockerfile" -t certbot-async:latest .

3、启动容器

docker run -d -it \
-v /root/certbot-async:/root/certbot-asnyc \
-v /etc/letsEncrypt:/etc/letsEncrypt \
-v /root/.ssh:/root/.ssh \
-p 8000:8000 \
--rm --name certboot-async certbot-async python ./server.py

使用python3直接启动

1、安装pipenv

python3 -m pip install pipenv

2、安装依赖

pipenv install

3、启动服务程序

pipenv run python ./server.py

客户端

在项目下创建client_config.json来配置相关设置,可选配置参数

{  
    "server_host": "http://127.0.0.1:8000", //服务端地址
    "access_key": "", //认证key,需与服务端一样
    "cert_dir": "./letsEncrypt", //证书存放位置
    "after_script": "echo $HOME", //获取证书后执行的命令
    "ssh_port": "22" //本地ssh端口
}

客户端有两种工作模式:

主动模式

直接从服务端下载证书文件

pipenv run python ./client.py

订阅模式

pipenv run python ./client.py -rs

订阅后,服务端续租成功后会自动将证书同步到客户端服务器,讲求实时性。订阅有效期为60天。须在60天内再次订阅,逾期服务端将不会同步。

IT之家注:该文章由IT之家编辑整理,作者原博客地址

广告声明:文内含有的对外跳转链接(包括不限于超链接、二维码、口令等形式),用于传递更多信息,节省甄选时间,结果仅供参考,IT之家所有文章均包含本声明。

下载IT之家APP,分享赚金币换豪礼
大家都在买广告
热门评论
查看更多评论