OpenSSL

加密和 SSL/TLS 工具包

openssl-ocsp

名称

openssl-ocsp - 在线证书状态协议命令

语法

OCSP 客户端

openssl ocsp [-help] [-out file] [-issuer file] [-cert file] [-no_certs] [-serial n] [-signer file] [-signkey file] [-sign_other file] [-nonce] [-no_nonce] [-req_text] [-resp_text] [-text] [-reqout file] [-respout file] [-reqin file] [-respin file] [-url URL] [-host host:port] [-path pathname] [-proxy [http[s]://][userinfo@]host[:port][/path]] [-no_proxy addresses] [-header] [-timeout seconds] [-VAfile file] [-validity_period n] [-status_age n] [-noverify] [-verify_other file] [-trust_other] [-no_intern] [-no_signature_verify] [-no_cert_verify] [-no_chain] [-no_cert_checks] [-no_explicit] [-port num] [-ignore_err]

OCSP 服务器

openssl ocsp [-index file] [-CA file] [-rsigner file] [-rkey file] [-passin arg] [-rother file] [-rsigopt nm:v] [-rmd digest] [-badsig] [-resp_no_certs] [-nmin n] [-ndays n] [-resp_key_id] [-nrequest n] [-multi process-count] [-rcid digest] [-digest] [-CAfile file] [-no-CAfile] [-CApath dir] [-no-CApath] [-CAstore uri] [-no-CAstore] [-allow_proxy_certs] [-attime timestamp] [-no_check_time] [-check_ss_sig] [-crl_check] [-crl_check_all] [-explicit_policy] [-extended_crl] [-ignore_critical] [-inhibit_any] [-inhibit_map] [-partial_chain] [-policy arg] [-policy_check] [-policy_print] [-purpose purpose] [-suiteB_128] [-suiteB_128_only] [-suiteB_192] [-trusted_first] [-no_alt_chains] [-use_deltas] [-auth_level num] [-verify_depth num] [-verify_email email] [-verify_hostname hostname] [-verify_ip ip] [-verify_name name] [-x509_strict] [-issuer_checks] [-provider name] [-provider-path path] [-propquery propq]

描述

在线证书状态协议 (OCSP) 使应用程序能够确定已识别证书的(吊销)状态 (RFC 2560)。

此命令执行许多常见的 OCSP 任务。它可用于打印请求和响应、创建请求并向 OCSP 响应者发送查询,以及充当小型 OCSP 服务器本身。

选项

此命令作为客户端或服务器运行。以下描述了这些选项,并将其分为这两种模式。

OCSP 客户端选项

-help

打印用法信息。

-out filename

指定输出文件名,默认为标准输出。

-issuer filename

这指定当前的颁发者证书。输入可以是 PEM、DER 或 PKCS#12 格式。

此选项可以多次使用。此选项必须出现在任何-cert选项之前。

-cert filename

将证书filename添加到请求中。输入可以是 PEM、DER 或 PKCS#12 格式。

此选项可以多次使用。颁发者证书取自之前的-issuer选项,如果未指定颁发者证书,则会发生错误。

-no_certs

不要在已签名的请求中包含任何证书。

-serial num

-cert选项相同,除了将序列号为num的证书添加到请求中。除非以0x开头,否则序列号将解释为十进制整数。也可以通过在值前加上-符号来指定负整数。

-signer filename, -signkey filename

使用-signer选项中指定的证书和-signkey选项指定的私钥对 OCSP 请求进行签名。输入可以是 PEM、DER 或 PKCS#12 格式。

如果不存在-signkey选项,则从与证书相同的文件中读取私钥。如果两个选项均未指定,则不会对 OCSP 请求进行签名。

-sign_other filename

要包含在已签名请求中的其他证书。输入可以是 PEM、DER 或 PKCS#12 格式。

-nonce, -no_nonce

向请求添加 OCSP nonce 扩展或禁用 OCSP nonce 添加。通常,如果使用-reqin选项输入 OCSP 请求,则不会添加 nonce:使用-nonce选项将强制添加 nonce。如果正在创建 OCSP 请求(使用-cert-serial选项),则会自动添加 nonce,指定-no_nonce将覆盖此操作。

-req_text, -resp_text, -text

分别打印 OCSP 请求、响应或两者的文本形式。

-reqout file, -respout file

将 DER 编码的证书请求或响应写入file

-reqin file, -respin file

file读取 OCSP 请求或响应文件。如果其他选项暗示 OCSP 请求或响应创建(例如,使用-serial-cert-host选项),则会忽略这些选项。

-url responder_url

通过 URL 指定响应者主机以及可选的端口和路径。可以指定 HTTP 和 HTTPS (SSL/TLS) URL。忽略可选的用户信息和片段组件。任何给定的查询组件都将作为路径组件的一部分进行处理。有关详细信息,请参阅接下来描述的-host-path选项。

-host host:port, -path pathname

如果存在-host选项,则将 OCSP 请求发送到端口port上的主机hosthost可以是域名或 IP (v4 或 v6) 地址,例如127.0.0.1[::1]表示本地主机。-path选项指定要使用的 HTTP 路径名或默认的“/”。这等效于使用方案 http:// 和给定的hostport和可选的pathname指定-url

-proxy [http[s]://][userinfo@]host[:port][/path]

用于到达 OCSP 服务器的 HTTP(S) 代理服务器,除非-no_proxy适用,请参见下文。如果方案为https,则代理端口默认为 80 或 443;除此之外,可选的http://https://前缀将被忽略,以及任何用户信息和路径组件。如果已设置,则默认为环境变量http_proxy,否则在不使用 TLS 的情况下默认为HTTP_PROXY,否则如果已设置,则默认为https_proxy,否则默认为HTTPS_PROXY

-no_proxy addresses

不使用 HTTP(S) 代理的服务器的 IP 地址和/或 DNS 名称列表,以逗号和/或空格分隔(在后者情况下,整个参数必须括在“... ”中)。默认为环境变量no_proxy(如果已设置),否则默认为NO_PROXY

-header name=value

将标头name与指定的value一起添加到发送到响应者的 OCSP 请求中。这可以重复。

-timeout seconds

以秒为单位连接到 OCSP 响应者的超时时间。在 POSIX 系统上,作为 OCSP 响应者运行时,此选项还限制响应者愿意等待客户端请求的时间。此时间是从响应者接受连接到收到完整请求的时间开始计算。

-verify_other file

包含其他证书的文件或 URI,在尝试查找 OCSP 响应签名证书时搜索这些证书。一些响应者会从响应中省略实际签名者的证书:在这种情况下,可以使用此选项提供必要的证书。输入可以是 PEM、DER 或 PKCS#12 格式。

-trust_other

-verify_other选项指定的证书应被明确信任,并且不会对其执行其他检查。当完整的响应者证书链不可用或信任根 CA 不合适时,这很有用。

-VAfile file

包含明确信任的响应者证书的文件或 URI。等效于-verify_other-trust_other选项。输入可以是 PEM、DER 或 PKCS#12 格式。

-noverify

不要尝试验证 OCSP 响应签名或 nonce 值。此选项通常仅用于调试,因为它会禁用响应者证书的所有验证。

-no_intern

在搜索签名者证书时,忽略 OCSP 响应中包含的证书。使用此选项,必须使用-verify_other-VAfile选项指定签名者证书。

-no_signature_verify

不要检查 OCSP 响应上的签名。由于此选项容忍 OCSP 响应上的无效签名,因此通常仅用于测试目的。

-no_cert_verify

根本不验证 OCSP 响应签名者证书。由于此选项允许任何证书对 OCSP 响应进行签名,因此应仅用于测试目的。

-no_chain

不要将响应中的证书用作其他不受信任的 CA 证书。

-no_explicit

如果将其设置为可信用于 OCSP 签名,则不要明确信任根 CA。

-no_cert_checks

不要对 OCSP 响应签名者证书执行任何其他检查。也就是说,不要进行任何检查以查看签名者证书是否有权提供必要的状态信息:因此,此选项应仅用于测试目的。

-validity_period nsec, -status_age age

这些选项指定 OCSP 响应中将容忍的时间范围(以秒为单位)。每个证书状态响应都包含一个notBefore时间和一个可选的notAfter时间。当前时间应介于这两个值之间,但这两个时间之间的时间间隔可能只有几秒钟。在实践中,OCSP 响应者和客户端的时钟可能未精确同步,因此此类检查可能会失败。为了避免这种情况,可以使用-validity_period选项指定可接受的误差范围(以秒为单位),默认值为 5 分钟。

如果从响应中省略了notAfter时间,则表示新的状态信息立即可用。在这种情况下,会检查notBefore字段的年龄,以查看其是否超过age秒。默认情况下,不会执行此附加检查。

-rcid digest

此选项设置在 OCSP 响应中用于证书识别的摘要算法。可以使用openssl-dgst(1)命令支持的任何摘要。默认值与请求中使用的摘要算法相同。

-digest

此选项设置在 OCSP 请求中用于证书识别的摘要算法。可以使用 OpenSSL dgst命令支持的任何摘要。默认值为 SHA-1。此选项可以多次使用以指定后续证书标识符使用的摘要。

-CAfile file, -no-CAfile, -CApath dir, -no-CApath, -CAstore uri, -no-CAstore

有关详细信息,请参阅openssl-verification-options(1)中的“受信任证书选项”

-allow_proxy_certs, -attime, -no_check_time, -check_ss_sig, -crl_check, -crl_check_all, -explicit_policy, -extended_crl, -ignore_critical, -inhibit_any, -inhibit_map, -no_alt_chains, -partial_chain, -policy, -policy_check, -policy_print, -purpose, -suiteB_128, -suiteB_128_only, -suiteB_192, -trusted_first, -use_deltas, -auth_level, -verify_depth, -verify_email, -verify_hostname, -verify_ip, -verify_name, -x509_strict -issuer_checks

设置证书链验证的各种选项。详细信息请参见 openssl-verification-options(1) 中的“Verification Options”

-provider name
-provider-path path
-propquery propq

请参见 openssl(1) 中的“Provider Options”provider(7)property(7)

OCSP 服务器选项

-index indexfile

indexfile 参数是 ca 格式文本索引文件的名称,其中包含证书吊销信息。

如果指定了 -index 选项,则此命令切换到响应程序模式,否则处于客户端模式。响应程序处理的请求可以是在命令行上指定(使用 -issuer-serial 选项),在文件中提供(使用 -reqin 选项)或通过外部 OCSP 客户端提供(如果指定了 -port-url)。

如果存在 -index 选项,则 -CA-rsigner 选项也必须存在。

-CA file

与使用 -index 给出的索引文件中的吊销信息相对应的 CA 证书。输入可以是 PEM、DER 或 PKCS#12 格式。

-rsigner file

用于签署 OCSP 响应的证书。输入可以是 PEM、DER 或 PKCS#12 格式。

-rkey file

用于签署 OCSP 响应的私钥:如果不存在,则使用 -rsigner 选项中指定的文件。

-passin arg

私钥密码源。有关 arg 格式的更多信息,请参见 openssl-passphrase-options(1)

-rother file

要包含在 OCSP 响应中的其他证书。输入可以是 PEM、DER 或 PKCS#12 格式。

-rsigopt nm:v

在签署 OCSP 响应时将选项传递给签名算法。这些选项的名称和值特定于算法。

-rmd digest

签署响应时使用的摘要。

-badsig

在写入响应签名之前将其损坏;这对于测试很有用。

-resp_no_certs

不要在 OCSP 响应中包含任何证书。

-resp_key_id

使用密钥 ID 识别签名者证书,默认为使用主体名称。

-port portnum

侦听 OCSP 请求的端口。IPv4 和 IPv6 都可以使用。也可以使用 -url 选项指定端口。0 参数表示应自动选择任何可用的端口。

-ignore_err

忽略格式错误的请求或响应:在充当 OCSP 客户端时,如果收到格式错误的响应,请重试。在充当 OCSP 响应程序时,在收到格式错误的请求时继续运行而不是终止。

-nrequest number

OCSP 服务器将在收到 number 个请求后退出,默认情况下不限数量。

-multi process-count

运行指定数量的 OCSP 响应程序子进程,父进程根据需要重新生成子进程。子进程将检测 CA 索引文件中的更改并自动重新加载它。在作为响应程序运行时,建议使用 -timeout 选项来限制每个子进程愿意等待客户端的 OCSP 响应的时间。此选项在 POSIX 系统(支持 fork() 和其他必需的 unix 系统调用)上可用。

-nmin minutes, -ndays days

提供最新吊销信息的时间(分钟或天数):用于 nextUpdate 字段。如果这两个选项都不存在,则省略 nextUpdate 字段,这意味着最新吊销信息立即可用。

OCSP 响应验证

OCSP 响应遵循 RFC2560 中指定的规则。

最初,将找到 OCSP 响应程序证书,并使用响应程序证书的公钥检查 OCSP 请求上的签名。

然后对 OCSP 响应程序证书执行正常的证书验证,在此过程中构建证书链。用于构建链的可信证书的位置可以通过 -CAfile-CApath-CAstore 选项指定,或者将在标准 OpenSSL 证书目录中查找它们。

如果初始验证失败,则 OCSP 验证过程将停止并出现错误。

否则,将请求中的颁发 CA 证书与 OCSP 响应程序证书进行比较:如果匹配,则 OCSP 验证成功。

否则,将检查 OCSP 响应程序证书的 CA 与请求中的颁发 CA 证书。如果匹配并且 OCSP 响应程序证书中存在 OCSPSigning 扩展密钥用法,则 OCSP 验证成功。

否则,如果未设置 -no_explicit,则检查 OCSP 响应程序 CA 的根 CA 是否受信任以进行 OCSP 签名。如果是,则 OCSP 验证成功。

如果以上所有检查均未成功,则 OCSP 验证失败。

这实际上意味着,如果 OCSP 响应程序证书直接由其颁发吊销信息的 CA 授权(并且配置正确),则验证将成功。

如果 OCSP 响应程序是“全局响应程序”,可以提供有关多个 CA 的详细信息并具有其自己的独立证书链,则其根 CA 可以受信任以进行 OCSP 签名。例如

openssl x509 -in ocspCA.pem -addtrust OCSPSigning -out trustedCA.pem

或者,可以使用 -VAfile 选项显式信任响应程序证书本身。

注释

如前所述,大多数验证选项用于测试或调试目的。通常,只需要使用 -CApath-CAfile-CAstore 和(如果响应程序是“全局 VA”)-VAfile 选项。

OCSP 服务器仅适用于测试和演示目的:它实际上不能用作完整的 OCSP 响应程序。它仅包含非常简单的 HTTP 请求处理,并且只能处理 OCSP 查询的 POST 形式。它还串行处理请求,这意味着它无法响应新请求,直到处理完当前请求。吊销的文本索引文件格式对于大量吊销数据效率也很低。

可以使用 -reqin-respout 选项通过 CGI 脚本以响应程序模式运行此命令。

示例

创建 OCSP 请求并将其写入文件

openssl ocsp -issuer issuer.pem -cert c1.pem -cert c2.pem -reqout req.der

向 URL 为 http://ocsp.myhost.com/ 的 OCSP 响应程序发送查询,将响应保存到文件中,以文本形式打印出来,并验证响应

openssl ocsp -issuer issuer.pem -cert c1.pem -cert c2.pem \
    -url http://ocsp.myhost.com/ -resp_text -respout resp.der

读取 OCSP 响应并以文本形式打印出来

openssl ocsp -respin resp.der -text -noverify

端口 8888 上的 OCSP 服务器,使用标准 ca 配置和单独的响应程序证书。所有请求和响应都打印到文件中。

openssl ocsp -index demoCA/index.txt -port 8888 -rsigner rcert.pem -CA demoCA/cacert.pem
       -text -out log.txt

与上面相同,但在处理一个请求后退出

openssl ocsp -index demoCA/index.txt -port 8888 -rsigner rcert.pem -CA demoCA/cacert.pem
    -nrequest 1

使用内部生成的请求查询状态信息

openssl ocsp -index demoCA/index.txt -rsigner rcert.pem -CA demoCA/cacert.pem
    -issuer demoCA/cacert.pem -serial 1

使用从文件中读取的请求查询状态信息,并将响应写入第二个文件。

openssl ocsp -index demoCA/index.txt -rsigner rcert.pem -CA demoCA/cacert.pem
    -reqin req.der -respout resp.der

历史记录

在 OpenSSL 1.1.0 中添加了 -no_alt_chains 选项。

版权所有 2001-2023 OpenSSL 项目作者。保留所有权利。

根据 Apache 许可证 2.0(“许可证”)许可。除非符合许可证,否则您不得使用此文件。您可以在源代码分发中的 LICENSE 文件或 https://www.openssl.org/source/license.html 中获取副本。