前言:由于公网和内网有网站访问的需求,并且要求域名https进行访问,使用自签名https证书对于用户而言很麻烦,每一台主机都需要安装证书到本地,于是使用SSL证书签发系统进行部署,笔者使用的是阿里云域名服务,每年有20个免费的SSL证书可以创建下载,每张证书有效期3个月,这样的方式20个证书很快就用完了,便不得不付费购买SSL证书,但是我的网站是内网服务,并不需要太高端的CA(证书颁发机构)颁发,于是有没有免费的可信CA机构颁发的SSL证书。当然,是有的,目前流行的有3家慈善机构,分别是:Let's Encrypt,ZeroSSL,Google Trust Services,均可以使用,那么由于当下环境原因,导致原免费证书1年有效,现在均为3个月有效,且后续会变得更短,那么手工部署的频率就会增加,能否有一套自动化部署流程的系统来提供,也是有的,如:acme.sh,Certimate,Certd等均为开源组件或系统。
CA慈善机构:Let's Encrypt,ZeroSSL,Google Trust Services
SSL证书自动化部署组件/系统:acme.sh,Certimate,Certd
环境:阿里云域名,内/外网网站服务。
一、拥有域名、并新建RAM账号创建AccessKey
1、SSL证书申请前提,需要你拥有一个证书,笔者使用阿里云平台域名服务,新建一个RAM账号,并勾选AccessKey访问。
由于安全问题,建议使用RAM账号创建AccessKey,并授予特定权限。如果使用主账号申请,将会有账号风险。
创建成功后,复制AccessKey ID和AccessKey Secret,保存用于后续使用,没有保存记住的情况下,关闭窗口或者忘记了,只能重新创建AccessKey。
2、为RAM账号授权
授权:AliyunDomainFullAccess、AliyunDNSFullAccess这两个权限就可以了。
二、服务部署
笔者选择的服务是 Certimate,在github上拥有5K的star这是中文文档:https://docs.certimate.me/
安装服务器,安装dockere容器环境,安装docker-compose,安装git工具,这些操作完成后,执行下面命令即可。(安装前置条件省略,这里只提供核心操作步骤)
git clone git@github.com:usual2970/certimate.git && cd certimate/docker && docker compose up -d
如果自动部署服务器是在内网,请编辑docker-compose.yaml文件, 增加阿里云DNS,如果指向内网DNS服务器就会报超时错误,内网DNS已指向内网IP的情况下,会查询不到TXT记录。
三、服务配置
1、申请证书
命令执行完成后就会自动启动容器,访问IP+8090端口,如: http://192.168.1.22:8090/
默认账号信息:
用户名:admin@certimate.fun
密码:1234567890
默认自动选择Let's Encrypt机构,也是推荐选项
新增域名配置,域名列表-新增域名
添加好你需要的域名,新增邮箱,绑定DNS服务商
域名服务商支持多个,如:阿里云,腾讯云,华为云,百度智能云等等。
以阿里云为例,名称随意,填写好第一步申请好的阿里云AccessKey的信息,点击保存。
2、部署配置
到了第二步骤,可以部署在各大云平台上,也可以部署在内网本地和内网服务器中,例如,笔者这里部署在内网服务器中,选择SSH部署。
新增服务器信息
选择SSH部署,填写服务器IP,端口,用户名和密码等。
这里选中新增好的服务器信息,证书格式,证书路径,已经执行命令,比如证书更新好后重启nginx等(这里的信息均为网站服务器上的信息)
启用,并立即部署,查看日志,检查部署过程,大约1分钟,部署完成,可以检查网站SSL信息。
已经完成,网站可信证书部署,
常见问题:
数据安全?
由于仅支持私有部署,各种数据都保存在用户的服务器上。另外Certimate源码也开源,二进制包及Docker镜像打包过程全部使用Github actions进行,过程透明可见,可自行审计。
自动续期证书?
已经申请的证书会在过期前10天自动续期。每天会检查一次证书是否快要过期,快要过期时会自动重新申请证书并部署到目标服务上。