lh | 9ed821d | 2023-04-07 01:36:19 -0700 | [diff] [blame^] | 1 | =pod |
| 2 | |
| 3 | =head1 NAME |
| 4 | |
| 5 | openssl-ts, |
| 6 | ts - Time Stamping Authority tool (client/server) |
| 7 | |
| 8 | =head1 SYNOPSIS |
| 9 | |
| 10 | B<openssl> B<ts> |
| 11 | B<-query> |
| 12 | [B<-rand file...>] |
| 13 | [B<-writerand file>] |
| 14 | [B<-config> configfile] |
| 15 | [B<-data> file_to_hash] |
| 16 | [B<-digest> digest_bytes] |
| 17 | [B<-I<digest>>] |
| 18 | [B<-tspolicy> object_id] |
| 19 | [B<-no_nonce>] |
| 20 | [B<-cert>] |
| 21 | [B<-in> request.tsq] |
| 22 | [B<-out> request.tsq] |
| 23 | [B<-text>] |
| 24 | |
| 25 | B<openssl> B<ts> |
| 26 | B<-reply> |
| 27 | [B<-config> configfile] |
| 28 | [B<-section> tsa_section] |
| 29 | [B<-queryfile> request.tsq] |
| 30 | [B<-passin> password_src] |
| 31 | [B<-signer> tsa_cert.pem] |
| 32 | [B<-inkey> file_or_id] |
| 33 | [B<-I<digest>>] |
| 34 | [B<-chain> certs_file.pem] |
| 35 | [B<-tspolicy> object_id] |
| 36 | [B<-in> response.tsr] |
| 37 | [B<-token_in>] |
| 38 | [B<-out> response.tsr] |
| 39 | [B<-token_out>] |
| 40 | [B<-text>] |
| 41 | [B<-engine> id] |
| 42 | |
| 43 | B<openssl> B<ts> |
| 44 | B<-verify> |
| 45 | [B<-data> file_to_hash] |
| 46 | [B<-digest> digest_bytes] |
| 47 | [B<-queryfile> request.tsq] |
| 48 | [B<-in> response.tsr] |
| 49 | [B<-token_in>] |
| 50 | [B<-CApath> trusted_cert_path] |
| 51 | [B<-CAfile> trusted_certs.pem] |
| 52 | [B<-untrusted> cert_file.pem] |
| 53 | [I<verify options>] |
| 54 | |
| 55 | I<verify options:> |
| 56 | [-attime timestamp] |
| 57 | [-check_ss_sig] |
| 58 | [-crl_check] |
| 59 | [-crl_check_all] |
| 60 | [-explicit_policy] |
| 61 | [-extended_crl] |
| 62 | [-ignore_critical] |
| 63 | [-inhibit_any] |
| 64 | [-inhibit_map] |
| 65 | [-issuer_checks] |
| 66 | [-no_alt_chains] |
| 67 | [-no_check_time] |
| 68 | [-partial_chain] |
| 69 | [-policy arg] |
| 70 | [-policy_check] |
| 71 | [-policy_print] |
| 72 | [-purpose purpose] |
| 73 | [-suiteB_128] |
| 74 | [-suiteB_128_only] |
| 75 | [-suiteB_192] |
| 76 | [-trusted_first] |
| 77 | [-use_deltas] |
| 78 | [-auth_level num] |
| 79 | [-verify_depth num] |
| 80 | [-verify_email email] |
| 81 | [-verify_hostname hostname] |
| 82 | [-verify_ip ip] |
| 83 | [-verify_name name] |
| 84 | [-x509_strict] |
| 85 | |
| 86 | =head1 DESCRIPTION |
| 87 | |
| 88 | The B<ts> command is a basic Time Stamping Authority (TSA) client and server |
| 89 | application as specified in RFC 3161 (Time-Stamp Protocol, TSP). A |
| 90 | TSA can be part of a PKI deployment and its role is to provide long |
| 91 | term proof of the existence of a certain datum before a particular |
| 92 | time. Here is a brief description of the protocol: |
| 93 | |
| 94 | =over 4 |
| 95 | |
| 96 | =item 1. |
| 97 | |
| 98 | The TSA client computes a one-way hash value for a data file and sends |
| 99 | the hash to the TSA. |
| 100 | |
| 101 | =item 2. |
| 102 | |
| 103 | The TSA attaches the current date and time to the received hash value, |
| 104 | signs them and sends the timestamp token back to the client. By |
| 105 | creating this token the TSA certifies the existence of the original |
| 106 | data file at the time of response generation. |
| 107 | |
| 108 | =item 3. |
| 109 | |
| 110 | The TSA client receives the timestamp token and verifies the |
| 111 | signature on it. It also checks if the token contains the same hash |
| 112 | value that it had sent to the TSA. |
| 113 | |
| 114 | =back |
| 115 | |
| 116 | There is one DER encoded protocol data unit defined for transporting |
| 117 | a timestamp request to the TSA and one for sending the timestamp response |
| 118 | back to the client. The B<ts> command has three main functions: |
| 119 | creating a timestamp request based on a data file, |
| 120 | creating a timestamp response based on a request, verifying if a |
| 121 | response corresponds to a particular request or a data file. |
| 122 | |
| 123 | There is no support for sending the requests/responses automatically |
| 124 | over HTTP or TCP yet as suggested in RFC 3161. The users must send the |
| 125 | requests either by ftp or e-mail. |
| 126 | |
| 127 | =head1 OPTIONS |
| 128 | |
| 129 | =head2 Time Stamp Request generation |
| 130 | |
| 131 | The B<-query> switch can be used for creating and printing a timestamp |
| 132 | request with the following options: |
| 133 | |
| 134 | =over 4 |
| 135 | |
| 136 | =item B<-rand file...> |
| 137 | |
| 138 | A file or files containing random data used to seed the random number |
| 139 | generator. |
| 140 | Multiple files can be specified separated by an OS-dependent character. |
| 141 | The separator is B<;> for MS-Windows, B<,> for OpenVMS, and B<:> for |
| 142 | all others. |
| 143 | |
| 144 | =item [B<-writerand file>] |
| 145 | |
| 146 | Writes random data to the specified I<file> upon exit. |
| 147 | This can be used with a subsequent B<-rand> flag. |
| 148 | |
| 149 | =item B<-config> configfile |
| 150 | |
| 151 | The configuration file to use. |
| 152 | Optional; for a description of the default value, |
| 153 | see L<openssl(1)/COMMAND SUMMARY>. |
| 154 | |
| 155 | =item B<-data> file_to_hash |
| 156 | |
| 157 | The data file for which the timestamp request needs to be |
| 158 | created. stdin is the default if neither the B<-data> nor the B<-digest> |
| 159 | parameter is specified. (Optional) |
| 160 | |
| 161 | =item B<-digest> digest_bytes |
| 162 | |
| 163 | It is possible to specify the message imprint explicitly without the data |
| 164 | file. The imprint must be specified in a hexadecimal format, two characters |
| 165 | per byte, the bytes optionally separated by colons (e.g. 1A:F6:01:... or |
| 166 | 1AF601...). The number of bytes must match the message digest algorithm |
| 167 | in use. (Optional) |
| 168 | |
| 169 | =item B<-I<digest>> |
| 170 | |
| 171 | The message digest to apply to the data file. |
| 172 | Any digest supported by the OpenSSL B<dgst> command can be used. |
| 173 | The default is SHA-1. (Optional) |
| 174 | |
| 175 | =item B<-tspolicy> object_id |
| 176 | |
| 177 | The policy that the client expects the TSA to use for creating the |
| 178 | timestamp token. Either the dotted OID notation or OID names defined |
| 179 | in the config file can be used. If no policy is requested the TSA will |
| 180 | use its own default policy. (Optional) |
| 181 | |
| 182 | =item B<-no_nonce> |
| 183 | |
| 184 | No nonce is specified in the request if this option is |
| 185 | given. Otherwise a 64 bit long pseudo-random none is |
| 186 | included in the request. It is recommended to use nonce to |
| 187 | protect against replay-attacks. (Optional) |
| 188 | |
| 189 | =item B<-cert> |
| 190 | |
| 191 | The TSA is expected to include its signing certificate in the |
| 192 | response. (Optional) |
| 193 | |
| 194 | =item B<-in> request.tsq |
| 195 | |
| 196 | This option specifies a previously created timestamp request in DER |
| 197 | format that will be printed into the output file. Useful when you need |
| 198 | to examine the content of a request in human-readable |
| 199 | format. (Optional) |
| 200 | |
| 201 | =item B<-out> request.tsq |
| 202 | |
| 203 | Name of the output file to which the request will be written. Default |
| 204 | is stdout. (Optional) |
| 205 | |
| 206 | =item B<-text> |
| 207 | |
| 208 | If this option is specified the output is human-readable text format |
| 209 | instead of DER. (Optional) |
| 210 | |
| 211 | =back |
| 212 | |
| 213 | =head2 Time Stamp Response generation |
| 214 | |
| 215 | A timestamp response (TimeStampResp) consists of a response status |
| 216 | and the timestamp token itself (ContentInfo), if the token generation was |
| 217 | successful. The B<-reply> command is for creating a timestamp |
| 218 | response or timestamp token based on a request and printing the |
| 219 | response/token in human-readable format. If B<-token_out> is not |
| 220 | specified the output is always a timestamp response (TimeStampResp), |
| 221 | otherwise it is a timestamp token (ContentInfo). |
| 222 | |
| 223 | =over 4 |
| 224 | |
| 225 | =item B<-config> configfile |
| 226 | |
| 227 | The configuration file to use. |
| 228 | Optional; for a description of the default value, |
| 229 | see L<openssl(1)/COMMAND SUMMARY>. |
| 230 | See B<CONFIGURATION FILE OPTIONS> for configurable variables. |
| 231 | |
| 232 | =item B<-section> tsa_section |
| 233 | |
| 234 | The name of the config file section containing the settings for the |
| 235 | response generation. If not specified the default TSA section is |
| 236 | used, see B<CONFIGURATION FILE OPTIONS> for details. (Optional) |
| 237 | |
| 238 | =item B<-queryfile> request.tsq |
| 239 | |
| 240 | The name of the file containing a DER encoded timestamp request. (Optional) |
| 241 | |
| 242 | =item B<-passin> password_src |
| 243 | |
| 244 | Specifies the password source for the private key of the TSA. See |
| 245 | L<openssl(1)/Pass Phrase Options>. (Optional) |
| 246 | |
| 247 | =item B<-signer> tsa_cert.pem |
| 248 | |
| 249 | The signer certificate of the TSA in PEM format. The TSA signing |
| 250 | certificate must have exactly one extended key usage assigned to it: |
| 251 | timeStamping. The extended key usage must also be critical, otherwise |
| 252 | the certificate is going to be refused. Overrides the B<signer_cert> |
| 253 | variable of the config file. (Optional) |
| 254 | |
| 255 | =item B<-inkey> file_or_id |
| 256 | |
| 257 | The signer private key of the TSA in PEM format. Overrides the |
| 258 | B<signer_key> config file option. (Optional) |
| 259 | If no engine is used, the argument is taken as a file; if an engine is |
| 260 | specified, the argument is given to the engine as a key identifier. |
| 261 | |
| 262 | =item B<-I<digest>> |
| 263 | |
| 264 | Signing digest to use. Overrides the B<signer_digest> config file |
| 265 | option. (Mandatory unless specified in the config file) |
| 266 | |
| 267 | =item B<-chain> certs_file.pem |
| 268 | |
| 269 | The collection of certificates in PEM format that will all |
| 270 | be included in the response in addition to the signer certificate if |
| 271 | the B<-cert> option was used for the request. This file is supposed to |
| 272 | contain the certificate chain for the signer certificate from its |
| 273 | issuer upwards. The B<-reply> command does not build a certificate |
| 274 | chain automatically. (Optional) |
| 275 | |
| 276 | =item B<-tspolicy> object_id |
| 277 | |
| 278 | The default policy to use for the response unless the client |
| 279 | explicitly requires a particular TSA policy. The OID can be specified |
| 280 | either in dotted notation or with its name. Overrides the |
| 281 | B<default_policy> config file option. (Optional) |
| 282 | |
| 283 | =item B<-in> response.tsr |
| 284 | |
| 285 | Specifies a previously created timestamp response or timestamp token |
| 286 | (if B<-token_in> is also specified) in DER format that will be written |
| 287 | to the output file. This option does not require a request, it is |
| 288 | useful e.g. when you need to examine the content of a response or |
| 289 | token or you want to extract the timestamp token from a response. If |
| 290 | the input is a token and the output is a timestamp response a default |
| 291 | 'granted' status info is added to the token. (Optional) |
| 292 | |
| 293 | =item B<-token_in> |
| 294 | |
| 295 | This flag can be used together with the B<-in> option and indicates |
| 296 | that the input is a DER encoded timestamp token (ContentInfo) instead |
| 297 | of a timestamp response (TimeStampResp). (Optional) |
| 298 | |
| 299 | =item B<-out> response.tsr |
| 300 | |
| 301 | The response is written to this file. The format and content of the |
| 302 | file depends on other options (see B<-text>, B<-token_out>). The default is |
| 303 | stdout. (Optional) |
| 304 | |
| 305 | =item B<-token_out> |
| 306 | |
| 307 | The output is a timestamp token (ContentInfo) instead of timestamp |
| 308 | response (TimeStampResp). (Optional) |
| 309 | |
| 310 | =item B<-text> |
| 311 | |
| 312 | If this option is specified the output is human-readable text format |
| 313 | instead of DER. (Optional) |
| 314 | |
| 315 | =item B<-engine> id |
| 316 | |
| 317 | Specifying an engine (by its unique B<id> string) will cause B<ts> |
| 318 | to attempt to obtain a functional reference to the specified engine, |
| 319 | thus initialising it if needed. The engine will then be set as the default |
| 320 | for all available algorithms. Default is builtin. (Optional) |
| 321 | |
| 322 | =back |
| 323 | |
| 324 | =head2 Time Stamp Response verification |
| 325 | |
| 326 | The B<-verify> command is for verifying if a timestamp response or |
| 327 | timestamp token is valid and matches a particular timestamp request or |
| 328 | data file. The B<-verify> command does not use the configuration file. |
| 329 | |
| 330 | =over 4 |
| 331 | |
| 332 | =item B<-data> file_to_hash |
| 333 | |
| 334 | The response or token must be verified against file_to_hash. The file |
| 335 | is hashed with the message digest algorithm specified in the token. |
| 336 | The B<-digest> and B<-queryfile> options must not be specified with this one. |
| 337 | (Optional) |
| 338 | |
| 339 | =item B<-digest> digest_bytes |
| 340 | |
| 341 | The response or token must be verified against the message digest specified |
| 342 | with this option. The number of bytes must match the message digest algorithm |
| 343 | specified in the token. The B<-data> and B<-queryfile> options must not be |
| 344 | specified with this one. (Optional) |
| 345 | |
| 346 | =item B<-queryfile> request.tsq |
| 347 | |
| 348 | The original timestamp request in DER format. The B<-data> and B<-digest> |
| 349 | options must not be specified with this one. (Optional) |
| 350 | |
| 351 | =item B<-in> response.tsr |
| 352 | |
| 353 | The timestamp response that needs to be verified in DER format. (Mandatory) |
| 354 | |
| 355 | =item B<-token_in> |
| 356 | |
| 357 | This flag can be used together with the B<-in> option and indicates |
| 358 | that the input is a DER encoded timestamp token (ContentInfo) instead |
| 359 | of a timestamp response (TimeStampResp). (Optional) |
| 360 | |
| 361 | =item B<-CApath> trusted_cert_path |
| 362 | |
| 363 | The name of the directory containing the trusted CA certificates of the |
| 364 | client. See the similar option of L<verify(1)> for additional |
| 365 | details. Either this option or B<-CAfile> must be specified. (Optional) |
| 366 | |
| 367 | |
| 368 | =item B<-CAfile> trusted_certs.pem |
| 369 | |
| 370 | The name of the file containing a set of trusted self-signed CA |
| 371 | certificates in PEM format. See the similar option of |
| 372 | L<verify(1)> for additional details. Either this option |
| 373 | or B<-CApath> must be specified. |
| 374 | (Optional) |
| 375 | |
| 376 | =item B<-untrusted> cert_file.pem |
| 377 | |
| 378 | Set of additional untrusted certificates in PEM format which may be |
| 379 | needed when building the certificate chain for the TSA's signing |
| 380 | certificate. This file must contain the TSA signing certificate and |
| 381 | all intermediate CA certificates unless the response includes them. |
| 382 | (Optional) |
| 383 | |
| 384 | =item I<verify options> |
| 385 | |
| 386 | The options B<-attime timestamp>, B<-check_ss_sig>, B<-crl_check>, |
| 387 | B<-crl_check_all>, B<-explicit_policy>, B<-extended_crl>, B<-ignore_critical>, |
| 388 | B<-inhibit_any>, B<-inhibit_map>, B<-issuer_checks>, B<-no_alt_chains>, |
| 389 | B<-no_check_time>, B<-partial_chain>, B<-policy>, B<-policy_check>, |
| 390 | B<-policy_print>, B<-purpose>, B<-suiteB_128>, B<-suiteB_128_only>, |
| 391 | B<-suiteB_192>, B<-trusted_first>, B<-use_deltas>, B<-auth_level>, |
| 392 | B<-verify_depth>, B<-verify_email>, B<-verify_hostname>, B<-verify_ip>, |
| 393 | B<-verify_name>, and B<-x509_strict> can be used to control timestamp |
| 394 | verification. See L<verify(1)>. |
| 395 | |
| 396 | =back |
| 397 | |
| 398 | =head1 CONFIGURATION FILE OPTIONS |
| 399 | |
| 400 | The B<-query> and B<-reply> commands make use of a configuration file. |
| 401 | See L<config(5)> |
| 402 | for a general description of the syntax of the config file. The |
| 403 | B<-query> command uses only the symbolic OID names section |
| 404 | and it can work without it. However, the B<-reply> command needs the |
| 405 | config file for its operation. |
| 406 | |
| 407 | When there is a command line switch equivalent of a variable the |
| 408 | switch always overrides the settings in the config file. |
| 409 | |
| 410 | =over 4 |
| 411 | |
| 412 | =item B<tsa> section, B<default_tsa> |
| 413 | |
| 414 | This is the main section and it specifies the name of another section |
| 415 | that contains all the options for the B<-reply> command. This default |
| 416 | section can be overridden with the B<-section> command line switch. (Optional) |
| 417 | |
| 418 | =item B<oid_file> |
| 419 | |
| 420 | See L<ca(1)> for description. (Optional) |
| 421 | |
| 422 | =item B<oid_section> |
| 423 | |
| 424 | See L<ca(1)> for description. (Optional) |
| 425 | |
| 426 | =item B<RANDFILE> |
| 427 | |
| 428 | See L<ca(1)> for description. (Optional) |
| 429 | |
| 430 | =item B<serial> |
| 431 | |
| 432 | The name of the file containing the hexadecimal serial number of the |
| 433 | last timestamp response created. This number is incremented by 1 for |
| 434 | each response. If the file does not exist at the time of response |
| 435 | generation a new file is created with serial number 1. (Mandatory) |
| 436 | |
| 437 | =item B<crypto_device> |
| 438 | |
| 439 | Specifies the OpenSSL engine that will be set as the default for |
| 440 | all available algorithms. The default value is builtin, you can specify |
| 441 | any other engines supported by OpenSSL (e.g. use chil for the NCipher HSM). |
| 442 | (Optional) |
| 443 | |
| 444 | =item B<signer_cert> |
| 445 | |
| 446 | TSA signing certificate in PEM format. The same as the B<-signer> |
| 447 | command line option. (Optional) |
| 448 | |
| 449 | =item B<certs> |
| 450 | |
| 451 | A file containing a set of PEM encoded certificates that need to be |
| 452 | included in the response. The same as the B<-chain> command line |
| 453 | option. (Optional) |
| 454 | |
| 455 | =item B<signer_key> |
| 456 | |
| 457 | The private key of the TSA in PEM format. The same as the B<-inkey> |
| 458 | command line option. (Optional) |
| 459 | |
| 460 | =item B<signer_digest> |
| 461 | |
| 462 | Signing digest to use. The same as the |
| 463 | B<-I<digest>> command line option. (Mandatory unless specified on the command |
| 464 | line) |
| 465 | |
| 466 | =item B<default_policy> |
| 467 | |
| 468 | The default policy to use when the request does not mandate any |
| 469 | policy. The same as the B<-tspolicy> command line option. (Optional) |
| 470 | |
| 471 | =item B<other_policies> |
| 472 | |
| 473 | Comma separated list of policies that are also acceptable by the TSA |
| 474 | and used only if the request explicitly specifies one of them. (Optional) |
| 475 | |
| 476 | =item B<digests> |
| 477 | |
| 478 | The list of message digest algorithms that the TSA accepts. At least |
| 479 | one algorithm must be specified. (Mandatory) |
| 480 | |
| 481 | =item B<accuracy> |
| 482 | |
| 483 | The accuracy of the time source of the TSA in seconds, milliseconds |
| 484 | and microseconds. E.g. secs:1, millisecs:500, microsecs:100. If any of |
| 485 | the components is missing zero is assumed for that field. (Optional) |
| 486 | |
| 487 | =item B<clock_precision_digits> |
| 488 | |
| 489 | Specifies the maximum number of digits, which represent the fraction of |
| 490 | seconds, that need to be included in the time field. The trailing zeros |
| 491 | must be removed from the time, so there might actually be fewer digits, |
| 492 | or no fraction of seconds at all. Supported only on UNIX platforms. |
| 493 | The maximum value is 6, default is 0. |
| 494 | (Optional) |
| 495 | |
| 496 | =item B<ordering> |
| 497 | |
| 498 | If this option is yes the responses generated by this TSA can always |
| 499 | be ordered, even if the time difference between two responses is less |
| 500 | than the sum of their accuracies. Default is no. (Optional) |
| 501 | |
| 502 | =item B<tsa_name> |
| 503 | |
| 504 | Set this option to yes if the subject name of the TSA must be included in |
| 505 | the TSA name field of the response. Default is no. (Optional) |
| 506 | |
| 507 | =item B<ess_cert_id_chain> |
| 508 | |
| 509 | The SignedData objects created by the TSA always contain the |
| 510 | certificate identifier of the signing certificate in a signed |
| 511 | attribute (see RFC 2634, Enhanced Security Services). If this option |
| 512 | is set to yes and either the B<certs> variable or the B<-chain> option |
| 513 | is specified then the certificate identifiers of the chain will also |
| 514 | be included in the SigningCertificate signed attribute. If this |
| 515 | variable is set to no, only the signing certificate identifier is |
| 516 | included. Default is no. (Optional) |
| 517 | |
| 518 | =item B<ess_cert_id_alg> |
| 519 | |
| 520 | This option specifies the hash function to be used to calculate the TSA's |
| 521 | public key certificate identifier. Default is sha1. (Optional) |
| 522 | |
| 523 | =back |
| 524 | |
| 525 | =head1 EXAMPLES |
| 526 | |
| 527 | All the examples below presume that B<OPENSSL_CONF> is set to a proper |
| 528 | configuration file, e.g. the example configuration file |
| 529 | openssl/apps/openssl.cnf will do. |
| 530 | |
| 531 | =head2 Time Stamp Request |
| 532 | |
| 533 | To create a timestamp request for design1.txt with SHA-1 |
| 534 | without nonce and policy and no certificate is required in the response: |
| 535 | |
| 536 | openssl ts -query -data design1.txt -no_nonce \ |
| 537 | -out design1.tsq |
| 538 | |
| 539 | To create a similar timestamp request with specifying the message imprint |
| 540 | explicitly: |
| 541 | |
| 542 | openssl ts -query -digest b7e5d3f93198b38379852f2c04e78d73abdd0f4b \ |
| 543 | -no_nonce -out design1.tsq |
| 544 | |
| 545 | To print the content of the previous request in human readable format: |
| 546 | |
| 547 | openssl ts -query -in design1.tsq -text |
| 548 | |
| 549 | To create a timestamp request which includes the MD-5 digest |
| 550 | of design2.txt, requests the signer certificate and nonce, |
| 551 | specifies a policy id (assuming the tsa_policy1 name is defined in the |
| 552 | OID section of the config file): |
| 553 | |
| 554 | openssl ts -query -data design2.txt -md5 \ |
| 555 | -tspolicy tsa_policy1 -cert -out design2.tsq |
| 556 | |
| 557 | =head2 Time Stamp Response |
| 558 | |
| 559 | Before generating a response a signing certificate must be created for |
| 560 | the TSA that contains the B<timeStamping> critical extended key usage extension |
| 561 | without any other key usage extensions. You can add this line to the |
| 562 | user certificate section of the config file to generate a proper certificate; |
| 563 | |
| 564 | extendedKeyUsage = critical,timeStamping |
| 565 | |
| 566 | See L<req(1)>, L<ca(1)>, and L<x509(1)> for instructions. The examples |
| 567 | below assume that cacert.pem contains the certificate of the CA, |
| 568 | tsacert.pem is the signing certificate issued by cacert.pem and |
| 569 | tsakey.pem is the private key of the TSA. |
| 570 | |
| 571 | To create a timestamp response for a request: |
| 572 | |
| 573 | openssl ts -reply -queryfile design1.tsq -inkey tsakey.pem \ |
| 574 | -signer tsacert.pem -out design1.tsr |
| 575 | |
| 576 | If you want to use the settings in the config file you could just write: |
| 577 | |
| 578 | openssl ts -reply -queryfile design1.tsq -out design1.tsr |
| 579 | |
| 580 | To print a timestamp reply to stdout in human readable format: |
| 581 | |
| 582 | openssl ts -reply -in design1.tsr -text |
| 583 | |
| 584 | To create a timestamp token instead of timestamp response: |
| 585 | |
| 586 | openssl ts -reply -queryfile design1.tsq -out design1_token.der -token_out |
| 587 | |
| 588 | To print a timestamp token to stdout in human readable format: |
| 589 | |
| 590 | openssl ts -reply -in design1_token.der -token_in -text -token_out |
| 591 | |
| 592 | To extract the timestamp token from a response: |
| 593 | |
| 594 | openssl ts -reply -in design1.tsr -out design1_token.der -token_out |
| 595 | |
| 596 | To add 'granted' status info to a timestamp token thereby creating a |
| 597 | valid response: |
| 598 | |
| 599 | openssl ts -reply -in design1_token.der -token_in -out design1.tsr |
| 600 | |
| 601 | =head2 Time Stamp Verification |
| 602 | |
| 603 | To verify a timestamp reply against a request: |
| 604 | |
| 605 | openssl ts -verify -queryfile design1.tsq -in design1.tsr \ |
| 606 | -CAfile cacert.pem -untrusted tsacert.pem |
| 607 | |
| 608 | To verify a timestamp reply that includes the certificate chain: |
| 609 | |
| 610 | openssl ts -verify -queryfile design2.tsq -in design2.tsr \ |
| 611 | -CAfile cacert.pem |
| 612 | |
| 613 | To verify a timestamp token against the original data file: |
| 614 | openssl ts -verify -data design2.txt -in design2.tsr \ |
| 615 | -CAfile cacert.pem |
| 616 | |
| 617 | To verify a timestamp token against a message imprint: |
| 618 | openssl ts -verify -digest b7e5d3f93198b38379852f2c04e78d73abdd0f4b \ |
| 619 | -in design2.tsr -CAfile cacert.pem |
| 620 | |
| 621 | You could also look at the 'test' directory for more examples. |
| 622 | |
| 623 | =head1 BUGS |
| 624 | |
| 625 | =for comment foreign manuals: procmail(1), perl(1) |
| 626 | |
| 627 | =over 2 |
| 628 | |
| 629 | =item * |
| 630 | |
| 631 | No support for timestamps over SMTP, though it is quite easy |
| 632 | to implement an automatic e-mail based TSA with L<procmail(1)> |
| 633 | and L<perl(1)>. HTTP server support is provided in the form of |
| 634 | a separate apache module. HTTP client support is provided by |
| 635 | L<tsget(1)>. Pure TCP/IP protocol is not supported. |
| 636 | |
| 637 | =item * |
| 638 | |
| 639 | The file containing the last serial number of the TSA is not |
| 640 | locked when being read or written. This is a problem if more than one |
| 641 | instance of L<openssl(1)> is trying to create a timestamp |
| 642 | response at the same time. This is not an issue when using the apache |
| 643 | server module, it does proper locking. |
| 644 | |
| 645 | =item * |
| 646 | |
| 647 | Look for the FIXME word in the source files. |
| 648 | |
| 649 | =item * |
| 650 | |
| 651 | The source code should really be reviewed by somebody else, too. |
| 652 | |
| 653 | =item * |
| 654 | |
| 655 | More testing is needed, I have done only some basic tests (see |
| 656 | test/testtsa). |
| 657 | |
| 658 | =back |
| 659 | |
| 660 | =head1 SEE ALSO |
| 661 | |
| 662 | L<tsget(1)>, L<openssl(1)>, L<req(1)>, |
| 663 | L<x509(1)>, L<ca(1)>, L<genrsa(1)>, |
| 664 | L<config(5)> |
| 665 | |
| 666 | =head1 COPYRIGHT |
| 667 | |
| 668 | Copyright 2006-2021 The OpenSSL Project Authors. All Rights Reserved. |
| 669 | |
| 670 | Licensed under the OpenSSL license (the "License"). You may not use |
| 671 | this file except in compliance with the License. You can obtain a copy |
| 672 | in the file LICENSE in the source distribution or at |
| 673 | L<https://www.openssl.org/source/license.html>. |
| 674 | |
| 675 | =cut |