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上的主机host。host可以是域名或 IP (v4 或 v6) 地址,例如
127.0.0.1
或[::1]
表示本地主机。-path选项指定要使用的 HTTP 路径名或默认的“/”。这等效于使用方案 http:// 和给定的host、port和可选的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 中获取副本。