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