]> git.ipfire.org Git - thirdparty/openssl.git/blame - doc/man1/openssl-smime.pod.in
Copyright year updates
[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
DSH
54
55=head1 DESCRIPTION
56
35a810bb
RL
57This command handles S/MIME mail. It can encrypt, decrypt, sign
58and verify S/MIME messages.
e3775a33 59
3dfda1a6 60=head1 OPTIONS
e3775a33 61
27861607
DDO
62There are six operation options that set the type of operation to be performed:
63B<-encrypt>, B<-decrypt>, B<-sign>, B<-resign>, B<-verify>, and B<-pk7out>.
64These are mutually exclusive.
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
27861607
DDO
93=item B<-resign>
94
95Resign a message: take an existing message and one or more new signers.
96
e3775a33
DSH
97=item B<-verify>
98
c4de074e 99Verify signed mail. Expects a signed mail message on input and outputs
e3775a33
DSH
100the signed data. Both clear text and opaque signing is supported.
101
102=item B<-pk7out>
103
c4de074e 104Takes an input message and writes out a PEM encoded PKCS#7 structure.
e3775a33 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 129
bee3f389 130The key format; unspecified by default.
46949153 131See L<openssl-format-options(1)> 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 237be included with the message. When verifying these will be searched for
6d382c74 238the signers certificates.
b3c5aadf 239The input can be in PEM, DER, or PKCS#12 format.
e3775a33 240
e8769719 241=item B<-signer> I<file>
e3775a33 242
c4de074e 243A signing certificate when signing or resigning a message, this option can be
d884c5ba
DSH
244used multiple times if more than one signer is required. If a message is being
245verified then the signers certificates will be written to this file if the
246verification was successful.
e3775a33 247
65718c51
RS
248=item B<-nocerts>
249
250Don't include signers certificate when signing.
251
252=item B<-noattr>
253
254Don't include any signed attributes when signing.
255
e8769719 256=item B<-recip> I<file>
e3775a33 257
c4de074e 258The recipients certificate when decrypting a message. This certificate
e3775a33
DSH
259must match one of the recipients of the message or an error occurs.
260
f91d003a 261=item B<-inkey> I<filename>|I<uri>
e3775a33 262
c4de074e 263The private key to use when signing or decrypting. This must match the
e3775a33
DSH
264corresponding certificate. If this option is not specified then the
265private key must be included in the certificate file specified with
d884c5ba
DSH
266the B<-recip> or B<-signer> file. When signing this option can be used
267multiple times to specify successive keys.
e3775a33 268
e8769719 269=item B<-passin> I<arg>
84b65340 270
2f0ea936 271The private key password source. For more information about the format of I<arg>
46949153 272see L<openssl-passphrase-options(1)>.
84b65340 273
8dc57d76 274=item B<-to>, B<-from>, B<-subject>
e3775a33 275
c4de074e 276The relevant mail headers. These are included outside the signed
e3775a33
DSH
277portion of a message so they may be included manually. If signing
278then many S/MIME mail clients check the signers certificate's email
279address matches that specified in the From: address.
280
21d08b9e 281{- $OpenSSL::safe::opt_v_item -}
e5fa864f 282
21d08b9e 283Any verification errors cause the command to exit.
e5fa864f 284
9fcb9702
RS
285{- $OpenSSL::safe::opt_trust_item -}
286
65718c51
RS
287{- $OpenSSL::safe::opt_engine_item -}
288
9fcb9702
RS
289{- $OpenSSL::safe::opt_r_item -}
290
6bd4e3f2
P
291{- $OpenSSL::safe::opt_provider_item -}
292
90a1f2d7
SL
293{- $OpenSSL::safe::opt_config_item -}
294
6d382c74 295=item I<recipcert> ...
b1c0cc24
RL
296
297One or more certificates of message recipients, used when encrypting
298a message.
299
e3775a33
DSH
300=back
301
302=head1 NOTES
303
304The MIME message must be sent without any blank lines between the
305headers and the output. Some mail programs will automatically add
306a blank line. Piping the mail directly to sendmail is one way to
307achieve the correct format.
308
3fc9635e 309The supplied message to be signed or encrypted must include the
60250017 310necessary MIME headers or many S/MIME clients won't display it
3fc9635e
DSH
311properly (if at all). You can use the B<-text> option to automatically
312add plain text headers.
313
e3775a33
DSH
314A "signed and encrypted" message is one where a signed message is
315then encrypted. This can be produced by encrypting an already signed
3fc9635e 316message: see the examples section.
e3775a33
DSH
317
318This version of the program only allows one signer per message but it
319will verify multiple signers on received messages. Some S/MIME clients
19d2bb57 320choke if a message contains multiple signers. It is possible to sign
e3775a33
DSH
321messages "in parallel" by signing an already signed message.
322
3fc9635e
DSH
323The options B<-encrypt> and B<-decrypt> reflect common usage in S/MIME
324clients. Strictly speaking these process PKCS#7 enveloped data: PKCS#7
325encrypted data is used for other purposes.
326
d884c5ba
DSH
327The B<-resign> option uses an existing message digest when adding a new
328signer. This means that attributes must be present in at least one existing
329signer using the same message digest or this operation will fail.
330
e4ef2e25 331The B<-stream> and B<-indef> options enable streaming I/O support.
76b46e77
DSH
332As a result the encoding is BER using indefinite length constructed encoding
333and no longer DER. Streaming is supported for the B<-encrypt> operation and the
334B<-sign> operation if the content is not detached.
335
336Streaming is always used for the B<-sign> operation with detached data but
337since the content is no longer part of the PKCS#7 structure the encoding
338remains DER.
339
e3775a33
DSH
340=head1 EXIT CODES
341
342=over 4
343
c8919dde 344=item Z<>0
e3775a33 345
c4de074e 346The operation was completely successfully.
e3775a33 347
c8919dde 348=item Z<>1
e3775a33 349
c4de074e 350An error occurred parsing the command options.
e3775a33 351
c8919dde 352=item Z<>2
e3775a33 353
c4de074e 354One of the input files could not be read.
e3775a33 355
c8919dde 356=item Z<>3
e3775a33 357
c4de074e 358An error occurred creating the PKCS#7 file or when reading the MIME
e3775a33
DSH
359message.
360
c8919dde 361=item Z<>4
e3775a33 362
c4de074e 363An error occurred decrypting or verifying the message.
e3775a33 364
c8919dde 365=item Z<>5
e3775a33 366
c4de074e 367The message was verified correctly but an error occurred writing out
e3775a33
DSH
368the signers certificates.
369
370=back
371
372=head1 EXAMPLES
373
3fc9635e
DSH
374Create a cleartext signed message:
375
1675f6eb 376 openssl smime -sign -in message.txt -text -out mail.msg \
1bc74519 377 -signer mycert.pem
3fc9635e 378
0d638dc1 379Create an opaque signed message:
3fc9635e 380
1675f6eb 381 openssl smime -sign -in message.txt -text -out mail.msg -nodetach \
1bc74519 382 -signer mycert.pem
3fc9635e
DSH
383
384Create a signed message, include some additional certificates and
385read the private key from another file:
386
1675f6eb 387 openssl smime -sign -in in.txt -text -out mail.msg \
1bc74519 388 -signer mycert.pem -inkey mykey.pem -certfile mycerts.pem
3fc9635e 389
d884c5ba
DSH
390Create a signed message with two signers:
391
392 openssl smime -sign -in message.txt -text -out mail.msg \
1bc74519 393 -signer mycert.pem -signer othercert.pem
d884c5ba 394
3fc9635e
DSH
395Send a signed message under Unix directly to sendmail, including headers:
396
1675f6eb 397 openssl smime -sign -in in.txt -text -signer mycert.pem \
1bc74519
RS
398 -from steve@openssl.org -to someone@somewhere \
399 -subject "Signed message" | sendmail someone@somewhere
3fc9635e
DSH
400
401Verify a message and extract the signer's certificate if successful:
402
403 openssl smime -verify -in mail.msg -signer user.pem -out signedtext.txt
404
405Send encrypted mail using triple DES:
406
1675f6eb 407 openssl smime -encrypt -in in.txt -from steve@openssl.org \
1bc74519
RS
408 -to someone@somewhere -subject "Encrypted message" \
409 -des3 user.pem -out mail.msg
3fc9635e
DSH
410
411Sign and encrypt mail:
412
1675f6eb 413 openssl smime -sign -in ml.txt -signer my.pem -text \
1bc74519
RS
414 | openssl smime -encrypt -out mail.msg \
415 -from steve@openssl.org -to someone@somewhere \
416 -subject "Signed and Encrypted message" -des3 user.pem
3fc9635e 417
d884c5ba
DSH
418Note: the encryption command does not include the B<-text> option because the
419message being encrypted already has MIME headers.
3fc9635e
DSH
420
421Decrypt mail:
422
423 openssl smime -decrypt -in mail.msg -recip mycert.pem -inkey key.pem
424
fd13f0ee
DSH
425The output from Netscape form signing is a PKCS#7 structure with the
426detached signature format. You can use this program to verify the
427signature by line wrapping the base64 encoded structure and surrounding
428it with:
429
a8c12555
DSH
430 -----BEGIN PKCS7-----
431 -----END PKCS7-----
fd13f0ee 432
1bc74519 433and using the command:
fd13f0ee
DSH
434
435 openssl smime -verify -inform PEM -in signature.pem -content content.txt
436
0d638dc1 437Alternatively you can base64 decode the signature and use:
fd13f0ee
DSH
438
439 openssl smime -verify -inform DER -in signature.der -content content.txt
440
f3dea9a5
BM
441Create an encrypted message using 128 bit Camellia:
442
443 openssl smime -encrypt -in plain.txt -camellia128 -out mail.msg cert.pem
444
d884c5ba
DSH
445Add a signer to an existing message:
446
447 openssl smime -resign -in mail.msg -signer newsign.pem -out mail2.msg
448
3fc9635e
DSH
449=head1 BUGS
450
d884c5ba
DSH
451The MIME parser isn't very clever: it seems to handle most messages that I've
452thrown at it but it may choke on others.
3fc9635e 453
d884c5ba
DSH
454The code currently will only write out the signer's certificate to a file: if
455the signer has a separate encryption certificate this must be manually
456extracted. There should be some heuristic that determines the correct
457encryption certificate.
3fc9635e 458
d884c5ba
DSH
459Ideally a database should be maintained of a certificates for each email
460address.
3fc9635e
DSH
461
462The code doesn't currently take note of the permitted symmetric encryption
7e0de9e8 463algorithms as supplied in the SMIMECapabilities signed attribute. This means the
3fc9635e
DSH
464user has to manually include the correct encryption algorithm. It should store
465the list of permitted ciphers in a database and only use those.
466
467No revocation checking is done on the signer's certificate.
468
469The current code can only handle S/MIME v2 messages, the more complex S/MIME v3
470structures may cause parsing errors.
e3775a33 471
fd3397fc
RL
472=head1 SEE ALSO
473
474L<ossl_store-file(7)>
475
d884c5ba
DSH
476=head1 HISTORY
477
478The use of multiple B<-signer> options and the B<-resign> command were first
fb552ac6 479added in OpenSSL 1.0.0
d884c5ba 480
fc5ecadd 481The -no_alt_chains option was added in OpenSSL 1.1.0.
d884c5ba 482
0f221d9c
P
483The B<-engine> option was deprecated in OpenSSL 3.0.
484
e2f92610
RS
485=head1 COPYRIGHT
486
da1c088f 487Copyright 2000-2023 The OpenSSL Project Authors. All Rights Reserved.
e2f92610 488
449040b4 489Licensed under the Apache License 2.0 (the "License"). You may not use
e2f92610
RS
490this file except in compliance with the License. You can obtain a copy
491in the file LICENSE in the source distribution or at
492L<https://www.openssl.org/source/license.html>.
493
494=cut