windows 2008R2是一个过旧的系统。但不得不用,此环境下使用SSL按现在90天的有效期,多个子域名,频率更新非常麻烦。
使用certbot自动更新安全证书,而且支持通配符域名——手工更新了近一年,更是感动了。
一、certbot的下载:
GITHUB:https://github.com/certbot/certbot/releases?page=5
只能下载1.19及以下版本的。而且只能是WIN32:certbot-beta-installer-win32.exe
其后是需要Python3.9,从1.22升级支持Python 3.10。在Windows2008R2下都不能运行,报错:api-ms-win-core-path-l1-1-0.dll 缺失。都是Python版本高了。
二、certbot的安装
安装简单,直接NEXT,不过安装位置在Program Files (x86)下。使用点RUN.BAT 出现管理员权限下的CMD窗口,按提示输入 certbot --help(1.19可以,1.15要加上路径,在命令行输入: bin\certbot --help),出现英文帮助文本,说明环境正常,安装成功。
三、使用certbot取得安全证书
命令中文说明附后。
如果是用计划任务自动更新,申请证书的参考命令如下:
certbot certonly -d "*.cgz.cn" -d cgz.cn --webroot -w f:\web\cgz.cn\wwwroot
(一)通配符域名要用引号,它不包括无子域名的(cgz.cn),也不包括二级子域名(如s1.sj.cgz.cn)。对于二级子域名,应当新申请证书。
(二)验证方式用--webroot,并指定http://cgz.cn/所在的根目录,它会自已在指定目录里写入验证文件,通过回调http://zww.cn/.well-known/acme-challenge/....来认证你有域名权限。
注意:IIS默认是不支持无扩展名的文件访问的,而它恰好生成的就是无扩展名的文件,所以你得给IIS加个MIME。1.21版通过修改wen.config来自动配置,1.22说它有点小冲突。
(三)如果有自动续期,不能使用交互式的--manual方式,不然你无法按计划来手工处理DNS
(四)申请好的证书,自动更新配置,都保存在c:\certbot目录下的各子目录里。其中live里就是当前证书(按域名建立目录)
四、配置NGINX
(一)NGINX配置SSL:
ssl_certificate cert\cgz.cn\fullchain.pem;
ssl_certificate_key cert\cgz.cn\privkey.pem;
其中 文件夹 cert\cgz.cn\ 是自己保存用于Nginx读取安全证书,fullchain.pem、privkey.pem指定证书文件名
(二)将c:\certbot\live下指定域名的文件夹里的同名文件复制到NGINX证书文件夹.
(三)重启Nginx
这个时候通过https访问成功,可以在浏览器里查看证书的起止日期。
(四)LETSENCRYPT现在不再支持OCSP,( https://letsencrypt.org/2024/12/05/ending-ocsp)
为避免Nginx出现警告信息,需要关闭 OCSP
#ssl_stapling on; # 启用OCSP Stapling
#ssl_stapling_verify on; # 验证OCSP响应
如果你确需使用OCSP来提升性能,只能放弃使用这家CA了。
五、自动更新
(一)更新证书
命令为:certbot renew
它会自动从 c:\certbot\renewal 里读取每个域名的配置,检查是否需要更新( CA要求是在离到期一个月内)。
完整的命令为:
C:\PROGRA~2\Certbot>bin\certbot renew --deploy-hook "D:\nginx-1.16.0\cert_hook_copy.bat"
后面加了一个钩子(通过certbot -h renew可查看使用说明),在成功续期后将执行后面的批处理命令。命令的内容为复制证书文件到Nginx指定的文件夹,并重启Nginx。
(二)定时更新
使用windows的任务计划,从申请日开始,要保证任务在90天到期前要执行更新命令。
建议任务计划每2周一次,比如指定周日3:00。这样可以保证在第60-90天之间可以续期。
命令行工具使用说明
用法:certbot [子命令] [选项] [-d 域名] [-d 域名] ...
Certbot工具用于获取和安装 HTTPS/TLS/SSL 证书。默认情况下,Certbot会尝试为本地网页服务器
(如果不存在会默认安装一个到本地)获取并安装证书。最常用的子命令和选项如下:
获取, 安装, 更新证书:
(默认) run 获取并安装证书到当前网页服务器
certonly 获取或更新证书,但是不安装
renew 更新已经获取但快过期的所有证书
-d 域名列表 指定证书对应的域名列表,域名之间使用逗号分隔
--apache 使用Apache插件进行身份认证和安装
--standalone 运行一个独立的网页服务器用于身份认证
--nginx 使用Nginx插件进行身份认证和安装
--webroot 把身份认证文件放置在服务器的网页根目录下
--manual 使用交互式或脚本钩子的方式获取证书
-n 非交互式运行
--test-cert 从预交付服务器上获取测试证书
--dry-run 测试获取或更新证书,但是不存储到本地硬盘
证书管理:
certificates 显示使用Certbot生成的所有证书的信息
revoke 撤销证书(supply --cert-path)
delete 删除证书