OpenSSL

密码学和SSL/TLS工具包

openssl-ts

名称

openssl-ts - 时间戳颁发机构命令

语法

openssl ts -help

openssl ts -query [-config configfile] [-data file_to_hash] [-digest digest_bytes] [-digest] [-tspolicy object_id] [-no_nonce] [-cert] [-in request.tsq] [-out request.tsq] [-text] [-rand files] [-writerand file] [-provider name] [-provider-path path] [-propquery propq]

openssl ts -reply [-config configfile] [-section tsa_section] [-queryfile request.tsq] [-passin password_src] [-signer tsa_cert.pem] [-inkey filename|uri] [-digest] [-chain certs_file.pem] [-tspolicy object_id] [-in response.tsr] [-token_in] [-out response.tsr] [-token_out] [-text] [-engine id] [-provider name] [-provider-path path] [-propquery propq]

openssl ts -verify [-data file_to_hash] [-digest digest_bytes] [-queryfile request.tsq] [-in response.tsr] [-token_in] [-untrusted files|uris] [-CAfile file] [-CApath dir] [-CAstore uri] [-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]

描述

此命令是一个基本的Time Stamping Authority (TSA) 客户端和服务器应用程序,如RFC 3161(时间戳协议,TSP)中所指定。TSA可以作为PKI部署的一部分,其作用是在特定时间之前提供某个数据的长期存在证明。以下是协议的简要描述

  1. TSA客户端计算数据文件的单向哈希值,并将哈希发送到TSA。

  2. TSA将当前日期和时间附加到接收到的哈希值,对其进行签名,并将时间戳令牌发送回客户端。通过创建此令牌,TSA证明原始数据文件在响应生成时存在。

  3. TSA客户端接收时间戳令牌并验证其上的签名。它还检查令牌是否包含它发送到TSA的相同哈希值。

定义了一个DER编码的协议数据单元用于将时间戳请求传输到TSA,另一个用于将时间戳响应发送回客户端。此命令具有三个主要功能:基于数据文件创建时间戳请求,基于请求创建时间戳响应,验证响应是否对应于特定请求或数据文件。

尚不支持根据RFC 3161中的建议自动通过HTTP或TCP发送请求/响应。用户必须通过ftp或电子邮件发送请求。

选项

-help

打印用法消息。

-query

生成TS查询。有关详细信息,请参阅“时间戳请求生成”

-reply

生成TS回复。有关详细信息,请参阅“时间戳响应生成”

-verify

验证TS响应。有关详细信息,请参阅“时间戳响应验证”

时间戳请求生成

-query命令可用于创建和打印时间戳请求,并使用以下选项

-config configfile

要使用的配置文件。可选;有关默认值的说明,请参阅“openssl(1)中的“命令摘要”

-data file_to_hash

需要为其创建时间戳请求的数据文件。如果未指定-data-digest参数,则默认为标准输入。(可选)

-digest digest_bytes

可以显式指定消息指纹,而无需数据文件。指纹必须以十六进制格式指定,每个字节两个字符,字节之间可选地用冒号分隔(例如1A:F6:01:...或1AF601...)。字节数必须与正在使用的消息摘要算法匹配。(可选)

-digest

要应用于数据文件的邮件摘要。可以使用openssl-dgst(1)命令支持的任何摘要。默认值为SHA-256。(可选)

-tspolicy object_id

客户端期望TSA用于创建时间戳令牌的策略。可以使用点分OID表示法或配置文件中定义的OID名称。如果未请求任何策略,则TSA将使用其自己的默认策略。(可选)

-no_nonce

如果给出此选项,则请求中不指定nonce。否则,请求中将包含一个64位长的伪随机nonce。建议使用nonce来防止重放攻击。(可选)

-cert

预计TSA将在响应中包含其签名证书。(可选)

-in request.tsq

此选项指定以前创建的DER格式的时间戳请求,该请求将打印到输出文件中。当您需要以人类可读的格式检查请求的内容时很有用。(可选)

-out request.tsq

将请求写入的输出文件的名称。默认为标准输出。(可选)

-text

如果指定此选项,则输出为人类可读的文本格式,而不是DER。(可选)

-rand files, -writerand file

有关详细信息,请参阅“openssl(1)中的随机状态选项”

时间戳响应生成

时间戳响应(TimeStampResp)由响应状态和时间戳令牌本身(ContentInfo)组成,如果令牌生成成功。-reply命令用于基于请求创建时间戳响应或时间戳令牌,并以人类可读的格式打印响应/令牌。如果未指定-token_out,则输出始终为时间戳响应(TimeStampResp),否则为时间戳令牌(ContentInfo)。

-config configfile

要使用的配置文件。可选;有关默认值的说明,请参阅“openssl(1)中的“命令摘要”。有关可配置变量,请参阅“配置文件选项”

-section tsa_section

包含响应生成设置的配置文件部分的名称。如果未指定,则使用默认的TSA部分,有关详细信息,请参阅“配置文件选项”。(可选)

-queryfile request.tsq

包含DER编码的时间戳请求的文件的名称。(可选)

-passin password_src

指定TSA私钥的密码源。请参阅openssl(1)中的说明。(可选)

-signer tsa_cert.pem

TSA的PEM格式签名证书。TSA签名证书必须正好分配了一个扩展密钥用法:timeStamping。扩展密钥用法也必须是关键的,否则证书将被拒绝。覆盖配置文件的signer_cert变量。(可选)

-inkey filename|uri

TSA的PEM格式签名私钥。覆盖signer_key配置文件选项。(可选)

-digest

要使用的签名摘要。覆盖signer_digest配置文件选项。(除非在配置文件中指定,否则为必填)

-chain certs_file.pem

PEM格式的证书集合,如果请求中使用了-cert选项,则所有这些证书都将包含在响应中,除了签名证书之外。此文件应该包含从其颁发者向上到签名证书的证书链。-reply命令不会自动构建证书链。(可选)

-tspolicy object_id

除非客户端显式要求特定TSA策略,否则要用于响应的默认策略。OID可以使用点分表示法或其名称指定。覆盖default_policy配置文件选项。(可选)

-in response.tsr

指定以前创建的DER格式的时间戳响应或时间戳令牌(如果也指定了-token_in),该令牌将写入输出文件。此选项不需要请求,例如,当您需要检查响应或令牌的内容或要从响应中提取时间戳令牌时很有用。如果输入是令牌并且输出是时间戳响应,则默认的“已授予”状态信息将添加到令牌中。(可选)

-token_in

此标志可与-in选项一起使用,并指示输入是DER编码的时间戳令牌(ContentInfo)而不是时间戳响应(TimeStampResp)。(可选)

-out response.tsr

响应将写入此文件。文件格式和内容取决于其他选项(请参阅-text-token_out)。默认为标准输出。(可选)

-token_out

输出是时间戳令牌(ContentInfo)而不是时间戳响应(TimeStampResp)。(可选)

-text

如果指定此选项,则输出为人类可读的文本格式,而不是DER。(可选)

-engine id

请参阅“openssl(1)中的引擎选项”。此选项已弃用。

-provider name
-provider-path path
-propquery propq

请参阅“openssl(1)中的提供程序选项”provider(7)property(7)

时间戳响应验证

-verify命令用于验证时间戳响应或时间戳令牌是否有效,以及是否与特定时间戳请求或数据文件匹配。-verify命令不使用配置文件。

-data file_to_hash

必须针对file_to_hash验证响应或令牌。使用令牌中指定的邮件摘要算法对文件进行哈希运算。不能与之一起指定-digest-queryfile选项。(可选)

-digest digest_bytes

必须针对使用此选项指定的邮件摘要验证响应或令牌。字节数必须与令牌中指定的邮件摘要算法匹配。不能与之一起指定-data-queryfile选项。(可选)

-queryfile request.tsq

DER格式的原始时间戳请求。不能与之一起指定-data-digest选项。(可选)

-in response.tsr

需要以DER格式验证的时间戳响应。(必填)

-token_in

此标志可与-in选项一起使用,并指示输入是DER编码的时间戳令牌(ContentInfo)而不是时间戳响应(TimeStampResp)。(可选)

-untrusted files|uris

一组其他不受信任的证书,在构建TSA签名证书的证书链时可能需要这些证书。只要响应已包含它们,这些证书就不需要包含TSA签名证书和中间CA证书。(可选)

可以给出多个源,用逗号和/或空格分隔。每个文件可能包含多个证书。

-CAfile file, -CApath dir, -CAstore uri

有关详细信息,请参阅“openssl-verification-options(1)中的受信任证书选项”。必须至少指定-CAfile-CApath-CAstore之一。

-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)中的验证选项”

任何验证错误都会导致命令退出。

配置文件选项

-query-reply 命令使用配置文件。有关配置文件语法的通用描述,请参阅 config(5)-query 命令仅使用符号 OID 名称部分,并且可以在没有它的情况下工作。但是,-reply 命令需要配置文件才能运行。

当命令行开关等效于变量时,开关始终会覆盖配置文件中的设置。

tsa 部分,default_tsa

这是主部分,它指定另一个部分的名称,该部分包含 -reply 命令的所有选项。此默认部分可以使用 -section 命令行开关覆盖。(可选)

oid_file

这指定一个包含额外 对象标识符的文件。文件的每一行应包含对象标识符的数字形式,后跟空格,然后是短名称,后跟空格,最后是长名称。(可选)

oid_section

这指定配置文件中包含额外对象标识符的部分。每一行应包含对象标识符的短名称,后跟 = 和数字形式。当使用此选项时,短名称和长名称相同。(可选)

RANDFILE

启动时,指定的文件将加载到随机数生成器中,并在退出时向其写入 256 个字节。(注意:不再需要使用 RANDFILE,请参阅 "HISTORY" 部分。

serial

包含创建的最后一个时间戳响应的十六进制序列号的文件的名称。此数字为每个响应递增 1。如果在响应生成时文件不存在,则会创建一个序列号为 1 的新文件。(必填)

crypto_device

指定将被设置为所有可用算法的默认值的 OpenSSL 引擎。默认值为内置,您可以指定 OpenSSL 支持的任何其他引擎(例如,对 NCipher HSM 使用 chil)。(可选)

signer_cert

PEM 格式的 TSA 签名证书。与 -signer 命令行选项相同。(可选)

certs

包含一组需要包含在响应中的 PEM 编码证书的文件。与 -chain 命令行选项相同。(可选)

signer_key

TSA 的私钥,PEM 格式。与 -inkey 命令行选项相同。(可选)

signer_digest

要使用的签名摘要。与 -digest 命令行选项相同。(除非在命令行中指定,否则为必填)

default_policy

当请求未强制执行任何策略时要使用的默认策略。与 -tspolicy 命令行选项相同。(可选)

other_policies

TSA 也可接受的策略的逗号分隔列表,仅当请求明确指定其中一个策略时才使用。(可选)

digests

TSA 接受的消息摘要算法列表。必须指定至少一种算法。(必填)

accuracy

TSA 时间源的精度(以秒、毫秒和微秒为单位)。例如 secs:1, millisecs:500, microsecs:100。如果任何组件丢失,则该字段将假定为零。(可选)

clock_precision_digits

指定需要包含在时间字段中的秒分数的最大位数。必须从时间中删除尾随零,因此实际上可能位数更少,或者根本没有秒分数。仅在 UNIX 平台上支持。最大值为 6,默认为 0。(可选)

ordering

如果此选项为 yes,则即使两个响应之间的时间差小于其精度的总和,此 TSA 生成的响应也可以始终排序。默认为 no。(可选)

tsa_name

如果响应的 TSA 名称字段中必须包含 TSA 的主体名称,则设置此选项为 yes。默认为 no。(可选)

ess_cert_id_chain

TSA 创建的 SignedData 对象始终在签名属性中包含签名证书的证书标识符(请参阅 RFC 2634,增强安全服务)。如果此变量设置为 no,则仅此签名证书标识符包含在 SigningCertificate 签名属性中。如果此变量设置为 yes 并且指定了 certs 变量或 -chain 选项,则证书链的证书标识符也将包含在内,其中 -chain 选项会覆盖 certs 变量。默认为 no。(可选)

ess_cert_id_alg

此选项指定用于计算 TSA 的公钥证书标识符的哈希函数。默认为 sha256。(可选)

示例

以下所有示例都假设 OPENSSL_CONF 设置为正确的配置文件,例如,示例配置文件 openssl/apps/openssl.cnf 可以。

时间戳请求

要为 design1.txt 创建具有 SHA-256 摘要的时间戳请求,不使用 nonce 和策略,并且不要求响应中包含证书

openssl ts -query -data design1.txt -no_nonce \
      -out design1.tsq

要创建类似的时间戳请求,并显式指定消息指纹

openssl ts -query -digest b7e5d3f93198b38379852f2c04e78d73abdd0f4b \
       -no_nonce -out design1.tsq

要以人类可读的格式打印先前请求的内容

openssl ts -query -in design1.tsq -text

要创建一个时间戳请求,其中包含 design2.txt 的 SHA-512 摘要,请求签名者证书和 nonce,并指定策略 ID(假设 tsa_policy1 名称在配置文件的 OID 部分中定义)

openssl ts -query -data design2.txt -sha512 \
      -tspolicy tsa_policy1 -cert -out design2.tsq

时间戳响应

在生成响应之前,必须为 TSA 创建一个签名证书,该证书包含 timeStamping 关键扩展密钥使用扩展,而没有任何其他密钥使用扩展。您可以将此行添加到配置文件的用户证书部分以生成正确的证书;

extendedKeyUsage = critical,timeStamping

有关说明,请参阅 openssl-req(1)openssl-ca(1)openssl-x509(1)。以下示例假设 cacert.pem 包含 CA 的证书,tsacert.pem 是由 cacert.pem 发行的签名证书,tsakey.pem 是 TSA 的私钥。

要为请求创建时间戳响应

openssl ts -reply -queryfile design1.tsq -inkey tsakey.pem \
      -signer tsacert.pem -out design1.tsr

如果要使用配置文件中的设置,则只需编写

openssl ts -reply -queryfile design1.tsq -out design1.tsr

要以人类可读的格式将时间戳回复打印到标准输出

openssl ts -reply -in design1.tsr -text

要创建时间戳令牌而不是时间戳响应

openssl ts -reply -queryfile design1.tsq -out design1_token.der -token_out

要以人类可读的格式将时间戳令牌打印到标准输出

openssl ts -reply -in design1_token.der -token_in -text -token_out

要从响应中提取时间戳令牌

openssl ts -reply -in design1.tsr -out design1_token.der -token_out

向时间戳令牌添加“已授予”状态信息,从而创建有效的响应

openssl ts -reply -in design1_token.der -token_in -out design1.tsr

时间戳验证

要根据请求验证时间戳回复

openssl ts -verify -queryfile design1.tsq -in design1.tsr \
      -CAfile cacert.pem -untrusted tsacert.pem

要验证包含证书链的时间戳回复

openssl ts -verify -queryfile design2.tsq -in design2.tsr \
      -CAfile cacert.pem

要根据原始数据文件验证时间戳令牌:openssl ts -verify -data design2.txt -in design2.tsr \ -CAfile cacert.pem

要根据消息指纹验证时间戳令牌:openssl ts -verify -digest b7e5d3f93198b38379852f2c04e78d73abdd0f4b \ -in design2.tsr -CAfile cacert.pem

您还可以查看“test”目录以获取更多示例。

错误

  • 不支持通过 SMTP 进行时间戳,尽管使用 procmail(1)perl(1) 实现基于电子邮件的自动 TSA 非常容易。以单独的 apache 模块的形式提供 HTTP 服务器支持。HTTP 客户端支持由 tsget(1) 提供。不支持纯 TCP/IP 协议。

  • 包含 TSA 的最后一个序列号的文件在读取或写入时不会被锁定。如果多个 openssl(1) 实例尝试同时创建时间戳响应,则会出现此问题。当使用 apache 服务器模块时,这不是问题,它会进行正确的锁定。

  • 在源文件中查找 FIXME 字样。

  • 源代码也确实应该由其他人审查。

  • 需要进行更多测试,我仅进行了一些基本测试(请参阅 test/testtsa)。

历史

OpenSSL 1.1.1 引入了新的随机数生成器 (CSPRNG),并改进了种子机制。新的种子机制使得无需定义 RANDFILE 来保存和恢复随机性。保留此选项主要是为了兼容性考虑。

-engine 选项在 OpenSSL 3.0 中已弃用。

另请参阅

openssl(1)tsget(1)openssl-req(1)openssl-x509(1)openssl-ca(1)openssl-genrsa(1)config(5)ossl_store-file(7)

版权所有 2006-2024 OpenSSL 项目作者。保留所有权利。

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