确保证书的OCSP响应保持最新。
项目描述
OCSP Bot的职责是确保一组证书的OCSP响应保持最新。
该bot应该定期作为cronjob运行(例如,每小时一次),并将尝试获取以下证书的OCSP响应:
当前没有有效的OCSP响应存储,并且
现有的OCSP响应即将到期。
"即将到期"的标准可以在配置中定义。
要安装,请使用pip install ocspbot。如果您想要一个单文件版本,请将ocspbot/__main__.py重命名为ocspbot.py并使用该文件。
要求
OCSP Bot需要pyyaml和OpenSSL。它已经与OpenSSL 1.0.x和1.1.0进行了测试,但未与OpenSSL 0.9.x进行测试。
命令行界面
OCSP Bot可以按以下方式调用
ocspbot.py [ <config file> ] [ -h | -help | --help ] [ -v | -version | --version ]
如果指定了-h、-help或--help,将打印简短的帮助文本。如果指定了-v、-version或--version,将打印程序的版本。
如果没有指定配置文件名,将使用ocspbot.yaml
。将解析配置文件,并处理其中指定的证书。
OCSP Bot返回0表示成功(无更改),返回正值表示更新的OCSP响应数量,返回负值表示错误。
返回码 |
含义 |
---|---|
-1 |
获取OCSP响应时发生错误 |
-2 |
解析配置时发生错误(解析YAML,开始记录日志) |
-3 |
解析配置时发生错误(解释配置) |
-4 |
无效的命令行参数 |
非零返回值可以用于重新加载提供OCSP响应的服务。如果返回值为负数,可能需要手动用户干预。
配置文件格式
配置文件必须使用YAML格式。它们可以包含以下键
ocsp_folder: <字符串>
存储OCSP响应的文件夹。所有OCSP响应路径都将相对于此路径解释。
默认值是空字符串,即当前目录。
minimum_validity: <字符串>
如果OCSP响应比描述的时间间隔新,程序将尝试更新它。字符串被解释为以下形式的空格分隔标记列表
? s, ? sec, ? second, ? seconds ? m, ? min, ? minute, ? minutes ? h, ? hour, ? hours ? d, ? day, ? days ? w, ? week, ? weeks
示例
2小时5分钟10秒
1周3天5小时
minimum_validity_percentage: <数字>
指定一个百分比(介于0和100之间)。如果OCSP响应的生命周期中已经过去了这个百分比的值,则响应将被更新。
parallel_threads: <数字>
指定要并行运行的线程数。默认值为1。
stop_on_error: <布尔值>
指定在处理OCSP响应时是否在找到第一个错误时停止,或者尝试更新所有内容。
make_backups: <布尔值>
如果设置为True,新的OCSP响应也将复制到
ocsp_folder
目录中,作为备份(以记录在何时使用了哪个OCSP响应)。默认值为False。openssl_executable: <字符串>
要使用的OpenSSL可执行文件。默认为
openssl
。domains: <字典>
该字典将域名标识符映射到包含以下条目的字典
cert: <字符串>
证书文件的路径。将相对于当前工作目录进行解释。必须始终指定。
chain: <字符串>
证书链文件的路径。链中既不能包含证书本身,也不能包含根证书。将相对于当前工作目录进行解释。必须始终指定。
rootchain: <字符串>
证书根链文件的路径。根链不得包含证书本身,但必须包含根证书。将相对于当前工作目录进行解释。必须始终指定。
ocsp: <字符串>
OCSP响应文件的路径。将相对于ocsp_folder进行解释。必须始终指定。
ocsp_responder_uri: <字符串>
此证书的OCSP响应器的URI。可以省略或设置为特殊值certificate以从证书中提取URL。
域名标识符仅用于输出消息中。
scan_keys: <列表>
每个列表条目必须是一个包含以下条目的字典
folder: <字符串>
默认值:(空字符串,即当前工作目录)
recursive: <布尔值>
默认值:True
cert_mask: <字符串>
默认值:{domain}.pem
chain_mask: <字符串>
默认值:{domain}-chain.pem
rootchain_mask: <字符串>
默认值:{domain}-rootchain.pem
ocsp_mask: <字符串>
默认值:{domain}.ocsp-resp
对于每个字典,程序将在指定的文件夹(如果recursive设置为True,则包括其子文件夹)中搜索所有匹配域名标识符{domain}的文件(证书、链、根链)的三元组;将选择相应的OCSP响应文件名。
当递归扫描时,如果在子文件夹中找到三元组,则将三元组文件的相对路径添加到要扫描的文件夹的前面。
includes: <列表>
要搜索包含扩展名.yml和.yaml的YAML文件的文件夹列表。所有找到的YAML文件都将被解析,并处理domains和scan_keys条目,就像主配置文件一样。
output_log: <字符串>
error_log: <字符串>
将输出分别写入日志文件,而不是写入stdout或stderr。文件名将以以下替换格式化
{year}: 当前年份(四位数字)
{month}: 当前月份,1至12(两位数字)
{day}: 每月当前日期,1至31(两位数字)
{hour}: 当前小时,0至23(两位数字)
{minute}: 当前分钟,0至59(两位数字)
{second}: 当前秒,0至59(两位数字)
示例配置文件
以下配置文件更新了 example.com 和 example.org 的 OCSP 响应,以确保响应至少有效三天或其有效期的 42.8%。将创建备份,并将 stdout 输出记录。证书来自 /var/www/tls/certs/,响应将写入 /var/www/ocsp/responses 并备份。
最小有效参数已针对 Let’s Encrypt 调整。当每小时运行一次 CERT Bot 一段时间后,/var/www/ocsp/responses 可能包含以下文件
example.com.ocsp-resp example.com.ocsp-resp-20170415-060000 example.com.ocsp-resp-20170418-060000 example.com.ocsp-resp-20170421-060000 example.org.ocsp-resp example.org.ocsp-resp-20170415-060000 example.org.ocsp-resp-20170418-060000 example.org.ocsp-resp-20170421-060000
当前有效的 OCSP 响应为 example.com.ocsp-resp 和 example.org.ocsp-resp,最后更新时间为 2017 年 4 月 21 日上午 06:00。
配置文件
---
openssl_executable: openssl
minimum_validity: 3d
minimum_validity_percentage: 42.8
ocsp_folder: /var/www/ocsp/responses
parallel_threads: 1
output_log: /var/www/ocsp/logs/example-{year}{month}{day}-{hour}{minute}{second}.log
make_backups: True
domains:
example.com:
cert: /var/www/tls/certs/example.com.pem
chain: /var/www/tls/certs/example.com-chain.pem
rootchain: /var/www/tls/certs/example.com-rootchain.pem
ocsp: example.com.ocsp-resp
example.org:
cert: /var/www/tls/certs/example.org.pem
chain: /var/www/tls/certs/example.org-chain.pem
rootchain: /var/www/tls/certs/example.org-rootchain.pem
ocsp: example.org.ocsp-resp
项目详情
下载文件
下载适用于您平台文件的文件。如果您不确定该选择哪个,请了解更多关于 安装包 的信息。
源分布
构建分布
ocspbot-0.9.3.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 32e4448787f9dd2b24411081235108d67c3a5070af09d74c0e1fb9586cada22f |
|
MD5 | 38c427cf416cc01ded04a1a339aa3190 |
|
BLAKE2b-256 | 7fdec906d4358fb0a2b5c1ccda8bc7167b93f762433170afd83ec331765a0a32 |
ocspbot-0.9.3-py2.py3-none-any.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b81c16aa82383f29f8a957150cd926f6f8ead01277412f81ee0325903f233ce8 |
|
MD5 | d4ee4bef8454c1d78aae4f0e607eeb94 |
|
BLAKE2b-256 | 3e4b580d855c40d05754bacc358adb5f7eb22c805ae36b3996b10c44430c96a0 |