1=pod 2{- OpenSSL::safe::output_do_not_edit_headers(); -} 3 4=head1 NAME 5 6openssl-cms - CMS command 7 8=head1 SYNOPSIS 9 10B<openssl> B<cms> 11[B<-help>] 12 13General options: 14 15[B<-in> I<filename>] 16[B<-out> I<filename>] 17{- $OpenSSL::safe::opt_config_synopsis -} 18 19Operation options: 20 21[B<-encrypt>] 22[B<-decrypt>] 23[B<-sign>] 24[B<-verify>] 25[B<-resign>] 26[B<-sign_receipt>] 27[B<-verify_receipt> I<receipt>] 28[B<-digest> I<digest>] 29[B<-digest_create>] 30[B<-digest_verify>] 31[B<-compress>] 32[B<-uncompress>] 33[B<-EncryptedData_encrypt>] 34[B<-EncryptedData_decrypt>] 35[B<-data_create>] 36[B<-data_out>] 37[B<-cmsout>] 38 39File format options: 40 41[B<-inform> B<DER>|B<PEM>|B<SMIME>] 42[B<-outform> B<DER>|B<PEM>|B<SMIME>] 43[B<-rctform> B<DER>|B<PEM>|B<SMIME>] 44[B<-stream>] 45[B<-indef>] 46[B<-noindef>] 47[B<-binary>] 48[B<-crlfeol>] 49[B<-asciicrlf>] 50 51Keys and password options: 52 53[B<-pwri_password> I<password>] 54[B<-secretkey> I<key>] 55[B<-secretkeyid> I<id>] 56[B<-inkey> I<filename>|I<uri>] 57[B<-passin> I<arg>] 58[B<-keyopt> I<name>:I<parameter>] 59[B<-keyform> B<DER>|B<PEM>|B<P12>|B<ENGINE>] 60{- $OpenSSL::safe::opt_engine_synopsis -}{- $OpenSSL::safe::opt_provider_synopsis -} 61{- $OpenSSL::safe::opt_r_synopsis -} 62 63Encryption options: 64 65[B<-originator> I<file>] 66[B<-recip> I<file>] 67[I<recipient-cert> ...] 68[B<-I<cipher>>] 69[B<-wrap> I<cipher>] 70[B<-aes128-wrap>] 71[B<-aes192-wrap>] 72[B<-aes256-wrap>] 73[B<-des3-wrap>] 74[B<-debug_decrypt>] 75 76Signing options: 77 78[B<-md> I<digest>] 79[B<-signer> I<file>] 80[B<-certfile> I<file>] 81[B<-cades>] 82[B<-nodetach>] 83[B<-nocerts>] 84[B<-noattr>] 85[B<-nosmimecap>] 86[B<-receipt_request_all>] 87[B<-receipt_request_first>] 88[B<-receipt_request_from> I<emailaddress>] 89[B<-receipt_request_to> I<emailaddress>] 90 91Verification options: 92 93[B<-signer> I<file>] 94[B<-content> I<filename>] 95[B<-no_content_verify>] 96[B<-no_attr_verify>] 97[B<-nosigs>] 98[B<-noverify>] 99[B<-nointern>] 100[B<-cades>] 101[B<-verify_retcode>] 102{- $OpenSSL::safe::opt_trust_synopsis -} 103 104Output options: 105 106[B<-keyid>] 107[B<-econtent_type> I<type>] 108[B<-text>] 109[B<-certsout> I<file>] 110[B<-to> I<addr>] 111[B<-from> I<addr>] 112[B<-subject> I<subj>] 113 114Printing options: 115 116[B<-noout>] 117[B<-print>] 118[B<-nameopt> I<option>] 119[B<-receipt_request_print>] 120 121Validation options: 122 123{- $OpenSSL::safe::opt_v_synopsis -} 124 125=head1 DESCRIPTION 126 127This command handles data in CMS format such as S/MIME v3.1 email messages. 128It can encrypt, decrypt, sign, verify, compress, uncompress, and print messages. 129 130=head1 OPTIONS 131 132There are a number of operation options that set the type of operation to be 133performed: encrypt, decrypt, sign, verify, resign, sign_receipt, verify_receipt, 134digest_create, digest_verify, compress, uncompress, 135EncryptedData_encrypt, EncryptedData_decrypt, data_create, data_out, or cmsout. 136The relevance of the other options depends on the operation type 137and their meaning may vary according to it. 138 139=over 4 140 141=item B<-help> 142 143Print out a usage message. 144 145=back 146 147=head2 General options 148 149=over 4 150 151=item B<-in> I<filename> 152 153The input message to be encrypted or signed or the message to be decrypted 154or verified. 155 156=item B<-out> I<filename> 157 158The message text that has been decrypted or verified or the output MIME 159format message that has been signed or verified. 160 161{- $OpenSSL::safe::opt_config_item -} 162 163=back 164 165=head2 Operation options 166 167=over 4 168 169=item B<-encrypt> 170 171Encrypt data for the given recipient certificates. Input file is the message 172to be encrypted. The output file is the encrypted data in MIME format. The 173actual CMS type is B<EnvelopedData>. 174 175Note that no revocation check is done for the recipient cert, so if that 176key has been compromised, others may be able to decrypt the text. 177 178=item B<-decrypt> 179 180Decrypt data using the supplied certificate and private key. Expects 181encrypted datain MIME format for the input file. The decrypted data 182is written to the output file. 183 184=item B<-sign> 185 186Sign data using the supplied certificate and private key. Input file is 187the message to be signed. The signed data in MIME format is written 188to the output file. 189 190=item B<-verify> 191 192Verify signed data. Expects a signed data on input and outputs 193the signed data. Both clear text and opaque signing is supported. 194 195=item B<-resign> 196 197Resign a message: take an existing message and one or more new signers. 198 199=item B<-sign_receipt> 200 201Generate and output a signed receipt for the supplied message. The input 202message B<must> contain a signed receipt request. Functionality is otherwise 203similar to the B<-sign> operation. 204 205=item B<-verify_receipt> I<receipt> 206 207Verify a signed receipt in filename B<receipt>. The input message B<must> 208contain the original receipt request. Functionality is otherwise similar 209to the B<-verify> operation. 210 211=item B<-digest> I<digest> 212 213When used with B<-sign>, provides the digest in hexadecimal form instead of 214computing it from the original message content. Cannot be combined with B<-in> 215or B<-nodetach>. 216 217This operation is the CMS equivalent of L<openssl-pkeyutl(1)> signing. 218When signing a pre-computed digest, the security relies on the digest and its 219computation from the original message being trusted. 220 221=item B<-digest_create> 222 223Create a CMS B<DigestedData> type. 224 225=item B<-digest_verify> 226 227Verify a CMS B<DigestedData> type and output the content. 228 229=item B<-compress> 230 231Create a CMS B<CompressedData> type. OpenSSL must be compiled with B<zlib> 232support for this option to work, otherwise it will output an error. 233 234=item B<-uncompress> 235 236Uncompress a CMS B<CompressedData> type and output the content. OpenSSL must be 237compiled with B<zlib> support for this option to work, otherwise it will 238output an error. 239 240=item B<-EncryptedData_encrypt> 241 242Encrypt content using supplied symmetric key and algorithm using a CMS 243B<EncryptedData> type and output the content. 244 245=item B<-EncryptedData_decrypt> 246 247Decrypt content using supplied symmetric key and algorithm using a CMS 248B<EncryptedData> type and output the content. 249 250=item B<-data_create> 251 252Create a CMS B<Data> type. 253 254=item B<-data_out> 255 256B<Data> type and output the content. 257 258=item B<-cmsout> 259 260Takes an input message and writes out a PEM encoded CMS structure. 261 262=back 263 264=head2 File format options 265 266=over 4 267 268=item B<-inform> B<DER>|B<PEM>|B<SMIME> 269 270The input format of the CMS structure (if one is being read); 271the default is B<SMIME>. 272See L<openssl-format-options(1)> for details. 273 274=item B<-outform> B<DER>|B<PEM>|B<SMIME> 275 276The output format of the CMS structure (if one is being written); 277the default is B<SMIME>. 278See L<openssl-format-options(1)> for details. 279 280=item B<-rctform> B<DER>|B<PEM>|B<SMIME> 281 282The signed receipt format for use with the B<-receipt_verify>; the default 283is B<SMIME>. 284See L<openssl-format-options(1)> for details. 285 286=item B<-stream>, B<-indef> 287 288The B<-stream> and B<-indef> options are equivalent and enable streaming I/O 289for encoding operations. This permits single pass processing of data without 290the need to hold the entire contents in memory, potentially supporting very 291large files. Streaming is automatically set for S/MIME signing with detached 292data if the output format is B<SMIME> it is currently off by default for all 293other operations. 294 295=item B<-noindef> 296 297Disable streaming I/O where it would produce and indefinite length constructed 298encoding. This option currently has no effect. In future streaming will be 299enabled by default on all relevant operations and this option will disable it. 300 301=item B<-binary> 302 303Normally the input message is converted to "canonical" format which is 304effectively using CR and LF as end of line: as required by the S/MIME 305specification. When this option is present no translation occurs. This 306is useful when handling binary data which may not be in MIME format. 307 308=item B<-crlfeol> 309 310Normally the output file uses a single B<LF> as end of line. When this 311option is present B<CRLF> is used instead. 312 313=item B<-asciicrlf> 314 315When signing use ASCII CRLF format canonicalisation. This strips trailing 316whitespace from all lines, deletes trailing blank lines at EOF and sets 317the encapsulated content type. This option is normally used with detached 318content and an output signature format of DER. This option is not normally 319needed when verifying as it is enabled automatically if the encapsulated 320content format is detected. 321 322=back 323 324=head2 Keys and password options 325 326=over 4 327 328=item B<-pwri_password> I<password> 329 330Specify password for recipient. 331 332=item B<-secretkey> I<key> 333 334Specify symmetric key to use. The key must be supplied in hex format and be 335consistent with the algorithm used. Supported by the B<-EncryptedData_encrypt> 336B<-EncryptedData_decrypt>, B<-encrypt> and B<-decrypt> options. When used 337with B<-encrypt> or B<-decrypt> the supplied key is used to wrap or unwrap the 338content encryption key using an AES key in the B<KEKRecipientInfo> type. 339 340=item B<-secretkeyid> I<id> 341 342The key identifier for the supplied symmetric key for B<KEKRecipientInfo> type. 343This option B<must> be present if the B<-secretkey> option is used with 344B<-encrypt>. With B<-decrypt> operations the I<id> is used to locate the 345relevant key if it is not supplied then an attempt is used to decrypt any 346B<KEKRecipientInfo> structures. 347 348=item B<-inkey> I<filename>|I<uri> 349 350The private key to use when signing or decrypting. This must match the 351corresponding certificate. If this option is not specified then the 352private key must be included in the certificate file specified with 353the B<-recip> or B<-signer> file. When signing this option can be used 354multiple times to specify successive keys. 355 356=item B<-passin> I<arg> 357 358The private key password source. For more information about the format of B<arg> 359see L<openssl-passphrase-options(1)>. 360 361=item B<-keyopt> I<name>:I<parameter> 362 363For signing and encryption this option can be used multiple times to 364set customised parameters for the preceding key or certificate. It can 365currently be used to set RSA-PSS for signing, RSA-OAEP for encryption 366or to modify default parameters for ECDH. 367 368=item B<-keyform> B<DER>|B<PEM>|B<P12>|B<ENGINE> 369 370The format of the private key file; unspecified by default. 371See L<openssl-format-options(1)> for details. 372 373{- $OpenSSL::safe::opt_engine_item -} 374 375{- $OpenSSL::safe::opt_provider_item -} 376 377{- $OpenSSL::safe::opt_r_item -} 378 379=back 380 381=head2 Encryption and decryption options 382 383=over 4 384 385=item B<-originator> I<file> 386 387A certificate of the originator of the encrypted message. Necessary for 388decryption when Key Agreement is in use for a shared key. 389 390=item B<-recip> I<file> 391 392When decrypting a message this specifies the certificate of the recipient. 393The certificate must match one of the recipients of the message. 394 395When encrypting a message this option may be used multiple times to specify 396each recipient. This form B<must> be used if customised parameters are 397required (for example to specify RSA-OAEP). 398 399Only certificates carrying RSA, Diffie-Hellman or EC keys are supported by this 400option. 401 402=item I<recipient-cert> ... 403 404This is an alternative to using the B<-recip> option when encrypting a message. 405One or more certificate filenames may be given. 406 407=item B<-I<cipher>> 408 409The encryption algorithm to use. For example, AES (256 bits) - B<-aes256> 410or triple DES (168 bits) - B<-des3>. Any standard algorithm name (as used by the 411EVP_get_cipherbyname() function) can also be used preceded by a dash, for 412example B<-aes-128-cbc>. See L<openssl-enc(1)> for a list of ciphers 413supported by your version of OpenSSL. 414 415Currently, the AES variants with GCM mode are the only supported AEAD 416algorithms. 417 418If not specified, AES-256-CBC is used as the default. Only used with B<-encrypt> and 419B<-EncryptedData_create> commands. 420 421=item B<-wrap> I<cipher> 422 423Cipher algorithm to use for key wrap when encrypting the message using Key 424Agreement for key transport. The algorithm specified should be suitable for key 425wrap. 426 427=item B<-aes128-wrap>, B<-aes192-wrap>, B<-aes256-wrap>, B<-des3-wrap> 428 429Use AES128, AES192, AES256, or 3DES-EDE, respectively, to wrap key. 430Depending on the OpenSSL build options used, B<-des3-wrap> may not be supported. 431 432=item B<-debug_decrypt> 433 434This option sets the B<CMS_DEBUG_DECRYPT> flag. This option should be used 435with caution: see the notes section below. 436 437=back 438 439=head2 Signing options 440 441=over 4 442 443=item B<-md> I<digest> 444 445Digest algorithm to use when signing or resigning. If not present then the 446default digest algorithm for the signing key will be used (usually SHA1). 447 448=item B<-signer> I<file> 449 450A signing certificate. When signing or resigning a message, this option can be 451used multiple times if more than one signer is required. 452 453=item B<-certfile> I<file> 454 455Allows additional certificates to be specified. When signing these will 456be included with the message. When verifying, these will be searched for 457signer certificates and will be used for chain building. 458 459The input can be in PEM, DER, or PKCS#12 format. 460 461=item B<-cades> 462 463When used with B<-sign>, 464add an ESS signingCertificate or ESS signingCertificateV2 signed-attribute 465to the SignerInfo, in order to make the signature comply with the requirements 466for a CAdES Basic Electronic Signature (CAdES-BES). 467 468=item B<-nodetach> 469 470When signing a message use opaque signing: this form is more resistant 471to translation by mail relays but it cannot be read by mail agents that 472do not support S/MIME. Without this option cleartext signing with 473the MIME type multipart/signed is used. 474 475=item B<-nocerts> 476 477When signing a message the signer's certificate is normally included 478with this option it is excluded. This will reduce the size of the 479signed message but the verifier must have a copy of the signers certificate 480available locally (passed using the B<-certfile> option for example). 481 482=item B<-noattr> 483 484Normally when a message is signed a set of attributes are included which 485include the signing time and supported symmetric algorithms. With this 486option they are not included. 487 488=item B<-nosmimecap> 489 490Exclude the list of supported algorithms from signed attributes, other options 491such as signing time and content type are still included. 492 493=item B<-receipt_request_all>, B<-receipt_request_first> 494 495For B<-sign> option include a signed receipt request. Indicate requests should 496be provided by all recipient or first tier recipients (those mailed directly 497and not from a mailing list). Ignored it B<-receipt_request_from> is included. 498 499=item B<-receipt_request_from> I<emailaddress> 500 501For B<-sign> option include a signed receipt request. Add an explicit email 502address where receipts should be supplied. 503 504=item B<-receipt_request_to> I<emailaddress> 505 506Add an explicit email address where signed receipts should be sent to. This 507option B<must> but supplied if a signed receipt is requested. 508 509=back 510 511=head2 Verification options 512 513=over 4 514 515=item B<-signer> I<file> 516 517If a message has been verified successfully then the signers certificate(s) 518will be written to this file if the verification was successful. 519 520=item B<-content> I<filename> 521 522This specifies a file containing the detached content for operations taking 523S/MIME input, such as the B<-verify> command. This is only usable if the CMS 524structure is using the detached signature form where the content is 525not included. This option will override any content if the input format 526is S/MIME and it uses the multipart/signed MIME content type. 527 528=item B<-no_content_verify> 529 530Do not verify signed content signatures. 531 532=item B<-no_attr_verify> 533 534Do not verify signed attribute signatures. 535 536=item B<-nosigs> 537 538Don't verify message signature. 539 540=item B<-noverify> 541 542Do not verify the signers certificate of a signed message. 543 544=item B<-nointern> 545 546When verifying a message normally certificates (if any) included in 547the message are searched for the signing certificate. With this option 548only the certificates specified in the B<-certfile> option are used. 549The supplied certificates can still be used as untrusted CAs however. 550 551=item B<-cades> 552 553When used with B<-verify>, require and check signer certificate digest. 554See the NOTES section for more details. 555 556=item B<-verify_retcode> 557 558Exit nonzero on verification failure. 559 560{- $OpenSSL::safe::opt_trust_item -} 561 562=back 563 564=head2 Output options 565 566=over 4 567 568=item B<-keyid> 569 570Use subject key identifier to identify certificates instead of issuer name and 571serial number. The supplied certificate B<must> include a subject key 572identifier extension. Supported by B<-sign> and B<-encrypt> options. 573 574=item B<-econtent_type> I<type> 575 576Set the encapsulated content type to I<type> if not supplied the B<Data> type 577is used. The I<type> argument can be any valid OID name in either text or 578numerical format. 579 580=item B<-text> 581 582This option adds plain text (text/plain) MIME headers to the supplied 583message if encrypting or signing. If decrypting or verifying it strips 584off text headers: if the decrypted or verified message is not of MIME 585type text/plain then an error occurs. 586 587=item B<-certsout> I<file> 588 589Any certificates contained in the input message are written to I<file>. 590 591=item B<-to>, B<-from>, B<-subject> 592 593The relevant email headers. These are included outside the signed 594portion of a message so they may be included manually. If signing 595then many S/MIME mail clients check the signers certificate's email 596address matches that specified in the From: address. 597 598=back 599 600=head2 Printing options 601 602=over 4 603 604=item B<-noout> 605 606For the B<-cmsout> operation do not output the parsed CMS structure. 607This is useful if the syntax of the CMS structure is being checked. 608 609=item B<-print> 610 611For the B<-cmsout> operation print out all fields of the CMS structure. 612This implies B<-noout>. 613This is mainly useful for testing purposes. 614 615=item B<-nameopt> I<option> 616 617For the B<-cmsout> operation when B<-print> option is in use, specifies 618printing options for string fields. For most cases B<utf8> is reasonable value. 619See L<openssl-namedisplay-options(1)> for details. 620 621=item B<-receipt_request_print> 622 623For the B<-verify> operation print out the contents of any signed receipt 624requests. 625 626=back 627 628=head2 Validation options 629 630=over 4 631 632{- $OpenSSL::safe::opt_v_item -} 633 634Any validation errors cause the command to exit. 635 636=back 637 638=head1 NOTES 639 640The MIME message must be sent without any blank lines between the 641headers and the output. Some mail programs will automatically add 642a blank line. Piping the mail directly to sendmail is one way to 643achieve the correct format. 644 645The supplied message to be signed or encrypted must include the 646necessary MIME headers or many S/MIME clients won't display it 647properly (if at all). You can use the B<-text> option to automatically 648add plain text headers. 649 650A "signed and encrypted" message is one where a signed message is 651then encrypted. This can be produced by encrypting an already signed 652message: see the examples section. 653 654This version of the program only allows one signer per message but it 655will verify multiple signers on received messages. Some S/MIME clients 656choke if a message contains multiple signers. It is possible to sign 657messages "in parallel" by signing an already signed message. 658 659The options B<-encrypt> and B<-decrypt> reflect common usage in S/MIME 660clients. Strictly speaking these process CMS enveloped data: CMS 661encrypted data is used for other purposes. 662 663The B<-resign> option uses an existing message digest when adding a new 664signer. This means that attributes must be present in at least one existing 665signer using the same message digest or this operation will fail. 666 667The B<-stream> and B<-indef> options enable streaming I/O support. 668As a result the encoding is BER using indefinite length constructed encoding 669and no longer DER. Streaming is supported for the B<-encrypt> operation and the 670B<-sign> operation if the content is not detached. 671 672Streaming is always used for the B<-sign> operation with detached data but 673since the content is no longer part of the CMS structure the encoding 674remains DER. 675 676If the B<-decrypt> option is used without a recipient certificate then an 677attempt is made to locate the recipient by trying each potential recipient 678in turn using the supplied private key. To thwart the MMA attack 679(Bleichenbacher's attack on PKCS #1 v1.5 RSA padding) all recipients are 680tried whether they succeed or not and if no recipients match the message 681is "decrypted" using a random key which will typically output garbage. 682The B<-debug_decrypt> option can be used to disable the MMA attack protection 683and return an error if no recipient can be found: this option should be used 684with caution. For a fuller description see L<CMS_decrypt(3)>). 685 686=head1 CADES BASIC ELECTRONIC SIGNATURE (CADES-BES) 687 688A CAdES Basic Electronic Signature (CAdES-BES), 689as defined in the European Standard ETSI EN 319 122-1 V1.1.1, contains: 690 691=over 4 692 693=item * 694 695The signed user data as defined in CMS (RFC 3852); 696 697=item * 698 699Content-type of the EncapsulatedContentInfo value being signed; 700 701=item * 702 703Message-digest of the eContent OCTET STRING within encapContentInfo being signed; 704 705=item * 706 707An ESS signingCertificate or ESS signingCertificateV2 attribute, 708as defined in Enhanced Security Services (ESS), RFC 2634 and RFC 5035. 709An ESS signingCertificate attribute only allows for SHA-1 as digest algorithm. 710An ESS signingCertificateV2 attribute allows for any digest algorithm. 711 712=item * 713 714The digital signature value computed on the user data and, when present, on the signed attributes. 715 716NOTE that the B<-cades> option applies to the B<-sign> or B<-verify> operations. 717With this option, the B<-verify> operation also requires that the 718signingCertificate attribute is present and checks that the given identifiers 719match the verification trust chain built during the verification process. 720 721=back 722 723=head1 EXIT CODES 724 725=over 4 726 727=item Z<>0 728 729The operation was completely successfully. 730 731=item Z<>1 732 733An error occurred parsing the command options. 734 735=item Z<>2 736 737One of the input files could not be read. 738 739=item Z<>3 740 741An error occurred creating the CMS file or when reading the MIME 742message. 743 744=item Z<>4 745 746An error occurred decrypting or verifying the message. 747 748=item Z<>5 749 750The message was verified correctly but an error occurred writing out 751the signers certificates. 752 753=back 754 755=head1 COMPATIBILITY WITH PKCS#7 FORMAT 756 757L<openssl-smime(1)> can only process the older B<PKCS#7> format. 758B<openssl cms> supports Cryptographic Message Syntax format. 759Use of some features will result in messages which cannot be processed by 760applications which only support the older format. These are detailed below. 761 762The use of the B<-keyid> option with B<-sign> or B<-encrypt>. 763 764The B<-outform> I<PEM> option uses different headers. 765 766The B<-compress> option. 767 768The B<-secretkey> option when used with B<-encrypt>. 769 770The use of PSS with B<-sign>. 771 772The use of OAEP or non-RSA keys with B<-encrypt>. 773 774Additionally the B<-EncryptedData_create> and B<-data_create> type cannot 775be processed by the older L<openssl-smime(1)> command. 776 777=head1 EXAMPLES 778 779Create a cleartext signed message: 780 781 openssl cms -sign -in message.txt -text -out mail.msg \ 782 -signer mycert.pem 783 784Create an opaque signed message 785 786 openssl cms -sign -in message.txt -text -out mail.msg -nodetach \ 787 -signer mycert.pem 788 789Create a signed message, include some additional certificates and 790read the private key from another file: 791 792 openssl cms -sign -in in.txt -text -out mail.msg \ 793 -signer mycert.pem -inkey mykey.pem -certfile mycerts.pem 794 795Create a signed message with two signers, use key identifier: 796 797 openssl cms -sign -in message.txt -text -out mail.msg \ 798 -signer mycert.pem -signer othercert.pem -keyid 799 800Send a signed message under Unix directly to sendmail, including headers: 801 802 openssl cms -sign -in in.txt -text -signer mycert.pem \ 803 -from steve@openssl.org -to someone@somewhere \ 804 -subject "Signed message" | sendmail someone@somewhere 805 806Verify a message and extract the signer's certificate if successful: 807 808 openssl cms -verify -in mail.msg -signer user.pem -out signedtext.txt 809 810Send encrypted mail using triple DES: 811 812 openssl cms -encrypt -in in.txt -from steve@openssl.org \ 813 -to someone@somewhere -subject "Encrypted message" \ 814 -des3 user.pem -out mail.msg 815 816Sign and encrypt mail: 817 818 openssl cms -sign -in ml.txt -signer my.pem -text \ 819 | openssl cms -encrypt -out mail.msg \ 820 -from steve@openssl.org -to someone@somewhere \ 821 -subject "Signed and Encrypted message" -des3 user.pem 822 823Note: the encryption command does not include the B<-text> option because the 824message being encrypted already has MIME headers. 825 826Decrypt a message: 827 828 openssl cms -decrypt -in mail.msg -recip mycert.pem -inkey key.pem 829 830The output from Netscape form signing is a PKCS#7 structure with the 831detached signature format. You can use this program to verify the 832signature by line wrapping the base64 encoded structure and surrounding 833it with: 834 835 -----BEGIN PKCS7----- 836 -----END PKCS7----- 837 838and using the command, 839 840 openssl cms -verify -inform PEM -in signature.pem -content content.txt 841 842alternatively you can base64 decode the signature and use 843 844 openssl cms -verify -inform DER -in signature.der -content content.txt 845 846Create an encrypted message using 128 bit Camellia: 847 848 openssl cms -encrypt -in plain.txt -camellia128 -out mail.msg cert.pem 849 850Add a signer to an existing message: 851 852 openssl cms -resign -in mail.msg -signer newsign.pem -out mail2.msg 853 854Sign a message using RSA-PSS: 855 856 openssl cms -sign -in message.txt -text -out mail.msg \ 857 -signer mycert.pem -keyopt rsa_padding_mode:pss 858 859Create an encrypted message using RSA-OAEP: 860 861 openssl cms -encrypt -in plain.txt -out mail.msg \ 862 -recip cert.pem -keyopt rsa_padding_mode:oaep 863 864Use SHA256 KDF with an ECDH certificate: 865 866 openssl cms -encrypt -in plain.txt -out mail.msg \ 867 -recip ecdhcert.pem -keyopt ecdh_kdf_md:sha256 868 869Print CMS signed binary data in human-readable form: 870 871openssl cms -in signed.cms -binary -inform DER -cmsout -print 872 873=head1 BUGS 874 875The MIME parser isn't very clever: it seems to handle most messages that I've 876thrown at it but it may choke on others. 877 878The code currently will only write out the signer's certificate to a file: if 879the signer has a separate encryption certificate this must be manually 880extracted. There should be some heuristic that determines the correct 881encryption certificate. 882 883Ideally a database should be maintained of a certificates for each email 884address. 885 886The code doesn't currently take note of the permitted symmetric encryption 887algorithms as supplied in the SMIMECapabilities signed attribute. this means the 888user has to manually include the correct encryption algorithm. It should store 889the list of permitted ciphers in a database and only use those. 890 891No revocation checking is done on the signer's certificate. 892 893=head1 SEE ALSO 894 895L<ossl_store-file(7)> 896 897=head1 HISTORY 898 899The default encryption cipher was changed from 3DES to AES-256 in OpenSSL 3.5. 900 901The use of multiple B<-signer> options and the B<-resign> command were first 902added in OpenSSL 1.0.0. 903 904The B<-keyopt> option was added in OpenSSL 1.0.2. 905 906Support for RSA-OAEP and RSA-PSS was added in OpenSSL 1.0.2. 907 908The use of non-RSA keys with B<-encrypt> and B<-decrypt> 909was added in OpenSSL 1.0.2. 910 911The -no_alt_chains option was added in OpenSSL 1.0.2b. 912 913The B<-nameopt> option was added in OpenSSL 3.0.0. 914 915The B<-engine> option was deprecated in OpenSSL 3.0. 916 917The B<-digest> option was added in OpenSSL 3.2. 918 919=head1 COPYRIGHT 920 921Copyright 2008-2024 The OpenSSL Project Authors. All Rights Reserved. 922 923Licensed under the Apache License 2.0 (the "License"). You may not use 924this file except in compliance with the License. You can obtain a copy 925in the file LICENSE in the source distribution or at 926L<https://www.openssl.org/source/license.html>. 927 928=cut 929