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