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