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