确保证书的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 |