跳转到主要内容

确保证书的OCSP响应保持最新。

项目描述

OCSP Bot的职责是确保一组证书的OCSP响应保持最新。

该bot应该定期作为cronjob运行(例如,每小时一次),并将尝试获取以下证书的OCSP响应:

  • 当前没有有效的OCSP响应存储,并且

  • 现有的OCSP响应即将到期。

"即将到期"的标准可以在配置中定义。

要安装,请使用pip install ocspbot。如果您想要一个单文件版本,请将ocspbot/__main__.py重命名为ocspbot.py并使用该文件。

要求

OCSP Bot需要pyyamlOpenSSL。它已经与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: <数字>

    指定一个百分比(介于0100之间)。如果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文件都将被解析,并处理domainsscan_keys条目,就像主配置文件一样。

  • output_log: <字符串>

    error_log: <字符串>

    将输出分别写入日志文件,而不是写入stdoutstderr。文件名将以以下替换格式化

    • {year}: 当前年份(四位数字)

    • {month}: 当前月份,1至12(两位数字)

    • {day}: 每月当前日期,1至31(两位数字)

    • {hour}: 当前小时,0至23(两位数字)

    • {minute}: 当前分钟,0至59(两位数字)

    • {second}: 当前秒,0至59(两位数字)

示例配置文件

以下配置文件更新了 example.comexample.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-respexample.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 (18.3 kB 查看哈希)

上传时间

构建分布

ocspbot-0.9.3-py2.py3-none-any.whl (15.7 kB 查看哈希)

上传时间 Python 2 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面