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