| Index: openssl/doc/apps/ts.pod | 
| =================================================================== | 
| --- openssl/doc/apps/ts.pod	(revision 0) | 
| +++ openssl/doc/apps/ts.pod	(revision 0) | 
| @@ -0,0 +1,594 @@ | 
| +=pod | 
| + | 
| +=head1 NAME | 
| + | 
| +ts - Time Stamping Authority tool (client/server) | 
| + | 
| +=head1 SYNOPSIS | 
| + | 
| +B<openssl> B<ts> | 
| +B<-query> | 
| +[B<-rand> file:file...] | 
| +[B<-config> configfile] | 
| +[B<-data> file_to_hash] | 
| +[B<-digest> digest_bytes] | 
| +[B<-md2>|B<-md4>|B<-md5>|B<-sha>|B<-sha1>|B<-mdc2>|B<-ripemd160>|B<...>] | 
| +[B<-policy> object_id] | 
| +[B<-no_nonce>] | 
| +[B<-cert>] | 
| +[B<-in> request.tsq] | 
| +[B<-out> request.tsq] | 
| +[B<-text>] | 
| + | 
| +B<openssl> B<ts> | 
| +B<-reply> | 
| +[B<-config> configfile] | 
| +[B<-section> tsa_section] | 
| +[B<-queryfile> request.tsq] | 
| +[B<-passin> password_src] | 
| +[B<-signer> tsa_cert.pem] | 
| +[B<-inkey> private.pem] | 
| +[B<-chain> certs_file.pem] | 
| +[B<-policy> object_id] | 
| +[B<-in> response.tsr] | 
| +[B<-token_in>] | 
| +[B<-out> response.tsr] | 
| +[B<-token_out>] | 
| +[B<-text>] | 
| +[B<-engine> id] | 
| + | 
| +B<openssl> B<ts> | 
| +B<-verify> | 
| +[B<-data> file_to_hash] | 
| +[B<-digest> digest_bytes] | 
| +[B<-queryfile> request.tsq] | 
| +[B<-in> response.tsr] | 
| +[B<-token_in>] | 
| +[B<-CApath> trusted_cert_path] | 
| +[B<-CAfile> trusted_certs.pem] | 
| +[B<-untrusted> cert_file.pem] | 
| + | 
| +=head1 DESCRIPTION | 
| + | 
| +The B<ts> command is a basic Time Stamping Authority (TSA) client and server | 
| +application as specified in RFC 3161 (Time-Stamp Protocol, TSP). A | 
| +TSA can be part of a PKI deployment and its role is to provide long | 
| +term proof of the existence of a certain datum before a particular | 
| +time. Here is a brief description of the protocol: | 
| + | 
| +=over 4 | 
| + | 
| +=item 1. | 
| + | 
| +The TSA client computes a one-way hash value for a data file and sends | 
| +the hash to the TSA. | 
| + | 
| +=item 2. | 
| + | 
| +The TSA attaches the current date and time to the received hash value, | 
| +signs them and sends the time stamp token back to the client. By | 
| +creating this token the TSA certifies the existence of the original | 
| +data file at the time of response generation. | 
| + | 
| +=item 3. | 
| + | 
| +The TSA client receives the time stamp token and verifies the | 
| +signature on it. It also checks if the token contains the same hash | 
| +value that it had sent to the TSA. | 
| + | 
| +=back | 
| + | 
| +There is one DER encoded protocol data unit defined for transporting a time | 
| +stamp request to the TSA and one for sending the time stamp response | 
| +back to the client. The B<ts> command has three main functions: | 
| +creating a time stamp request based on a data file, | 
| +creating a time stamp response based on a request, verifying if a | 
| +response corresponds to a particular request or a data file. | 
| + | 
| +There is no support for sending the requests/responses automatically | 
| +over HTTP or TCP yet as suggested in RFC 3161. The users must send the | 
| +requests either by ftp or e-mail. | 
| + | 
| +=head1 OPTIONS | 
| + | 
| +=head2 Time Stamp Request generation | 
| + | 
| +The B<-query> switch can be used for creating and printing a time stamp | 
| +request with the following options: | 
| + | 
| +=over 4 | 
| + | 
| +=item B<-rand> file:file... | 
| + | 
| +The files containing random data for seeding the random number | 
| +generator. Multiple files can be specified, the separator is B<;> for | 
| +MS-Windows, B<,> for VMS and B<:> for all other platforms. (Optional) | 
| + | 
| +=item B<-config> configfile | 
| + | 
| +The configuration file to use, this option overrides the | 
| +B<OPENSSL_CONF> environment variable. Only the OID section | 
| +of the config file is used with the B<-query> command. (Optional) | 
| + | 
| +=item B<-data> file_to_hash | 
| + | 
| +The data file for which the time stamp request needs to be | 
| +created. stdin is the default if neither the B<-data> nor the B<-digest> | 
| +parameter is specified. (Optional) | 
| + | 
| +=item B<-digest> digest_bytes | 
| + | 
| +It is possible to specify the message imprint explicitly without the data | 
| +file. The imprint must be specified in a hexadecimal format, two characters | 
| +per byte, the bytes optionally separated by colons (e.g. 1A:F6:01:... or | 
| +1AF601...). The number of bytes must match the message digest algorithm | 
| +in use. (Optional) | 
| + | 
| +=item B<-md2>|B<-md4>|B<-md5>|B<-sha>|B<-sha1>|B<-mdc2>|B<-ripemd160>|B<...> | 
| + | 
| +The message digest to apply to the data file, it supports all the message | 
| +digest algorithms that are supported by the openssl B<dgst> command. | 
| +The default is SHA-1. (Optional) | 
| + | 
| +=item B<-policy> object_id | 
| + | 
| +The policy that the client expects the TSA to use for creating the | 
| +time stamp token. Either the dotted OID notation or OID names defined | 
| +in the config file can be used. If no policy is requested the TSA will | 
| +use its own default policy. (Optional) | 
| + | 
| +=item B<-no_nonce> | 
| + | 
| +No nonce is specified in the request if this option is | 
| +given. Otherwise a 64 bit long pseudo-random none is | 
| +included in the request. It is recommended to use nonce to | 
| +protect against replay-attacks. (Optional) | 
| + | 
| +=item B<-cert> | 
| + | 
| +The TSA is expected to include its signing certificate in the | 
| +response. (Optional) | 
| + | 
| +=item B<-in> request.tsq | 
| + | 
| +This option specifies a previously created time stamp request in DER | 
| +format that will be printed into the output file. Useful when you need | 
| +to examine the content of a request in human-readable | 
| + | 
| +format. (Optional) | 
| + | 
| +=item B<-out> request.tsq | 
| + | 
| +Name of the output file to which the request will be written. Default | 
| +is stdout. (Optional) | 
| + | 
| +=item B<-text> | 
| + | 
| +If this option is specified the output is human-readable text format | 
| +instead of DER. (Optional) | 
| + | 
| +=back | 
| + | 
| +=head2 Time Stamp Response generation | 
| + | 
| +A time stamp response (TimeStampResp) consists of a response status | 
| +and the time stamp token itself (ContentInfo), if the token generation was | 
| +successful. The B<-reply> command is for creating a time stamp | 
| +response or time stamp token based on a request and printing the | 
| +response/token in human-readable format. If B<-token_out> is not | 
| +specified the output is always a time stamp response (TimeStampResp), | 
| +otherwise it is a time stamp token (ContentInfo). | 
| + | 
| +=over 4 | 
| + | 
| +=item B<-config> configfile | 
| + | 
| +The configuration file to use, this option overrides the | 
| +B<OPENSSL_CONF> environment variable. See B<CONFIGURATION FILE | 
| +OPTIONS> for configurable variables. (Optional) | 
| + | 
| +=item B<-section> tsa_section | 
| + | 
| +The name of the config file section conatining the settings for the | 
| +response generation. If not specified the default TSA section is | 
| +used, see B<CONFIGURATION FILE OPTIONS> for details. (Optional) | 
| + | 
| +=item B<-queryfile> request.tsq | 
| + | 
| +The name of the file containing a DER encoded time stamp request. (Optional) | 
| + | 
| +=item B<-passin> password_src | 
| + | 
| +Specifies the password source for the private key of the TSA. See | 
| +B<PASS PHRASE ARGUMENTS> in L<openssl(1)|openssl(1)>. (Optional) | 
| + | 
| +=item B<-signer> tsa_cert.pem | 
| + | 
| +The signer certificate of the TSA in PEM format. The TSA signing | 
| +certificate must have exactly one extended key usage assigned to it: | 
| +timeStamping. The extended key usage must also be critical, otherwise | 
| +the certificate is going to be refused. Overrides the B<signer_cert> | 
| +variable of the config file. (Optional) | 
| + | 
| +=item B<-inkey> private.pem | 
| + | 
| +The signer private key of the TSA in PEM format. Overrides the | 
| +B<signer_key> config file option. (Optional) | 
| + | 
| +=item B<-chain> certs_file.pem | 
| + | 
| +The collection of certificates in PEM format that will all | 
| +be included in the response in addition to the signer certificate if | 
| +the B<-cert> option was used for the request. This file is supposed to | 
| +contain the certificate chain for the signer certificate from its | 
| +issuer upwards. The B<-reply> command does not build a certificate | 
| +chain automatically. (Optional) | 
| + | 
| +=item B<-policy> object_id | 
| + | 
| +The default policy to use for the response unless the client | 
| +explicitly requires a particular TSA policy. The OID can be specified | 
| +either in dotted notation or with its name. Overrides the | 
| +B<default_policy> config file option. (Optional) | 
| + | 
| +=item B<-in> response.tsr | 
| + | 
| +Specifies a previously created time stamp response or time stamp token | 
| +(if B<-token_in> is also specified) in DER format that will be written | 
| +to the output file. This option does not require a request, it is | 
| +useful e.g. when you need to examine the content of a response or | 
| +token or you want to extract the time stamp token from a response. If | 
| +the input is a token and the output is a time stamp response a default | 
| +'granted' status info is added to the token. (Optional) | 
| + | 
| +=item B<-token_in> | 
| + | 
| +This flag can be used together with the B<-in> option and indicates | 
| +that the input is a DER encoded time stamp token (ContentInfo) instead | 
| +of a time stamp response (TimeStampResp). (Optional) | 
| + | 
| +=item B<-out> response.tsr | 
| + | 
| +The response is written to this file. The format and content of the | 
| +file depends on other options (see B<-text>, B<-token_out>). The default is | 
| +stdout. (Optional) | 
| + | 
| +=item B<-token_out> | 
| + | 
| +The output is a time stamp token (ContentInfo) instead of time stamp | 
| +response (TimeStampResp). (Optional) | 
| + | 
| +=item B<-text> | 
| + | 
| +If this option is specified the output is human-readable text format | 
| +instead of DER. (Optional) | 
| + | 
| +=item B<-engine> id | 
| + | 
| +Specifying an engine (by its unique B<id> string) will cause B<ts> | 
| +to attempt to obtain a functional reference to the specified engine, | 
| +thus initialising it if needed. The engine will then be set as the default | 
| +for all available algorithms. Default is builtin. (Optional) | 
| + | 
| +=back | 
| + | 
| +=head2 Time Stamp Response verification | 
| + | 
| +The B<-verify> command is for verifying if a time stamp response or time | 
| +stamp token is valid and matches a particular time stamp request or | 
| +data file. The B<-verify> command does not use the configuration file. | 
| + | 
| +=over 4 | 
| + | 
| +=item B<-data> file_to_hash | 
| + | 
| +The response or token must be verified against file_to_hash. The file | 
| +is hashed with the message digest algorithm specified in the token. | 
| +The B<-digest> and B<-queryfile> options must not be specified with this one. | 
| +(Optional) | 
| + | 
| +=item B<-digest> digest_bytes | 
| + | 
| +The response or token must be verified against the message digest specified | 
| +with this option. The number of bytes must match the message digest algorithm | 
| +specified in the token. The B<-data> and B<-queryfile> options must not be | 
| +specified with this one. (Optional) | 
| + | 
| +=item B<-queryfile> request.tsq | 
| + | 
| +The original time stamp request in DER format. The B<-data> and B<-digest> | 
| +options must not be specified with this one. (Optional) | 
| + | 
| +=item B<-in> response.tsr | 
| + | 
| +The time stamp response that needs to be verified in DER format. (Mandatory) | 
| + | 
| +=item B<-token_in> | 
| + | 
| +This flag can be used together with the B<-in> option and indicates | 
| +that the input is a DER encoded time stamp token (ContentInfo) instead | 
| +of a time stamp response (TimeStampResp). (Optional) | 
| + | 
| +=item B<-CApath> trusted_cert_path | 
| + | 
| +The name of the directory containing the trused CA certificates of the | 
| +client. See the similar option of L<verify(1)|verify(1)> for additional | 
| +details. Either this option or B<-CAfile> must be specified. (Optional) | 
| + | 
| + | 
| +=item B<-CAfile> trusted_certs.pem | 
| + | 
| +The name of the file containing a set of trusted self-signed CA | 
| +certificates in PEM format. See the similar option of | 
| +L<verify(1)|verify(1)> for additional details. Either this option | 
| +or B<-CApath> must be specified. | 
| +(Optional) | 
| + | 
| +=item B<-untrusted> cert_file.pem | 
| + | 
| +Set of additional untrusted certificates in PEM format which may be | 
| +needed when building the certificate chain for the TSA's signing | 
| +certificate. This file must contain the TSA signing certificate and | 
| +all intermediate CA certificates unless the response includes them. | 
| +(Optional) | 
| + | 
| +=back | 
| + | 
| +=head1 CONFIGURATION FILE OPTIONS | 
| + | 
| +The B<-query> and B<-reply> commands make use of a configuration file | 
| +defined by the B<OPENSSL_CONF> environment variable. See L<config(5)|config(5)> | 
| +for a general description of the syntax of the config file. The | 
| +B<-query> command uses only the symbolic OID names section | 
| +and it can work without it. However, the B<-reply> command needs the | 
| +config file for its operation. | 
| + | 
| +When there is a command line switch equivalent of a variable the | 
| +switch always overrides the settings in the config file. | 
| + | 
| +=over 4 | 
| + | 
| +=item B<tsa> section, B<default_tsa> | 
| + | 
| +This is the main section and it specifies the name of another section | 
| +that contains all the options for the B<-reply> command. This default | 
| +section can be overriden with the B<-section> command line switch. (Optional) | 
| + | 
| +=item B<oid_file> | 
| + | 
| +See L<ca(1)|ca(1)> for description. (Optional) | 
| + | 
| +=item B<oid_section> | 
| + | 
| +See L<ca(1)|ca(1)> for description. (Optional) | 
| + | 
| +=item B<RANDFILE> | 
| + | 
| +See L<ca(1)|ca(1)> for description. (Optional) | 
| + | 
| +=item B<serial> | 
| + | 
| +The name of the file containing the hexadecimal serial number of the | 
| +last time stamp response created. This number is incremented by 1 for | 
| +each response. If the file does not exist at the time of response | 
| +generation a new file is created with serial number 1. (Mandatory) | 
| + | 
| +=item B<crypto_device> | 
| + | 
| +Specifies the OpenSSL engine that will be set as the default for | 
| +all available algorithms. The default value is builtin, you can specify | 
| +any other engines supported by OpenSSL (e.g. use chil for the NCipher HSM). | 
| +(Optional) | 
| + | 
| +=item B<signer_cert> | 
| + | 
| +TSA signing certificate in PEM format. The same as the B<-signer> | 
| +command line option. (Optional) | 
| + | 
| +=item B<certs> | 
| + | 
| +A file containing a set of PEM encoded certificates that need to be | 
| +included in the response. The same as the B<-chain> command line | 
| +option. (Optional) | 
| + | 
| +=item B<signer_key> | 
| + | 
| +The private key of the TSA in PEM format. The same as the B<-inkey> | 
| +command line option. (Optional) | 
| + | 
| +=item B<default_policy> | 
| + | 
| +The default policy to use when the request does not mandate any | 
| +policy. The same as the B<-policy> command line option. (Optional) | 
| + | 
| +=item B<other_policies> | 
| + | 
| +Comma separated list of policies that are also acceptable by the TSA | 
| +and used only if the request explicitly specifies one of them. (Optional) | 
| + | 
| +=item B<digests> | 
| + | 
| +The list of message digest algorithms that the TSA accepts. At least | 
| +one algorithm must be specified. (Mandatory) | 
| + | 
| +=item B<accuracy> | 
| + | 
| +The accuracy of the time source of the TSA in seconds, milliseconds | 
| +and microseconds. E.g. secs:1, millisecs:500, microsecs:100. If any of | 
| +the components is missing zero is assumed for that field. (Optional) | 
| + | 
| +=item B<clock_precision_digits> | 
| + | 
| +Specifies the maximum number of digits, which represent the fraction of | 
| +seconds, that  need to be included in the time field. The trailing zeroes | 
| +must be removed from the time, so there might actually be fewer digits, | 
| +or no fraction of seconds at all. Supported only on UNIX platforms. | 
| +The maximum value is 6, default is 0. | 
| +(Optional) | 
| + | 
| +=item B<ordering> | 
| + | 
| +If this option is yes the responses generated by this TSA can always | 
| +be ordered, even if the time difference between two responses is less | 
| +than the sum of their accuracies. Default is no. (Optional) | 
| + | 
| +=item B<tsa_name> | 
| + | 
| +Set this option to yes if the subject name of the TSA must be included in | 
| +the TSA name field of the response. Default is no. (Optional) | 
| + | 
| +=item B<ess_cert_id_chain> | 
| + | 
| +The SignedData objects created by the TSA always contain the | 
| +certificate identifier of the signing certificate in a signed | 
| +attribute (see RFC 2634, Enhanced Security Services). If this option | 
| +is set to yes and either the B<certs> variable or the B<-chain> option | 
| +is specified then the certificate identifiers of the chain will also | 
| +be included in the SigningCertificate signed attribute. If this | 
| +variable is set to no, only the signing certificate identifier is | 
| +included. Default is no. (Optional) | 
| + | 
| +=back | 
| + | 
| +=head1 ENVIRONMENT VARIABLES | 
| + | 
| +B<OPENSSL_CONF> contains the path of the configuration file and can be | 
| +overriden by the B<-config> command line option. | 
| + | 
| +=head1 EXAMPLES | 
| + | 
| +All the examples below presume that B<OPENSSL_CONF> is set to a proper | 
| +configuration file, e.g. the example configuration file | 
| +openssl/apps/openssl.cnf will do. | 
| + | 
| +=head2 Time Stamp Request | 
| + | 
| +To create a time stamp request for design1.txt with SHA-1 | 
| +without nonce and policy and no certificate is required in the response: | 
| + | 
| +  openssl ts -query -data design1.txt -no_nonce \ | 
| +	-out design1.tsq | 
| + | 
| +To create a similar time stamp request with specifying the message imprint | 
| +explicitly: | 
| + | 
| +  openssl ts -query -digest b7e5d3f93198b38379852f2c04e78d73abdd0f4b \ | 
| +	 -no_nonce -out design1.tsq | 
| + | 
| +To print the content of the previous request in human readable format: | 
| + | 
| +  openssl ts -query -in design1.tsq -text | 
| + | 
| +To create a time stamp request which includes the MD-5 digest | 
| +of design2.txt, requests the signer certificate and nonce, | 
| +specifies a policy id (assuming the tsa_policy1 name is defined in the | 
| +OID section of the config file): | 
| + | 
| +  openssl ts -query -data design2.txt -md5 \ | 
| +	-policy tsa_policy1 -cert -out design2.tsq | 
| + | 
| +=head2 Time Stamp Response | 
| + | 
| +Before generating a response a signing certificate must be created for | 
| +the TSA that contains the B<timeStamping> critical extended key usage extension | 
| +without any other key usage extensions. You can add the | 
| +'extendedKeyUsage = critical,timeStamping' line to the user certificate section | 
| +of the config file to generate a proper certificate. See L<req(1)|req(1)>, | 
| +L<ca(1)|ca(1)>, L<x509(1)|x509(1)> for instructions. The examples | 
| +below assume that cacert.pem contains the certificate of the CA, | 
| +tsacert.pem is the signing certificate issued by cacert.pem and | 
| +tsakey.pem is the private key of the TSA. | 
| + | 
| +To create a time stamp response for a request: | 
| + | 
| +  openssl ts -reply -queryfile design1.tsq -inkey tsakey.pem \ | 
| +	-signer tsacert.pem -out design1.tsr | 
| + | 
| +If you want to use the settings in the config file you could just write: | 
| + | 
| +  openssl ts -reply -queryfile design1.tsq -out design1.tsr | 
| + | 
| +To print a time stamp reply to stdout in human readable format: | 
| + | 
| +  openssl ts -reply -in design1.tsr -text | 
| + | 
| +To create a time stamp token instead of time stamp response: | 
| + | 
| +  openssl ts -reply -queryfile design1.tsq -out design1_token.der -token_out | 
| + | 
| +To print a time stamp token to stdout in human readable format: | 
| + | 
| +  openssl ts -reply -in design1_token.der -token_in -text -token_out | 
| + | 
| +To extract the time stamp token from a response: | 
| + | 
| +  openssl ts -reply -in design1.tsr -out design1_token.der -token_out | 
| + | 
| +To add 'granted' status info to a time stamp token thereby creating a | 
| +valid response: | 
| + | 
| +  openssl ts -reply -in design1_token.der -token_in -out design1.tsr | 
| + | 
| +=head2 Time Stamp Verification | 
| + | 
| +To verify a time stamp reply against a request: | 
| + | 
| +  openssl ts -verify -queryfile design1.tsq -in design1.tsr \ | 
| +	-CAfile cacert.pem -untrusted tsacert.pem | 
| + | 
| +To verify a time stamp reply that includes the certificate chain: | 
| + | 
| +  openssl ts -verify -queryfile design2.tsq -in design2.tsr \ | 
| +	-CAfile cacert.pem | 
| + | 
| +To verify a time stamp token against the original data file: | 
| +  openssl ts -verify -data design2.txt -in design2.tsr \ | 
| +	-CAfile cacert.pem | 
| + | 
| +To verify a time stamp token against a message imprint: | 
| +  openssl ts -verify -digest b7e5d3f93198b38379852f2c04e78d73abdd0f4b \ | 
| +	 -in design2.tsr -CAfile cacert.pem | 
| + | 
| +You could also look at the 'test' directory for more examples. | 
| + | 
| +=head1 BUGS | 
| + | 
| +If you find any bugs or you have suggestions please write to | 
| +Zoltan Glozik <zglozik@opentsa.org>. Known issues: | 
| + | 
| +=over 4 | 
| + | 
| +=item * No support for time stamps over SMTP, though it is quite easy | 
| +to implement an automatic e-mail based TSA with L<procmail(1)|procmail(1)> | 
| +and L<perl(1)|perl(1)>. HTTP server support is provided in the form of | 
| +a separate apache module. HTTP client support is provided by | 
| +L<tsget(1)|tsget(1)>. Pure TCP/IP protocol is not supported. | 
| + | 
| +=item * The file containing the last serial number of the TSA is not | 
| +locked when being read or written. This is a problem if more than one | 
| +instance of L<openssl(1)|openssl(1)> is trying to create a time stamp | 
| +response at the same time. This is not an issue when using the apache | 
| +server module, it does proper locking. | 
| + | 
| +=item * Look for the FIXME word in the source files. | 
| + | 
| +=item * The source code should really be reviewed by somebody else, too. | 
| + | 
| +=item * More testing is needed, I have done only some basic tests (see | 
| +test/testtsa). | 
| + | 
| +=back | 
| + | 
| +=cut | 
| + | 
| +=head1 AUTHOR | 
| + | 
| +Zoltan Glozik <zglozik@opentsa.org>, OpenTSA project (http://www.opentsa.org) | 
| + | 
| +=head1 SEE ALSO | 
| + | 
| +L<tsget(1)|tsget(1)>, L<openssl(1)|openssl(1)>, L<req(1)|req(1)>, | 
| +L<x509(1)|x509(1)>, L<ca(1)|ca(1)>, L<genrsa(1)|genrsa(1)>, | 
| +L<config(5)|config(5)> | 
| + | 
| +=cut | 
|  |