用途:
时间戳处理工具(客户端/服务器模式)。该命令是一个基本的时间戳权威认证机构(TSA)的客户端和服务器端应用程序(遵循RFC3161协议)。TSA是一个PKI调度工具中的一部分,它的角色是提供一个证明:证明某个数据在一段时间内存在。下面是协议的摘要:
1、 TSA客户端对一个数据文件计算一个哈希值,并将它发送到TSA。
2、 TSA将当前时间依附到所接收到的hash值的后面,并签名,发送时间戳标记到客户端。在创建这个标记是根据原始数据来产生的。
3、 TSA客户端接收到时间戳标记并验证签名。如果检测到标记包含相同的哈希值再次发送到TSA。
一个DER编码格式的协议数据单元传输到TSA,然后TSA发送时间戳响应到客户端。ts命令有三个功能:根据数据内容创建一个时间戳请求文件、根据请求文件创建一个时间戳响应以及验证时间戳响应文件。
在RFC3161中,它不支持用HTTP或TCP自动发送请求文件以及响应文件。用户用邮件或者ftp服务器来发送它们。
用法:
openssl ts [-query] [-rand files] [-config configfile] [-data file_to_hash] [-digest digest_bytes] [-md2/-md4/-md5/-sha/-sha1/-mdc2/-ripemd160] [-policy object_id] [-no_nonce] [-cert] [-in request.tsq] [-out request.tsq] [-text] openssl ts [-reply] [-config configure] [-section tsa_section] [-queryfile request.req] [-passin password_src] [-signer tsa_cert.pem] [-inkey private.pem] [-chain certs_file.pem] [-policy object_id] [-in response.tsr] [-token_in] [-out response.tsr] [-token_out] [-text] [-engine id] openssl ts [-verify] [-data file_to_hash] [-digest digest_bytes] [-queryfile request.tsq] [-in response.tsr] [-token_in][-CApath trusted_cert_path] [-CAfile trusted_certs.pem] [-untrusted cert_file.pem]
选项说明:
时间戳请求产生的命令:
-query:根据下面的选项来创建和打印一个时间戳请求文件。
-rand files:随机数种子文件。可以包含多个文件。
-config configfile:要用的配置文件,这个选项可以不顾OPENSSL_CONF的环境变量。仅仅只有OID字节使用。
-data file_to_hash:创建时间戳请求的数据文件。如果-data命令和-digest命令没有指定,则是标准输入。
-digest digest_bytes:有可能的话明确的指定消息的印记。印记必须是十六进制格式的数据,两字符组成一字节,字节数可以用:号分开(例如e.g. 1A:F6:01:... 或者1AF601...)。字节数必须匹配用的摘要算法的长度值。
-md2/-md4/-md5/-sha/-sha1/-mdc2/-ripemd160:计算摘要值的摘要算法。默认的是SHA1。
-policy object_id:客户端希望TSA创建时间戳标记用的id值。如果没有指定,则使用默认的id值。
-no_nonce:如果该选项被设置,则没有指定临时的值。否则一个临时的64字节的随机数将会包含到请求文件中。推荐时用临时的值以防止重放攻击。
-cert:TSA期望包含签名证书到响应中。
-in request.tsq:该选项预先指定了一个输出目录,以打印DER格式的时间戳请求。如果以可读的格式来检查请求文件的上下文将会非常有用。
-out request.tsq:请求文件的输出文件。默认是标准输出。
-text:指定输出的格式是human-readable格式来代替DER格式。
一个时间戳的响应(TimeStampResp)如果包含了一个响应状态值和自身的时间戳标记(ContentInfo)。
产生时间戳响应的命令如下:
-reply:该命令根据请求文件创建一个时间戳响应或时间戳标记,并用human-readable的格式打印出时间戳响应或标记。如果token_out没有指定,则输出是一个时间戳响应(TimeStampResp)否则就是时间戳标记(ContentInfo)。
-config configure:要用的配置文件,这个选项可以不顾OPENSSL_CONF的环境变量。仅仅只有OID字节使用。
-section tsa_section:配置文件的字段名字,包含了响应产生器。如果没有指定,则使用默认的TSA字段。
-queryfile request.req:DER格式的时间戳请求文件。
-passin password_src:TSA私钥的保护口令。
-signer tsa_cert.pem:PEM格式的TSA的签名证书。TSA的签名证书必须有正确的扩展密钥用法:时间戳。扩展的密钥用法必须是临界的,否则要遭到拒绝。
-inkey private.pem:PEM格式的TSA的签名证书私钥。
-chain certs_file.pem:PEM格式的证书链,它包含附加的响应的签名者的证书。
-policy object_id:默认的policy用于响应文件,除非客户端明确的要求需要详细的TSA policy。
-in response.tsr:预先指定的DER格式的时间戳响应或时间戳标记(-token_in指定)的保存目录。这个选项不需要一个请求文件,如果以可读的格式来检查DER格式的时间戳响应或时间戳标记将会非常有用。如果输入的是一个标记,输出是一个时间戳响应,则一个默认的‘granted’状态值将添加到标记中。
-token_in:这个标记表示可以和-in一起使用,来表示输入的是一个时间戳标记,而默认的是一个时间戳响应。
-out response.tsr:响应的保存位置。格式和上下文要依据其它选项(-text、-token_out)。默认的是标准输出。
-token_out:输出是一个时间戳标记,默认输出则是时间戳响应。
-text:如果指定输出的格式是human-readable格式来代替DER格式。
-engine id:硬件引擎。
验证时间戳响应文件的命令如下:
-verify:该命令验证一个时间戳响应或时间戳标记的有效性,并和时间戳请求文件向匹配。该命令不使用配置文件。
-data file_to_hash:请求或标记必须验证,不管file_to_hash。该文件是消息摘要算法对标记的摘要值。它不能和-digest、-queryfile两个命令一起使用。
-digest digest_bytes:请求或标记必须验证,不管digest_bytes指定的消息摘要值。字节数必须匹配标记中的消息摘要算法的长度值。它不能和-data、-queryfile两个命令一起使用。
-queryfile request.tsq:DER格式的时间戳请求文件。它不能和-digest、-data两个命令一起使用。
-in response.tsr:需要验证的DER格式的时间戳响应文件。
-token_in:这个标记表示可以和-in一起使用,来表示输入的是一个DER格式的时间戳标记,而默认的是一个时间戳响应。
-CApath trusted_cert_path:包含客户端可信任证书的路径。这个选项和-Cafile必须被指定。
-CAfile trusted_certs.pem:PEM格式的包含可信任的自签名的CA证书。这个选项和- CApath必须被指定。
-untrusted cert_file.pem:PEM格式的不信任的证书集合。它有可能被用于被创建TSA签名者的证书。这个文件必须包含TSA签名证书和所有的中间CA证书。
配置文件选项:
query和reply命令需要一个配置文件,该配置文件定义在OPENSSL_CONF环境变量中。query命令j仅仅使用了OID名字段。reply命令需要配置文件做很多操作。配置文件的语法描述如下:
B<tsa> section, B<default_tsa>:它是一个主section,指定了其他字段的名字,包含了reply命令的所有操作。
B<oid_file>:看L<ca(1)|ca(1)>的描述。
B<oid_section>:看L<ca(1)|ca(1)>的描述。
B<RANDFILE>:看L<ca(1)|ca(1)>的描述。
B<serial>:包含了最后时间戳响应的16进制的序列号。这个值是从1按顺序递增的。如果这个文件不存在,则时间戳响应则会创建一个新文件,使序列号的值为1。
B<signer_cert>:PEM格式的TSA签名证书。和-signer命令的意思一样。
B<certs>:包含了一系列的PEM格式的证书,它们要包含到响应文件中。和-chain命令的意思一样。
B<signer_key>:PEM格式的TSA私钥文件。和-inkey命令的意思一样。
B<default_policy>:当请求文件没有授权任何policy的时候,则使用它。和-policy命令的意思一样。
B<other_policies>:policy的列表,用逗号分开。当请求文件明确的指定其中的一个时,才能够使用。
B<digests>:TSA能够接受的消息摘要算法集合。至少指定一种。
B<accuracy>:TSA时间源的精确度:秒、毫秒、微妙。例如:secs:1, millisecs:500, microsecs:100。任何组件假定这个选项为0。
B<clock_precision_digits>:指定以秒为单位的最大值。这个选项包含时间域。后面的零必须从这个时间移除,它有可能比数字稍微小一点,或者一直都没有。仅仅在UNIX平台下支持。最大值是6,默认为0。
B<ordering>:如果这个选项设置为yes,则由TSA产生的内容有序。
B<tsa_name>:如果这个选项设置为yes,TSA的颁发者的名字必须包含到响应的name域中。默认为no。
B<ess_cert_id_chain>:由TSA创建的签名数据对象包含签名证书的标记。如果这个选项被设置为yes,B<certs> 变量或 B<-chain> 选项将被指定,证书链中的标记值将会包含到SigningCertificate的签名属性中。如果这个选项设置为no,仅仅包含签名证书标记。默认为no。
环境变量:
所有的实例都基于OPENSSL_CONF环境变量中设置了相对应的值。它可以被B<-config>命令行所推翻。
实例之时间戳请求:
用SHA1摘要算法来创建一个时间戳请求,不包含临时的值和policy,响应文件中不需要证书:
openssl ts -query -data design1.txt -no_nonce -out design1.tsq
根据消息印记来创建一个相似的时间戳请求值:
openssl ts -query -digest b7e5d3f93198b38379852f2c04e78d73abdd0f4b \ -no_nonce -out design1.tsq
用human readable格式来打印请求文件的上下文数据:
openssl ts -query -in design1.tsq -text
用Md5摘要算法来创建一个时间戳请求,包含临时的值和policy,响应文件中需要证书:
openssl ts -query -data design2.txt -md5 -policy tsa_policy1 -cert -out design2.tsq
实例值时间戳响应:
在创建一个响应文件之前,需要一个签名证书,该证书必须包含扩展的密钥用法:时间戳。在创建证书的时候,你可以添加'extendedKeyUsage = critical,timeStamping'代码到证书中。
根据请求文件创建一个响应文件:
openssl ts -reply -queryfile design1.tsq -inkey tsakey.pem \ -signer tsacert.pem -out design1.tsr
如果想使用配置文件中的设置,则命令如下:
openssl ts -reply -queryfile design1.tsq -out design1.tsr
用human readable格式打印一个时间戳响应到标准输出中:
openssl ts -reply -in design1.tsr –text
创建一个时间戳标记:
openssl ts -reply -queryfile design1.tsq -out design1_token.der -token_out
用human readable格式打印一个时间戳标记到标准输出中:
openssl ts -reply -in design1_token.der -token_in -text -token_out
从时间戳响应中提取时间戳标记:
openssl ts -reply -in design1.tsr -out design1_token.der -token_out
在创建一个可用的响应时,添加一个'granted'到时间戳标记中:
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