]> git.ipfire.org Git - thirdparty/openssl.git/blame - doc/man1/openssl-smime.pod.in
provider-storemgmt: Document the input-type and properties parameters.
[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
4b537191 6openssl-smime - S/MIME command
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 34[B<-outform> B<DER>|B<PEM>|B<SMIME>]
6d382c74 35[B<-keyform> B<DER>|B<PEM>|B<P12>|B<ENGINE>]
e8769719 36[B<-passin> I<arg>]
f91d003a 37[B<-inkey> I<filename>|I<uri>]
e8769719 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 -}
d55e4487 49{- $OpenSSL::safe::opt_engine_synopsis -}{- $OpenSSL::safe::opt_r_synopsis -}
21d08b9e 50{- $OpenSSL::safe::opt_v_synopsis -}
6bd4e3f2 51{- $OpenSSL::safe::opt_provider_synopsis -}
90a1f2d7 52{- $OpenSSL::safe::opt_config_synopsis -}
6d382c74 53I<recipcert> ...
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>.
46949153 120See L<openssl-format-options(1)> for details.
777182a0 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>.
46949153 126See L<openssl-format-options(1)> for details.
777182a0 127
6d382c74 128=item B<-keyform> B<DER>|B<PEM>|B<P12>|B<ENGINE>
777182a0
RS
129
130The key format; the default is B<PEM>.
6d382c74 131The only value with effect is B<ENGINE>; all others have become obsolete.
46949153 132See L<openssl-format-options(1)> for details.
fd13f0ee 133
e8769719 134=item B<-stream>, B<-indef>, B<-noindef>
76b46e77 135
c4de074e 136The B<-stream> and B<-indef> options are equivalent and enable streaming I/O
76b46e77
DSH
137for encoding operations. This permits single pass processing of data without
138the need to hold the entire contents in memory, potentially supporting very
139large files. Streaming is automatically set for S/MIME signing with detached
140data if the output format is B<SMIME> it is currently off by default for all
141other operations.
142
143=item B<-noindef>
144
c4de074e 145Disable streaming I/O where it would produce and indefinite length constructed
76b46e77
DSH
146encoding. This option currently has no effect. In future streaming will be
147enabled by default on all relevant operations and this option will disable it.
148
e8769719 149=item B<-content> I<filename>
fd13f0ee
DSH
150
151This specifies a file containing the detached content, this is only
152useful with the B<-verify> command. This is only usable if the PKCS#7
153structure is using the detached signature form where the content is
154not included. This option will override any content if the input format
155is S/MIME and it uses the multipart/signed MIME content type.
156
e3775a33
DSH
157=item B<-text>
158
c4de074e 159This option adds plain text (text/plain) MIME headers to the supplied
e3775a33 160message if encrypting or signing. If decrypting or verifying it strips
1bc74519 161off text headers: if the decrypted or verified message is not of MIME
e3775a33
DSH
162type text/plain then an error occurs.
163
e8769719 164=item B<-md> I<digest>
d884c5ba 165
c4de074e 166Digest algorithm to use when signing or resigning. If not present then the
d884c5ba
DSH
167default digest algorithm for the signing key will be used (usually SHA1).
168
8dc57d76 169=item B<-I<cipher>>
e3775a33 170
c4de074e 171The encryption algorithm to use. For example DES (56 bits) - B<-des>,
e5fa864f 172triple DES (168 bits) - B<-des3>,
1bc74519 173EVP_get_cipherbyname() function) can also be used preceded by a dash, for
35a810bb 174example B<-aes-128-cbc>. See L<openssl-enc(1)> for list of ciphers
e5fa864f 175supported by your version of OpenSSL.
d884c5ba 176
6f719f06 177If not specified triple DES is used. Only used with B<-encrypt>.
e3775a33
DSH
178
179=item B<-nointern>
180
c4de074e 181When verifying a message normally certificates (if any) included in
e3775a33
DSH
182the message are searched for the signing certificate. With this option
183only the certificates specified in the B<-certfile> option are used.
184The supplied certificates can still be used as untrusted CAs however.
185
186=item B<-noverify>
187
c4de074e 188Do not verify the signers certificate of a signed message.
e3775a33
DSH
189
190=item B<-nochain>
191
65718c51 192Do not do chain verification of signers certificates; that is, do not
e3775a33
DSH
193use the certificates in the signed message as untrusted CAs.
194
195=item B<-nosigs>
196
c4de074e 197Don't try to verify the signatures on the message.
e3775a33
DSH
198
199=item B<-nocerts>
200
c4de074e 201When signing a message the signer's certificate is normally included
e3775a33
DSH
202with this option it is excluded. This will reduce the size of the
203signed message but the verifier must have a copy of the signers certificate
204available locally (passed using the B<-certfile> option for example).
205
206=item B<-noattr>
207
c4de074e 208Normally when a message is signed a set of attributes are included which
e3775a33
DSH
209include the signing time and supported symmetric algorithms. With this
210option they are not included.
211
65718c51
RS
212=item B<-nodetach>
213
214When signing a message use opaque signing. This form is more resistant
215to translation by mail relays but it cannot be read by mail agents that
216do not support S/MIME. Without this option cleartext signing with
217the MIME type multipart/signed is used.
218
219=item B<-nosmimecap>
220
221When signing a message, do not include the B<SMIMECapabilities> attribute.
222
e3775a33
DSH
223=item B<-binary>
224
c4de074e 225Normally the input message is converted to "canonical" format which is
3fc9635e
DSH
226effectively using CR and LF as end of line: as required by the S/MIME
227specification. When this option is present no translation occurs. This
228is useful when handling binary data which may not be in MIME format.
e3775a33 229
2197494d
DSH
230=item B<-crlfeol>
231
c4de074e 232Normally the output file uses a single B<LF> as end of line. When this
2197494d
DSH
233option is present B<CRLF> is used instead.
234
e8769719 235=item B<-certfile> I<file>
e3775a33 236
c4de074e 237Allows additional certificates to be specified. When signing these will
e3775a33 238be included with the message. When verifying these will be searched for
6d382c74 239the signers certificates.
b3c5aadf 240The input can be in PEM, DER, or PKCS#12 format.
e3775a33 241
e8769719 242=item B<-signer> I<file>
e3775a33 243
c4de074e 244A signing certificate when signing or resigning a message, this option can be
d884c5ba
DSH
245used multiple times if more than one signer is required. If a message is being
246verified then the signers certificates will be written to this file if the
247verification was successful.
e3775a33 248
65718c51
RS
249=item B<-nocerts>
250
251Don't include signers certificate when signing.
252
253=item B<-noattr>
254
255Don't include any signed attributes when signing.
256
e8769719 257=item B<-recip> I<file>
e3775a33 258
c4de074e 259The recipients certificate when decrypting a message. This certificate
e3775a33
DSH
260must match one of the recipients of the message or an error occurs.
261
f91d003a 262=item B<-inkey> I<filename>|I<uri>
e3775a33 263
c4de074e 264The private key to use when signing or decrypting. This must match the
e3775a33
DSH
265corresponding certificate. If this option is not specified then the
266private key must be included in the certificate file specified with
d884c5ba
DSH
267the B<-recip> or B<-signer> file. When signing this option can be used
268multiple times to specify successive keys.
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>
46949153 273see L<openssl-passphrase-options(1)>.
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
90a1f2d7
SL
294{- $OpenSSL::safe::opt_config_item -}
295
6d382c74 296=item I<recipcert> ...
b1c0cc24
RL
297
298One or more certificates of message recipients, used when encrypting
299a message.
300
e3775a33
DSH
301=back
302
303=head1 NOTES
304
305The MIME message must be sent without any blank lines between the
306headers and the output. Some mail programs will automatically add
307a blank line. Piping the mail directly to sendmail is one way to
308achieve the correct format.
309
3fc9635e 310The supplied message to be signed or encrypted must include the
60250017 311necessary MIME headers or many S/MIME clients won't display it
3fc9635e
DSH
312properly (if at all). You can use the B<-text> option to automatically
313add plain text headers.
314
e3775a33
DSH
315A "signed and encrypted" message is one where a signed message is
316then encrypted. This can be produced by encrypting an already signed
3fc9635e 317message: see the examples section.
e3775a33
DSH
318
319This version of the program only allows one signer per message but it
320will verify multiple signers on received messages. Some S/MIME clients
19d2bb57 321choke if a message contains multiple signers. It is possible to sign
e3775a33
DSH
322messages "in parallel" by signing an already signed message.
323
3fc9635e
DSH
324The options B<-encrypt> and B<-decrypt> reflect common usage in S/MIME
325clients. Strictly speaking these process PKCS#7 enveloped data: PKCS#7
326encrypted data is used for other purposes.
327
d884c5ba
DSH
328The B<-resign> option uses an existing message digest when adding a new
329signer. This means that attributes must be present in at least one existing
330signer using the same message digest or this operation will fail.
331
e4ef2e25 332The B<-stream> and B<-indef> options enable streaming I/O support.
76b46e77
DSH
333As a result the encoding is BER using indefinite length constructed encoding
334and no longer DER. Streaming is supported for the B<-encrypt> operation and the
335B<-sign> operation if the content is not detached.
336
337Streaming is always used for the B<-sign> operation with detached data but
338since the content is no longer part of the PKCS#7 structure the encoding
339remains DER.
340
e3775a33
DSH
341=head1 EXIT CODES
342
343=over 4
344
c8919dde 345=item Z<>0
e3775a33 346
c4de074e 347The operation was completely successfully.
e3775a33 348
c8919dde 349=item Z<>1
e3775a33 350
c4de074e 351An error occurred parsing the command options.
e3775a33 352
c8919dde 353=item Z<>2
e3775a33 354
c4de074e 355One of the input files could not be read.
e3775a33 356
c8919dde 357=item Z<>3
e3775a33 358
c4de074e 359An error occurred creating the PKCS#7 file or when reading the MIME
e3775a33
DSH
360message.
361
c8919dde 362=item Z<>4
e3775a33 363
c4de074e 364An error occurred decrypting or verifying the message.
e3775a33 365
c8919dde 366=item Z<>5
e3775a33 367
c4de074e 368The message was verified correctly but an error occurred writing out
e3775a33
DSH
369the signers certificates.
370
371=back
372
373=head1 EXAMPLES
374
3fc9635e
DSH
375Create a cleartext signed message:
376
1675f6eb 377 openssl smime -sign -in message.txt -text -out mail.msg \
1bc74519 378 -signer mycert.pem
3fc9635e 379
0d638dc1 380Create an opaque signed message:
3fc9635e 381
1675f6eb 382 openssl smime -sign -in message.txt -text -out mail.msg -nodetach \
1bc74519 383 -signer mycert.pem
3fc9635e
DSH
384
385Create a signed message, include some additional certificates and
386read the private key from another file:
387
1675f6eb 388 openssl smime -sign -in in.txt -text -out mail.msg \
1bc74519 389 -signer mycert.pem -inkey mykey.pem -certfile mycerts.pem
3fc9635e 390
d884c5ba
DSH
391Create a signed message with two signers:
392
393 openssl smime -sign -in message.txt -text -out mail.msg \
1bc74519 394 -signer mycert.pem -signer othercert.pem
d884c5ba 395
3fc9635e
DSH
396Send a signed message under Unix directly to sendmail, including headers:
397
1675f6eb 398 openssl smime -sign -in in.txt -text -signer mycert.pem \
1bc74519
RS
399 -from steve@openssl.org -to someone@somewhere \
400 -subject "Signed message" | sendmail someone@somewhere
3fc9635e
DSH
401
402Verify a message and extract the signer's certificate if successful:
403
404 openssl smime -verify -in mail.msg -signer user.pem -out signedtext.txt
405
406Send encrypted mail using triple DES:
407
1675f6eb 408 openssl smime -encrypt -in in.txt -from steve@openssl.org \
1bc74519
RS
409 -to someone@somewhere -subject "Encrypted message" \
410 -des3 user.pem -out mail.msg
3fc9635e
DSH
411
412Sign and encrypt mail:
413
1675f6eb 414 openssl smime -sign -in ml.txt -signer my.pem -text \
1bc74519
RS
415 | openssl smime -encrypt -out mail.msg \
416 -from steve@openssl.org -to someone@somewhere \
417 -subject "Signed and Encrypted message" -des3 user.pem
3fc9635e 418
d884c5ba
DSH
419Note: the encryption command does not include the B<-text> option because the
420message being encrypted already has MIME headers.
3fc9635e
DSH
421
422Decrypt mail:
423
424 openssl smime -decrypt -in mail.msg -recip mycert.pem -inkey key.pem
425
fd13f0ee
DSH
426The output from Netscape form signing is a PKCS#7 structure with the
427detached signature format. You can use this program to verify the
428signature by line wrapping the base64 encoded structure and surrounding
429it with:
430
a8c12555
DSH
431 -----BEGIN PKCS7-----
432 -----END PKCS7-----
fd13f0ee 433
1bc74519 434and using the command:
fd13f0ee
DSH
435
436 openssl smime -verify -inform PEM -in signature.pem -content content.txt
437
0d638dc1 438Alternatively you can base64 decode the signature and use:
fd13f0ee
DSH
439
440 openssl smime -verify -inform DER -in signature.der -content content.txt
441
f3dea9a5
BM
442Create an encrypted message using 128 bit Camellia:
443
444 openssl smime -encrypt -in plain.txt -camellia128 -out mail.msg cert.pem
445
d884c5ba
DSH
446Add a signer to an existing message:
447
448 openssl smime -resign -in mail.msg -signer newsign.pem -out mail2.msg
449
3fc9635e
DSH
450=head1 BUGS
451
d884c5ba
DSH
452The MIME parser isn't very clever: it seems to handle most messages that I've
453thrown at it but it may choke on others.
3fc9635e 454
d884c5ba
DSH
455The code currently will only write out the signer's certificate to a file: if
456the signer has a separate encryption certificate this must be manually
457extracted. There should be some heuristic that determines the correct
458encryption certificate.
3fc9635e 459
d884c5ba
DSH
460Ideally a database should be maintained of a certificates for each email
461address.
3fc9635e
DSH
462
463The code doesn't currently take note of the permitted symmetric encryption
7e0de9e8 464algorithms as supplied in the SMIMECapabilities signed attribute. This means the
3fc9635e
DSH
465user has to manually include the correct encryption algorithm. It should store
466the list of permitted ciphers in a database and only use those.
467
468No revocation checking is done on the signer's certificate.
469
470The current code can only handle S/MIME v2 messages, the more complex S/MIME v3
471structures may cause parsing errors.
e3775a33 472
fd3397fc
RL
473=head1 SEE ALSO
474
475L<ossl_store-file(7)>
476
d884c5ba
DSH
477=head1 HISTORY
478
479The use of multiple B<-signer> options and the B<-resign> command were first
fb552ac6 480added in OpenSSL 1.0.0
d884c5ba 481
fc5ecadd 482The -no_alt_chains option was added in OpenSSL 1.1.0.
d884c5ba 483
6d382c74
DDO
484All B<-keyform> values except B<ENGINE> have become obsolete in OpenSSL 3.0.0
485and have no effect.
486
0f221d9c
P
487The B<-engine> option was deprecated in OpenSSL 3.0.
488
e2f92610
RS
489=head1 COPYRIGHT
490
33388b44 491Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
e2f92610 492
449040b4 493Licensed under the Apache License 2.0 (the "License"). You may not use
e2f92610
RS
494this file except in compliance with the License. You can obtain a copy
495in the file LICENSE in the source distribution or at
496L<https://www.openssl.org/source/license.html>.
497
498=cut