]> git.ipfire.org Git - thirdparty/openssl.git/blame - doc/man1/openssl-smime.pod.in
cmdline app: add provider commandline options.
[thirdparty/openssl.git] / doc / man1 / openssl-smime.pod.in
CommitLineData
e3775a33 1=pod
625c781d 2{- OpenSSL::safe::output_do_not_edit_headers(); -}
9fcb9702 3
e3775a33
DSH
4=head1 NAME
5
b6b66573 6openssl-smime - S/MIME utility
e3775a33
DSH
7
8=head1 SYNOPSIS
9
10B<openssl> B<smime>
169394d4 11[B<-help>]
e3775a33
DSH
12[B<-encrypt>]
13[B<-decrypt>]
14[B<-sign>]
d884c5ba 15[B<-resign>]
e3775a33
DSH
16[B<-verify>]
17[B<-pk7out>]
2197494d
DSH
18[B<-binary>]
19[B<-crlfeol>]
8dc57d76 20[B<-I<cipher>>]
e8769719 21[B<-in> I<file>]
e8769719
RS
22[B<-certfile> I<file>]
23[B<-signer> I<file>]
65718c51
RS
24[B<-nointern>]
25[B<-noverify>]
26[B<-nochain>]
27[B<-nosigs>]
28[B<-nocerts>]
29[B<-noattr>]
30[B<-nodetach>]
31[B<-nosmimecap>]
e8769719
RS
32[B<-recip> I< file>]
33[B<-inform> B<DER>|B<PEM>|B<SMIME>]
777182a0
RS
34[B<-outform> B<DER>|B<PEM>|B<SMIME>]
35[B<-keyform> B<DER>|B<PEM>|B<ENGINE>]
e8769719
RS
36[B<-passin> I<arg>]
37[B<-inkey> I<file_or_id>]
38[B<-out> I<file>]
e8769719
RS
39[B<-content> I<file>]
40[B<-to> I<addr>]
41[B<-from> I<ad>]
42[B<-subject> I<s>]
e3775a33 43[B<-text>]
76b46e77
DSH
44[B<-indef>]
45[B<-noindef>]
46[B<-stream>]
e8769719 47[B<-md> I<digest>]
9fcb9702 48{- $OpenSSL::safe::opt_trust_synopsis -}
65718c51 49{- $OpenSSL::safe::opt_engine_synopsis -}
9fcb9702 50{- $OpenSSL::safe::opt_r_synopsis -}
21d08b9e 51{- $OpenSSL::safe::opt_v_synopsis -}
6bd4e3f2 52{- $OpenSSL::safe::opt_provider_synopsis -}
b1c0cc24 53I<cert.pem> ...
e3775a33 54
9f3c076b 55=for openssl ifdef engine
1738c0ce 56
e3775a33
DSH
57=head1 DESCRIPTION
58
35a810bb
RL
59This command handles S/MIME mail. It can encrypt, decrypt, sign
60and verify S/MIME messages.
e3775a33 61
3dfda1a6 62=head1 OPTIONS
e3775a33 63
76b46e77 64There are six operation options that set the type of operation to be performed.
e3775a33
DSH
65The meaning of the other options varies according to the operation type.
66
67=over 4
68
169394d4
MR
69=item B<-help>
70
71Print out a usage message.
72
e3775a33
DSH
73=item B<-encrypt>
74
c4de074e 75Encrypt mail for the given recipient certificates. Input file is the message
e3775a33
DSH
76to be encrypted. The output file is the encrypted mail in MIME format.
77
2a9afa40
RS
78Note that no revocation check is done for the recipient cert, so if that
79key has been compromised, others may be able to decrypt the text.
80
e3775a33
DSH
81=item B<-decrypt>
82
c4de074e 83Decrypt mail using the supplied certificate and private key. Expects an
e3775a33
DSH
84encrypted mail message in MIME format for the input file. The decrypted mail
85is written to the output file.
86
87=item B<-sign>
88
c4de074e 89Sign mail using the supplied certificate and private key. Input file is
e3775a33
DSH
90the message to be signed. The signed message in MIME format is written
91to the output file.
92
93=item B<-verify>
94
c4de074e 95Verify signed mail. Expects a signed mail message on input and outputs
e3775a33
DSH
96the signed data. Both clear text and opaque signing is supported.
97
98=item B<-pk7out>
99
c4de074e 100Takes an input message and writes out a PEM encoded PKCS#7 structure.
e3775a33 101
d884c5ba
DSH
102=item B<-resign>
103
c4de074e 104Resign a message: take an existing message and one or more new signers.
d884c5ba 105
e8769719 106=item B<-in> I<filename>
e3775a33 107
c4de074e 108The input message to be encrypted or signed or the MIME message to
e3775a33
DSH
109be decrypted or verified.
110
e8769719 111=item B<-out> I<filename>
e3775a33 112
c4de074e 113The message text that has been decrypted or verified or the output MIME
e3775a33
DSH
114format message that has been signed or verified.
115
777182a0
RS
116=item B<-inform> B<DER>|B<PEM>|B<SMIME>
117
118The input format of the PKCS#7 (S/MIME) structure (if one is being read);
119the default is B<SMIME>.
120See L<openssl(1)/Format Options> for details.
121
e8769719 122=item B<-outform> B<DER>|B<PEM>|B<SMIME>
fd13f0ee 123
777182a0
RS
124The output format of the PKCS#7 (S/MIME) structure (if one is being written);
125the default is B<SMIME>.
126See L<openssl(1)/Format Options> for details.
127
128=item B<-keyform> B<DER>|B<PEM>
129
130The key format; the default is B<PEM>.
131See L<openssl(1)/Format Options> for details.
fd13f0ee 132
e8769719 133=item B<-stream>, B<-indef>, B<-noindef>
76b46e77 134
c4de074e 135The B<-stream> and B<-indef> options are equivalent and enable streaming I/O
76b46e77
DSH
136for encoding operations. This permits single pass processing of data without
137the need to hold the entire contents in memory, potentially supporting very
138large files. Streaming is automatically set for S/MIME signing with detached
139data if the output format is B<SMIME> it is currently off by default for all
140other operations.
141
142=item B<-noindef>
143
c4de074e 144Disable streaming I/O where it would produce and indefinite length constructed
76b46e77
DSH
145encoding. This option currently has no effect. In future streaming will be
146enabled by default on all relevant operations and this option will disable it.
147
e8769719 148=item B<-content> I<filename>
fd13f0ee
DSH
149
150This specifies a file containing the detached content, this is only
151useful with the B<-verify> command. This is only usable if the PKCS#7
152structure is using the detached signature form where the content is
153not included. This option will override any content if the input format
154is S/MIME and it uses the multipart/signed MIME content type.
155
e3775a33
DSH
156=item B<-text>
157
c4de074e 158This option adds plain text (text/plain) MIME headers to the supplied
e3775a33 159message if encrypting or signing. If decrypting or verifying it strips
1bc74519 160off text headers: if the decrypted or verified message is not of MIME
e3775a33
DSH
161type text/plain then an error occurs.
162
e8769719 163=item B<-md> I<digest>
d884c5ba 164
c4de074e 165Digest algorithm to use when signing or resigning. If not present then the
d884c5ba
DSH
166default digest algorithm for the signing key will be used (usually SHA1).
167
8dc57d76 168=item B<-I<cipher>>
e3775a33 169
c4de074e 170The encryption algorithm to use. For example DES (56 bits) - B<-des>,
e5fa864f 171triple DES (168 bits) - B<-des3>,
1bc74519 172EVP_get_cipherbyname() function) can also be used preceded by a dash, for
35a810bb 173example B<-aes-128-cbc>. See L<openssl-enc(1)> for list of ciphers
e5fa864f 174supported by your version of OpenSSL.
d884c5ba 175
6f719f06 176If not specified triple DES is used. Only used with B<-encrypt>.
e3775a33
DSH
177
178=item B<-nointern>
179
c4de074e 180When verifying a message normally certificates (if any) included in
e3775a33
DSH
181the message are searched for the signing certificate. With this option
182only the certificates specified in the B<-certfile> option are used.
183The supplied certificates can still be used as untrusted CAs however.
184
185=item B<-noverify>
186
c4de074e 187Do not verify the signers certificate of a signed message.
e3775a33
DSH
188
189=item B<-nochain>
190
65718c51 191Do not do chain verification of signers certificates; that is, do not
e3775a33
DSH
192use the certificates in the signed message as untrusted CAs.
193
194=item B<-nosigs>
195
c4de074e 196Don't try to verify the signatures on the message.
e3775a33
DSH
197
198=item B<-nocerts>
199
c4de074e 200When signing a message the signer's certificate is normally included
e3775a33
DSH
201with this option it is excluded. This will reduce the size of the
202signed message but the verifier must have a copy of the signers certificate
203available locally (passed using the B<-certfile> option for example).
204
205=item B<-noattr>
206
c4de074e 207Normally when a message is signed a set of attributes are included which
e3775a33
DSH
208include the signing time and supported symmetric algorithms. With this
209option they are not included.
210
65718c51
RS
211=item B<-nodetach>
212
213When signing a message use opaque signing. This form is more resistant
214to translation by mail relays but it cannot be read by mail agents that
215do not support S/MIME. Without this option cleartext signing with
216the MIME type multipart/signed is used.
217
218=item B<-nosmimecap>
219
220When signing a message, do not include the B<SMIMECapabilities> attribute.
221
e3775a33
DSH
222=item B<-binary>
223
c4de074e 224Normally the input message is converted to "canonical" format which is
3fc9635e
DSH
225effectively using CR and LF as end of line: as required by the S/MIME
226specification. When this option is present no translation occurs. This
227is useful when handling binary data which may not be in MIME format.
e3775a33 228
2197494d
DSH
229=item B<-crlfeol>
230
c4de074e 231Normally the output file uses a single B<LF> as end of line. When this
2197494d
DSH
232option is present B<CRLF> is used instead.
233
e8769719 234=item B<-certfile> I<file>
e3775a33 235
c4de074e 236Allows additional certificates to be specified. When signing these will
e3775a33
DSH
237be included with the message. When verifying these will be searched for
238the signers certificates. The certificates should be in PEM format.
239
e8769719 240=item B<-signer> I<file>
e3775a33 241
c4de074e 242A signing certificate when signing or resigning a message, this option can be
d884c5ba
DSH
243used multiple times if more than one signer is required. If a message is being
244verified then the signers certificates will be written to this file if the
245verification was successful.
e3775a33 246
65718c51
RS
247=item B<-nocerts>
248
249Don't include signers certificate when signing.
250
251=item B<-noattr>
252
253Don't include any signed attributes when signing.
254
e8769719 255=item B<-recip> I<file>
e3775a33 256
c4de074e 257The recipients certificate when decrypting a message. This certificate
e3775a33
DSH
258must match one of the recipients of the message or an error occurs.
259
e8769719 260=item B<-inkey> I<file_or_id>
e3775a33 261
c4de074e 262The private key to use when signing or decrypting. This must match the
e3775a33
DSH
263corresponding certificate. If this option is not specified then the
264private key must be included in the certificate file specified with
d884c5ba
DSH
265the B<-recip> or B<-signer> file. When signing this option can be used
266multiple times to specify successive keys.
48b53522
RS
267If no engine is used, the argument is taken as a file; if an engine is
268specified, the argument is given to the engine as a key identifier.
e3775a33 269
e8769719 270=item B<-passin> I<arg>
84b65340 271
2f0ea936 272The private key password source. For more information about the format of I<arg>
3a4e43de 273see L<openssl(1)/Pass Phrase Options>.
84b65340 274
8dc57d76 275=item B<-to>, B<-from>, B<-subject>
e3775a33 276
c4de074e 277The relevant mail headers. These are included outside the signed
e3775a33
DSH
278portion of a message so they may be included manually. If signing
279then many S/MIME mail clients check the signers certificate's email
280address matches that specified in the From: address.
281
21d08b9e 282{- $OpenSSL::safe::opt_v_item -}
e5fa864f 283
21d08b9e 284Any verification errors cause the command to exit.
e5fa864f 285
9fcb9702
RS
286{- $OpenSSL::safe::opt_trust_item -}
287
65718c51
RS
288{- $OpenSSL::safe::opt_engine_item -}
289
9fcb9702
RS
290{- $OpenSSL::safe::opt_r_item -}
291
6bd4e3f2
P
292{- $OpenSSL::safe::opt_provider_item -}
293
b1c0cc24
RL
294=item I<cert.pem> ...
295
296One or more certificates of message recipients, used when encrypting
297a message.
298
e3775a33
DSH
299=back
300
301=head1 NOTES
302
303The MIME message must be sent without any blank lines between the
304headers and the output. Some mail programs will automatically add
305a blank line. Piping the mail directly to sendmail is one way to
306achieve the correct format.
307
3fc9635e 308The supplied message to be signed or encrypted must include the
60250017 309necessary MIME headers or many S/MIME clients won't display it
3fc9635e
DSH
310properly (if at all). You can use the B<-text> option to automatically
311add plain text headers.
312
e3775a33
DSH
313A "signed and encrypted" message is one where a signed message is
314then encrypted. This can be produced by encrypting an already signed
3fc9635e 315message: see the examples section.
e3775a33
DSH
316
317This version of the program only allows one signer per message but it
318will verify multiple signers on received messages. Some S/MIME clients
19d2bb57 319choke if a message contains multiple signers. It is possible to sign
e3775a33
DSH
320messages "in parallel" by signing an already signed message.
321
3fc9635e
DSH
322The options B<-encrypt> and B<-decrypt> reflect common usage in S/MIME
323clients. Strictly speaking these process PKCS#7 enveloped data: PKCS#7
324encrypted data is used for other purposes.
325
d884c5ba
DSH
326The B<-resign> option uses an existing message digest when adding a new
327signer. This means that attributes must be present in at least one existing
328signer using the same message digest or this operation will fail.
329
e4ef2e25 330The B<-stream> and B<-indef> options enable streaming I/O support.
76b46e77
DSH
331As a result the encoding is BER using indefinite length constructed encoding
332and no longer DER. Streaming is supported for the B<-encrypt> operation and the
333B<-sign> operation if the content is not detached.
334
335Streaming is always used for the B<-sign> operation with detached data but
336since the content is no longer part of the PKCS#7 structure the encoding
337remains DER.
338
e3775a33
DSH
339=head1 EXIT CODES
340
341=over 4
342
c8919dde 343=item Z<>0
e3775a33 344
c4de074e 345The operation was completely successfully.
e3775a33 346
c8919dde 347=item Z<>1
e3775a33 348
c4de074e 349An error occurred parsing the command options.
e3775a33 350
c8919dde 351=item Z<>2
e3775a33 352
c4de074e 353One of the input files could not be read.
e3775a33 354
c8919dde 355=item Z<>3
e3775a33 356
c4de074e 357An error occurred creating the PKCS#7 file or when reading the MIME
e3775a33
DSH
358message.
359
c8919dde 360=item Z<>4
e3775a33 361
c4de074e 362An error occurred decrypting or verifying the message.
e3775a33 363
c8919dde 364=item Z<>5
e3775a33 365
c4de074e 366The message was verified correctly but an error occurred writing out
e3775a33
DSH
367the signers certificates.
368
369=back
370
371=head1 EXAMPLES
372
3fc9635e
DSH
373Create a cleartext signed message:
374
1675f6eb 375 openssl smime -sign -in message.txt -text -out mail.msg \
1bc74519 376 -signer mycert.pem
3fc9635e 377
0d638dc1 378Create an opaque signed message:
3fc9635e 379
1675f6eb 380 openssl smime -sign -in message.txt -text -out mail.msg -nodetach \
1bc74519 381 -signer mycert.pem
3fc9635e
DSH
382
383Create a signed message, include some additional certificates and
384read the private key from another file:
385
1675f6eb 386 openssl smime -sign -in in.txt -text -out mail.msg \
1bc74519 387 -signer mycert.pem -inkey mykey.pem -certfile mycerts.pem
3fc9635e 388
d884c5ba
DSH
389Create a signed message with two signers:
390
391 openssl smime -sign -in message.txt -text -out mail.msg \
1bc74519 392 -signer mycert.pem -signer othercert.pem
d884c5ba 393
3fc9635e
DSH
394Send a signed message under Unix directly to sendmail, including headers:
395
1675f6eb 396 openssl smime -sign -in in.txt -text -signer mycert.pem \
1bc74519
RS
397 -from steve@openssl.org -to someone@somewhere \
398 -subject "Signed message" | sendmail someone@somewhere
3fc9635e
DSH
399
400Verify a message and extract the signer's certificate if successful:
401
402 openssl smime -verify -in mail.msg -signer user.pem -out signedtext.txt
403
404Send encrypted mail using triple DES:
405
1675f6eb 406 openssl smime -encrypt -in in.txt -from steve@openssl.org \
1bc74519
RS
407 -to someone@somewhere -subject "Encrypted message" \
408 -des3 user.pem -out mail.msg
3fc9635e
DSH
409
410Sign and encrypt mail:
411
1675f6eb 412 openssl smime -sign -in ml.txt -signer my.pem -text \
1bc74519
RS
413 | openssl smime -encrypt -out mail.msg \
414 -from steve@openssl.org -to someone@somewhere \
415 -subject "Signed and Encrypted message" -des3 user.pem
3fc9635e 416
d884c5ba
DSH
417Note: the encryption command does not include the B<-text> option because the
418message being encrypted already has MIME headers.
3fc9635e
DSH
419
420Decrypt mail:
421
422 openssl smime -decrypt -in mail.msg -recip mycert.pem -inkey key.pem
423
fd13f0ee
DSH
424The output from Netscape form signing is a PKCS#7 structure with the
425detached signature format. You can use this program to verify the
426signature by line wrapping the base64 encoded structure and surrounding
427it with:
428
a8c12555
DSH
429 -----BEGIN PKCS7-----
430 -----END PKCS7-----
fd13f0ee 431
1bc74519 432and using the command:
fd13f0ee
DSH
433
434 openssl smime -verify -inform PEM -in signature.pem -content content.txt
435
0d638dc1 436Alternatively you can base64 decode the signature and use:
fd13f0ee
DSH
437
438 openssl smime -verify -inform DER -in signature.der -content content.txt
439
f3dea9a5
BM
440Create an encrypted message using 128 bit Camellia:
441
442 openssl smime -encrypt -in plain.txt -camellia128 -out mail.msg cert.pem
443
d884c5ba
DSH
444Add a signer to an existing message:
445
446 openssl smime -resign -in mail.msg -signer newsign.pem -out mail2.msg
447
3fc9635e
DSH
448=head1 BUGS
449
d884c5ba
DSH
450The MIME parser isn't very clever: it seems to handle most messages that I've
451thrown at it but it may choke on others.
3fc9635e 452
d884c5ba
DSH
453The code currently will only write out the signer's certificate to a file: if
454the signer has a separate encryption certificate this must be manually
455extracted. There should be some heuristic that determines the correct
456encryption certificate.
3fc9635e 457
d884c5ba
DSH
458Ideally a database should be maintained of a certificates for each email
459address.
3fc9635e
DSH
460
461The code doesn't currently take note of the permitted symmetric encryption
7e0de9e8 462algorithms as supplied in the SMIMECapabilities signed attribute. This means the
3fc9635e
DSH
463user has to manually include the correct encryption algorithm. It should store
464the list of permitted ciphers in a database and only use those.
465
466No revocation checking is done on the signer's certificate.
467
468The current code can only handle S/MIME v2 messages, the more complex S/MIME v3
469structures may cause parsing errors.
e3775a33 470
fd3397fc
RL
471=head1 SEE ALSO
472
473L<ossl_store-file(7)>
474
d884c5ba
DSH
475=head1 HISTORY
476
477The use of multiple B<-signer> options and the B<-resign> command were first
fb552ac6 478added in OpenSSL 1.0.0
d884c5ba 479
fc5ecadd 480The -no_alt_chains option was added in OpenSSL 1.1.0.
d884c5ba 481
e2f92610
RS
482=head1 COPYRIGHT
483
b6b66573 484Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved.
e2f92610 485
449040b4 486Licensed under the Apache License 2.0 (the "License"). You may not use
e2f92610
RS
487this file except in compliance with the License. You can obtain a copy
488in the file LICENSE in the source distribution or at
489L<https://www.openssl.org/source/license.html>.
490
491=cut