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