722 lines
24 KiB
Groff
722 lines
24 KiB
Groff
.rn '' }`
|
|
'''
|
|
'''
|
|
.de Sh
|
|
.br
|
|
.if t .Sp
|
|
.ne 5
|
|
.PP
|
|
\fB\\$1\fR
|
|
.PP
|
|
..
|
|
.de Sp
|
|
.if t .sp .5v
|
|
.if n .sp
|
|
..
|
|
.de Ip
|
|
.br
|
|
.ie \\n(.$>=3 .ne \\$3
|
|
.el .ne 3
|
|
.IP "\\$1" \\$2
|
|
..
|
|
.de Vb
|
|
.ft CW
|
|
.nf
|
|
.ne \\$1
|
|
..
|
|
.de Ve
|
|
.ft R
|
|
|
|
.fi
|
|
..
|
|
'''
|
|
'''
|
|
''' Set up \*(-- to give an unbreakable dash;
|
|
''' string Tr holds user defined translation string.
|
|
''' Bell System Logo is used as a dummy character.
|
|
'''
|
|
.tr \(*W-|\(bv\*(Tr
|
|
.ie n \{\
|
|
.ds -- \(*W-
|
|
.ds PI pi
|
|
.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
|
|
.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
|
|
.ds L" ""
|
|
.ds R" ""
|
|
''' \*(M", \*(S", \*(N" and \*(T" are the equivalent of
|
|
''' \*(L" and \*(R", except that they are used on ".xx" lines,
|
|
''' such as .IP and .SH, which do another additional levels of
|
|
''' double-quote interpretation
|
|
.ds M" """
|
|
.ds S" """
|
|
.ds N" """""
|
|
.ds T" """""
|
|
.ds L' '
|
|
.ds R' '
|
|
.ds M' '
|
|
.ds S' '
|
|
.ds N' '
|
|
.ds T' '
|
|
'br\}
|
|
.el\{\
|
|
.ds -- \(em\|
|
|
.tr \*(Tr
|
|
.ds L" ``
|
|
.ds R" ''
|
|
.ds M" ``
|
|
.ds S" ''
|
|
.ds N" ``
|
|
.ds T" ''
|
|
.ds L' `
|
|
.ds R' '
|
|
.ds M' `
|
|
.ds S' '
|
|
.ds N' `
|
|
.ds T' '
|
|
.ds PI \(*p
|
|
'br\}
|
|
.\" If the F register is turned on, we'll generate
|
|
.\" index entries out stderr for the following things:
|
|
.\" TH Title
|
|
.\" SH Header
|
|
.\" Sh Subsection
|
|
.\" Ip Item
|
|
.\" X<> Xref (embedded
|
|
.\" Of course, you have to process the output yourself
|
|
.\" in some meaninful fashion.
|
|
.if \nF \{
|
|
.de IX
|
|
.tm Index:\\$1\t\\n%\t"\\$2"
|
|
..
|
|
.nr % 0
|
|
.rr F
|
|
.\}
|
|
.TH X509 1 "0.9.5a" "22/Jul/2000" "OpenSSL"
|
|
.UC
|
|
.if n .hy 0
|
|
.if n .na
|
|
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
|
|
.de CQ \" put $1 in typewriter font
|
|
.ft CW
|
|
'if n "\c
|
|
'if t \\&\\$1\c
|
|
'if n \\&\\$1\c
|
|
'if n \&"
|
|
\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
|
|
'.ft R
|
|
..
|
|
.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
|
|
. \" AM - accent mark definitions
|
|
.bd B 3
|
|
. \" fudge factors for nroff and troff
|
|
.if n \{\
|
|
. ds #H 0
|
|
. ds #V .8m
|
|
. ds #F .3m
|
|
. ds #[ \f1
|
|
. ds #] \fP
|
|
.\}
|
|
.if t \{\
|
|
. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
|
|
. ds #V .6m
|
|
. ds #F 0
|
|
. ds #[ \&
|
|
. ds #] \&
|
|
.\}
|
|
. \" simple accents for nroff and troff
|
|
.if n \{\
|
|
. ds ' \&
|
|
. ds ` \&
|
|
. ds ^ \&
|
|
. ds , \&
|
|
. ds ~ ~
|
|
. ds ? ?
|
|
. ds ! !
|
|
. ds /
|
|
. ds q
|
|
.\}
|
|
.if t \{\
|
|
. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
|
|
. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
|
|
. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
|
|
. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
|
|
. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
|
|
. ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
|
|
. ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
|
|
. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
|
|
. ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
|
|
.\}
|
|
. \" troff and (daisy-wheel) nroff accents
|
|
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
|
|
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
|
|
.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
|
|
.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
|
|
.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
|
|
.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
|
|
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
|
|
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
|
|
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
|
|
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
|
|
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
|
|
.ds ae a\h'-(\w'a'u*4/10)'e
|
|
.ds Ae A\h'-(\w'A'u*4/10)'E
|
|
.ds oe o\h'-(\w'o'u*4/10)'e
|
|
.ds Oe O\h'-(\w'O'u*4/10)'E
|
|
. \" corrections for vroff
|
|
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
|
|
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
|
|
. \" for low resolution devices (crt and lpr)
|
|
.if \n(.H>23 .if \n(.V>19 \
|
|
\{\
|
|
. ds : e
|
|
. ds 8 ss
|
|
. ds v \h'-1'\o'\(aa\(ga'
|
|
. ds _ \h'-1'^
|
|
. ds . \h'-1'.
|
|
. ds 3 3
|
|
. ds o a
|
|
. ds d- d\h'-1'\(ga
|
|
. ds D- D\h'-1'\(hy
|
|
. ds th \o'bp'
|
|
. ds Th \o'LP'
|
|
. ds ae ae
|
|
. ds Ae AE
|
|
. ds oe oe
|
|
. ds Oe OE
|
|
.\}
|
|
.rm #[ #] #H #V #F C
|
|
.SH "NAME"
|
|
x509 \- Certificate display and signing utility
|
|
.SH "SYNOPSIS"
|
|
\fBopenssl\fR \fBx509\fR
|
|
[\fB\-inform DER|PEM|NET\fR]
|
|
[\fB\-outform DER|PEM|NET\fR]
|
|
[\fB\-keyform DER|PEM\fR]
|
|
[\fB\-CAform DER|PEM\fR]
|
|
[\fB\-CAkeyform DER|PEM\fR]
|
|
[\fB\-in filename\fR]
|
|
[\fB\-out filename\fR]
|
|
[\fB\-serial\fR]
|
|
[\fB\-hash\fR]
|
|
[\fB\-subject\fR]
|
|
[\fB\-issuer\fR]
|
|
[\fB\-startdate\fR]
|
|
[\fB\-enddate\fR]
|
|
[\fB\-purpose\fR]
|
|
[\fB\-dates\fR]
|
|
[\fB\-modulus\fR]
|
|
[\fB\-fingerprint\fR]
|
|
[\fB\-alias\fR]
|
|
[\fB\-noout\fR]
|
|
[\fB\-trustout\fR]
|
|
[\fB\-clrtrust\fR]
|
|
[\fB\-clrreject\fR]
|
|
[\fB\-addtrust arg\fR]
|
|
[\fB\-addreject arg\fR]
|
|
[\fB\-setalias arg\fR]
|
|
[\fB\-days arg\fR]
|
|
[\fB\-signkey filename\fR]
|
|
[\fB\-x509toreq\fR]
|
|
[\fB\-req\fR]
|
|
[\fB\-CA filename\fR]
|
|
[\fB\-CAkey filename\fR]
|
|
[\fB\-CAcreateserial\fR]
|
|
[\fB\-CAserial filename\fR]
|
|
[\fB\-text\fR]
|
|
[\fB\-C\fR]
|
|
[\fB\-md2|\-md5|\-sha1|\-mdc2\fR]
|
|
[\fB\-clrext\fR]
|
|
[\fB\-extfile filename\fR]
|
|
[\fB\-extensions section\fR]
|
|
.SH "DESCRIPTION"
|
|
The \fBx509\fR command is a multi purpose certificate utility. It can be
|
|
used to display certificate information, convert certificates to
|
|
various forms, sign certificate requests like a \*(L"mini CA\*(R" or edit
|
|
certificate trust settings.
|
|
.PP
|
|
Since there are a large number of options they will split up into
|
|
various sections.
|
|
.SH "INPUT, OUTPUT AND GENERAL PURPOSE OPTIONS"
|
|
.Ip "\fB\-inform \s-1DER\s0|\s-1PEM\s0|\s-1NET\s0\fR" 4
|
|
This specifies the input format normally the command will expect an X509
|
|
certificate but this can change if other options such as \fB\-req\fR are
|
|
present. The \s-1DER\s0 format is the \s-1DER\s0 encoding of the certificate and \s-1PEM\s0
|
|
is the base64 encoding of the \s-1DER\s0 encoding with header and footer lines
|
|
added. The \s-1NET\s0 option is an obscure Netscape server format that is now
|
|
obsolete.
|
|
.Ip "\fB\-outform \s-1DER\s0|\s-1PEM\s0|\s-1NET\s0\fR" 4
|
|
This specifies the output format, the options have the same meaning as the
|
|
\fB\-inform\fR option.
|
|
.Ip "\fB\-in filename\fR" 4
|
|
This specifies the input filename to read a certificate from or standard input
|
|
if this option is not specified.
|
|
.Ip "\fB\-out filename\fR" 4
|
|
This specifies the output filename to write to or standard output by
|
|
default.
|
|
.Ip "\fB\-md2|\-md5|\-sha1|\-mdc2\fR" 4
|
|
the digest to use. This affects any signing or display option that uses a message
|
|
digest, such as the \fB\-fingerprint\fR, \fB\-signkey\fR and \fB\-\s-1CA\s0\fR options. If not
|
|
specified then \s-1MD5\s0 is used. If the key being used to sign with is a \s-1DSA\s0 key then
|
|
this option has no effect: \s-1SHA1\s0 is always used with \s-1DSA\s0 keys.
|
|
.SH "DISPLAY OPTIONS"
|
|
Note: the \fB\-alias\fR and \fB\-purpose\fR options are also display options
|
|
but are described in the \fBTRUST OPTIONS\fR section.
|
|
.Ip "\fB\-text\fR" 4
|
|
prints out the certificate in text form. Full details are output including the
|
|
public key, signature algorithms, issuer and subject names, serial number
|
|
any extensions present and any trust settings.
|
|
.Ip "\fB\-noout\fR" 4
|
|
this option prevents output of the encoded version of the request.
|
|
.Ip "\fB\-modulus\fR" 4
|
|
this option prints out the value of the modulus of the public key
|
|
contained in the certificate.
|
|
.Ip "\fB\-serial\fR" 4
|
|
outputs the certificate serial number.
|
|
.Ip "\fB\-hash\fR" 4
|
|
outputs the \*(L"hash\*(R" of the certificate subject name. This is used in OpenSSL to
|
|
form an index to allow certificates in a directory to be looked up by subject
|
|
name.
|
|
.Ip "\fB\-subject\fR" 4
|
|
outputs the subject name.
|
|
.Ip "\fB\-issuer\fR" 4
|
|
outputs the issuer name.
|
|
.Ip "\fB\-startdate\fR" 4
|
|
prints out the start date of the certificate, that is the notBefore date.
|
|
.Ip "\fB\-enddate\fR" 4
|
|
prints out the expiry date of the certificate, that is the notAfter date.
|
|
.Ip "\fB\-dates\fR" 4
|
|
prints out the start and expiry dates of a certificate.
|
|
.Ip "\fB\-fingerprint\fR" 4
|
|
prints out the digest of the \s-1DER\s0 encoded version of the whole certificate.
|
|
.Ip "\fB\-C\fR" 4
|
|
this outputs the certificate in the form of a C source file.
|
|
.SH "TRUST SETTINGS"
|
|
Please note these options are currently experimental and may well change.
|
|
.PP
|
|
A \fBtrusted certificate\fR is an ordinary certificate which has several
|
|
additional pieces of information attached to it such as the permitted
|
|
and prohibited uses of the certificate and an \*(L"alias\*(R".
|
|
.PP
|
|
Normally when a certificate is being verified at least one certificate
|
|
must be \*(L"trusted\*(R". By default a trusted certificate must be stored
|
|
locally and must be a root CA: any certificate chain ending in this CA
|
|
is then usable for any purpose.
|
|
.PP
|
|
Trust settings currently are only used with a root CA. They allow a finer
|
|
control over the purposes the root CA can be used for. For example a CA
|
|
may be trusted for SSL client but not SSL server use.
|
|
.PP
|
|
See the description of the \fBverify\fR utility for more information on the
|
|
meaning of trust settings.
|
|
.PP
|
|
Future versions of OpenSSL will recognize trust settings on any
|
|
certificate: not just root CAs.
|
|
.Ip "\fB\-trustout\fR" 4
|
|
this causes \fBx509\fR to output a \fBtrusted\fR certificate. An ordinary
|
|
or trusted certificate can be input but by default an ordinary
|
|
certificate is output and any trust settings are discarded. With the
|
|
\fB\-trustout\fR option a trusted certificate is output. A trusted
|
|
certificate is automatically output if any trust settings are modified.
|
|
.Ip "\fB\-setalias arg\fR" 4
|
|
sets the alias of the certificate. This will allow the certificate
|
|
to be referred to using a nickname for example \*(L"Steve's Certificate\*(R".
|
|
.Ip "\fB\-alias\fR" 4
|
|
outputs the certificate alias, if any.
|
|
.Ip "\fB\-clrtrust\fR" 4
|
|
clears all the permitted or trusted uses of the certificate.
|
|
.Ip "\fB\-clrreject\fR" 4
|
|
clears all the prohibited or rejected uses of the certificate.
|
|
.Ip "\fB\-addtrust arg\fR" 4
|
|
adds a trusted certificate use. Any object name can be used here
|
|
but currently only \fBclientAuth\fR (\s-1SSL\s0 client use), \fBserverAuth\fR
|
|
(\s-1SSL\s0 server use) and \fBemailProtection\fR (S/\s-1MIME\s0 email) are used.
|
|
Other OpenSSL applications may define additional uses.
|
|
.Ip "\fB\-addreject arg\fR" 4
|
|
adds a prohibited use. It accepts the same values as the \fB\-addtrust\fR
|
|
option.
|
|
.Ip "\fB\-purpose\fR" 4
|
|
this option performs tests on the certificate extensions and outputs
|
|
the results. For a more complete description see the \fB\s-1CERTIFICATE\s0
|
|
\s-1EXTENSIONS\s0\fR section.
|
|
.SH "SIGNING OPTIONS"
|
|
The \fBx509\fR utility can be used to sign certificates and requests: it
|
|
can thus behave like a \*(L"mini CA\*(R".
|
|
.Ip "\fB\-signkey filename\fR" 4
|
|
this option causes the input file to be self signed using the supplied
|
|
private key.
|
|
.Sp
|
|
If the input file is a certificate it sets the issuer name to the
|
|
subject name (i.e. makes it self signed) changes the public key to the
|
|
supplied value and changes the start and end dates. The start date is
|
|
set to the current time and the end date is set to a value determined
|
|
by the \fB\-days\fR option. Any certificate extensions are retained unless
|
|
the \fB\-clrext\fR option is supplied.
|
|
.Sp
|
|
If the input is a certificate request then a self signed certificate
|
|
is created using the supplied private key using the subject name in
|
|
the request.
|
|
.Ip "\fB\-clrext\fR" 4
|
|
delete any extensions from a certificate. This option is used when a
|
|
certificate is being created from another certificate (for example with
|
|
the \fB\-signkey\fR or the \fB\-\s-1CA\s0\fR options). Normally all extensions are
|
|
retained.
|
|
.Ip "\fB\-keyform \s-1PEM\s0|\s-1DER\s0\fR" 4
|
|
specifies the format (\s-1DER\s0 or \s-1PEM\s0) of the private key file used in the
|
|
\fB\-signkey\fR option.
|
|
.Ip "\fB\-days arg\fR" 4
|
|
specifies the number of days to make a certificate valid for. The default
|
|
is 30 days.
|
|
.Ip "\fB\-x509toreq\fR" 4
|
|
converts a certificate into a certificate request. The \fB\-signkey\fR option
|
|
is used to pass the required private key.
|
|
.Ip "\fB\-req\fR" 4
|
|
by default a certificate is expected on input. With this option a
|
|
certificate request is expected instead.
|
|
.Ip "\fB\-\s-1CA\s0 filename\fR" 4
|
|
specifies the \s-1CA\s0 certificate to be used for signing. When this option is
|
|
present \fBx509\fR behaves like a \*(L"mini \s-1CA\s0\*(R". The input file is signed by this
|
|
\s-1CA\s0 using this option: that is its issuer name is set to the subject name
|
|
of the \s-1CA\s0 and it is digitally signed using the CAs private key.
|
|
.Sp
|
|
This option is normally combined with the \fB\-req\fR option. Without the
|
|
\fB\-req\fR option the input is a certificate which must be self signed.
|
|
.Ip "\fB\-CAkey filename\fR" 4
|
|
sets the \s-1CA\s0 private key to sign a certificate with. If this option is
|
|
not specified then it is assumed that the \s-1CA\s0 private key is present in
|
|
the \s-1CA\s0 certificate file.
|
|
.Ip "\fB\-CAserial filename\fR" 4
|
|
sets the \s-1CA\s0 serial number file to use.
|
|
.Sp
|
|
When the \fB\-\s-1CA\s0\fR option is used to sign a certificate it uses a serial
|
|
number specified in a file. This file consist of one line containing
|
|
an even number of hex digits with the serial number to use. After each
|
|
use the serial number is incremented and written out to the file again.
|
|
.Sp
|
|
The default filename consists of the \s-1CA\s0 certificate file base name with
|
|
\*(L".srl\*(R" appended. For example if the \s-1CA\s0 certificate file is called
|
|
\*(L"mycacert.pem\*(R" it expects to find a serial number file called \*(L"mycacert.srl\*(R".
|
|
.Ip "\fB\-CAcreateserial filename\fR" 4
|
|
with this option the \s-1CA\s0 serial number file is created if it does not exist:
|
|
it will contain the serial number \*(L"02\*(R" and the certificate being signed will
|
|
have the 1 as its serial number. Normally if the \fB\-\s-1CA\s0\fR option is specified
|
|
and the serial number file does not exist it is an error.
|
|
.Ip "\fB\-extfile filename\fR" 4
|
|
file containing certificate extensions to use. If not specified then
|
|
no extensions are added to the certificate.
|
|
.Ip "\fB\-extensions section\fR" 4
|
|
the section to add certificate extensions from. If this option is not
|
|
specified then the extensions should either be contained in the unnamed
|
|
(default) section or the default section should contain a variable called
|
|
\*(L"extensions\*(R" which contains the section to use.
|
|
.SH "EXAMPLES"
|
|
Note: in these examples the \*(L'\e\*(R' means the example should be all on one
|
|
line.
|
|
.PP
|
|
Display the contents of a certificate:
|
|
.PP
|
|
.Vb 1
|
|
\& openssl x509 -in cert.pem -noout -text
|
|
.Ve
|
|
Display the certificate serial number:
|
|
.PP
|
|
.Vb 1
|
|
\& openssl x509 -in cert.pem -noout -serial
|
|
.Ve
|
|
Display the certificate MD5 fingerprint:
|
|
.PP
|
|
.Vb 1
|
|
\& openssl x509 -in cert.pem -noout -fingerprint
|
|
.Ve
|
|
Display the certificate SHA1 fingerprint:
|
|
.PP
|
|
.Vb 1
|
|
\& openssl x509 -sha1 -in cert.pem -noout -fingerprint
|
|
.Ve
|
|
Convert a certificate from PEM to DER format:
|
|
.PP
|
|
.Vb 1
|
|
\& openssl x509 -in cert.pem -inform PEM -out cert.der -outform DER
|
|
.Ve
|
|
Convert a certificate to a certificate request:
|
|
.PP
|
|
.Vb 1
|
|
\& openssl x509 -x509toreq -in cert.pem -out req.pem -signkey key.pem
|
|
.Ve
|
|
Convert a certificate request into a self signed certificate using
|
|
extensions for a CA:
|
|
.PP
|
|
.Vb 2
|
|
\& openssl x509 -req -in careq.pem -config openssl.cnf -extensions v3_ca \e
|
|
\& -signkey key.pem -out cacert.pem
|
|
.Ve
|
|
Sign a certificate request using the CA certificate above and add user
|
|
certificate extensions:
|
|
.PP
|
|
.Vb 2
|
|
\& openssl x509 -req -in req.pem -config openssl.cnf -extensions v3_usr \e
|
|
\& -CA cacert.pem -CAkey key.pem -CAcreateserial
|
|
.Ve
|
|
Set a certificate to be trusted for SSL client use and change set its alias to
|
|
\*(L"Steve's Class 1 CA\*(R"
|
|
.PP
|
|
.Vb 2
|
|
\& openssl x509 -in cert.pem -addtrust sslclient \e
|
|
\& -alias "Steve's Class 1 CA" -out trust.pem
|
|
.Ve
|
|
.SH "NOTES"
|
|
The PEM format uses the header and footer lines:
|
|
.PP
|
|
.Vb 2
|
|
\& -----BEGIN CERTIFICATE----
|
|
\& -----END CERTIFICATE----
|
|
.Ve
|
|
it will also handle files containing:
|
|
.PP
|
|
.Vb 2
|
|
\& -----BEGIN X509 CERTIFICATE----
|
|
\& -----END X509 CERTIFICATE----
|
|
.Ve
|
|
Trusted certificates have the lines
|
|
.PP
|
|
.Vb 2
|
|
\& -----BEGIN TRUSTED CERTIFICATE----
|
|
\& -----END TRUSTED CERTIFICATE----
|
|
.Ve
|
|
The \fB\-fingerprint\fR option takes the digest of the DER encoded certificate.
|
|
This is commonly called a \*(L"fingerprint\*(R". Because of the nature of message
|
|
digests the fingerprint of a certificate is unique to that certificate and
|
|
two certificates with the same fingerprint can be considered to be the same.
|
|
.PP
|
|
The Netscape fingerprint uses MD5 whereas MSIE uses SHA1.
|
|
.SH "CERTIFICATE EXTENSIONS"
|
|
The \fB\-purpose\fR option checks the certificate extensions and determines
|
|
what the certificate can be used for. The actual checks done are rather
|
|
complex and include various hacks and workarounds to handle broken
|
|
certificates and software.
|
|
.PP
|
|
The same code is used when verifying untrusted certificates in chains
|
|
so this section is useful if a chain is rejected by the verify code.
|
|
.PP
|
|
The basicConstraints extension CA flag is used to determine whether the
|
|
certificate can be used as a CA. If the CA flag is true then it is a CA,
|
|
if the CA flag is false then it is not a CA. \fBAll\fR CAs should have the
|
|
CA flag set to true.
|
|
.PP
|
|
If the basicConstraints extension is absent then the certificate is
|
|
considered to be a \*(L"possible CA\*(R" other extensions are checked according
|
|
to the intended use of the certificate. A warning is given in this case
|
|
because the certificate should really not be regarded as a CA: however
|
|
it is allowed to be a CA to work around some broken software.
|
|
.PP
|
|
If the certificate is a V1 certificate (and thus has no extensions) and
|
|
it is self signed it is also assumed to be a CA but a warning is again
|
|
given: this is to work around the problem of Verisign roots which are V1
|
|
self signed certificates.
|
|
.PP
|
|
If the keyUsage extension is present then additional restraints are
|
|
made on the uses of the certificate. A CA certificate \fBmust\fR have the
|
|
keyCertSign bit set if the keyUsage extension is present.
|
|
.PP
|
|
The extended key usage extension places additional restrictions on the
|
|
certificate uses. If this extension is present (whether critical or not)
|
|
the key can only be used for the purposes specified.
|
|
.PP
|
|
A complete description of each test is given below. The comments about
|
|
basicConstraints and keyUsage and V1 certificates above apply to \fBall\fR
|
|
CA certificates.
|
|
.Ip "\fB\s-1SSL\s0 Client\fR" 4
|
|
The extended key usage extension must be absent or include the \*(L"web client
|
|
authentication\*(R" \s-1OID\s0. keyUsage must be absent or it must have the
|
|
digitalSignature bit set. Netscape certificate type must be absent or it must
|
|
have the \s-1SSL\s0 client bit set.
|
|
.Ip "\fB\s-1SSL\s0 Client \s-1CA\s0\fR" 4
|
|
The extended key usage extension must be absent or include the \*(L"web client
|
|
authentication\*(R" \s-1OID\s0. Netscape certificate type must be absent or it must have
|
|
the \s-1SSL\s0 \s-1CA\s0 bit set: this is used as a work around if the basicConstraints
|
|
extension is absent.
|
|
.Ip "\fB\s-1SSL\s0 Server\fR" 4
|
|
The extended key usage extension must be absent or include the \*(L"web server
|
|
authentication\*(R" and/or one of the \s-1SGC\s0 OIDs. keyUsage must be absent or it
|
|
must have the digitalSignature, the keyEncipherment set or both bits set.
|
|
Netscape certificate type must be absent or have the \s-1SSL\s0 server bit set.
|
|
.Ip "\fB\s-1SSL\s0 Server \s-1CA\s0\fR" 4
|
|
The extended key usage extension must be absent or include the \*(L"web server
|
|
authentication\*(R" and/or one of the \s-1SGC\s0 OIDs. Netscape certificate type must
|
|
be absent or the \s-1SSL\s0 \s-1CA\s0 bit must be set: this is used as a work around if the
|
|
basicConstraints extension is absent.
|
|
.Ip "\fBNetscape \s-1SSL\s0 Server\fR" 4
|
|
For Netscape \s-1SSL\s0 clients to connect to an \s-1SSL\s0 server it must have the
|
|
keyEncipherment bit set if the keyUsage extension is present. This isn't
|
|
always valid because some cipher suites use the key for digital signing.
|
|
Otherwise it is the same as a normal \s-1SSL\s0 server.
|
|
.Ip "\fBCommon S/\s-1MIME\s0 Client Tests\fR" 4
|
|
The extended key usage extension must be absent or include the \*(L"email
|
|
protection\*(R" \s-1OID\s0. Netscape certificate type must be absent or should have the
|
|
S/\s-1MIME\s0 bit set. If the S/\s-1MIME\s0 bit is not set in netscape certificate type
|
|
then the \s-1SSL\s0 client bit is tolerated as an alternative but a warning is shown:
|
|
this is because some Verisign certificates don't set the S/\s-1MIME\s0 bit.
|
|
.Ip "\fBS/\s-1MIME\s0 Signing\fR" 4
|
|
In addition to the common S/\s-1MIME\s0 client tests the digitalSignature bit must
|
|
be set if the keyUsage extension is present.
|
|
.Ip "\fBS/\s-1MIME\s0 Encryption\fR" 4
|
|
In addition to the common S/\s-1MIME\s0 tests the keyEncipherment bit must be set
|
|
if the keyUsage extension is present.
|
|
.Ip "\fBS/\s-1MIME\s0 \s-1CA\s0\fR" 4
|
|
The extended key usage extension must be absent or include the \*(L"email
|
|
protection\*(R" \s-1OID\s0. Netscape certificate type must be absent or must have the
|
|
S/\s-1MIME\s0 \s-1CA\s0 bit set: this is used as a work around if the basicConstraints
|
|
extension is absent.
|
|
.Ip "\fB\s-1CRL\s0 Signing\fR" 4
|
|
The keyUsage extension must be absent or it must have the \s-1CRL\s0 signing bit
|
|
set.
|
|
.Ip "\fB\s-1CRL\s0 Signing \s-1CA\s0\fR" 4
|
|
The normal \s-1CA\s0 tests apply. Except in this case the basicConstraints extension
|
|
must be present.
|
|
.SH "BUGS"
|
|
The way DNs are printed is in a \*(L"historical SSLeay\*(R" format which doesn't
|
|
follow any published standard. It should follow some standard like RFC2253
|
|
or RFC1779 with options to make the stuff more readable.
|
|
.PP
|
|
Extensions in certificates are not transferred to certificate requests and
|
|
vice versa.
|
|
.PP
|
|
It is possible to produce invalid certificates or requests by specifying the
|
|
wrong private key or using inconsistent options in some cases: these should
|
|
be checked.
|
|
.PP
|
|
There should be options to explicitly set such things as start and end
|
|
dates rather than an offset from the current time.
|
|
.PP
|
|
The code to implement the verify behaviour described in the \fBTRUST SETTINGS\fR
|
|
is currently being developed. It thus describes the intended behavior rather
|
|
than the current behaviour. It is hoped that it will represent reality in
|
|
OpenSSL 0.9.5 and later.
|
|
.SH "SEE ALSO"
|
|
the \fIreq(1)|req(1)\fR manpage, the \fIca(1)|ca(1)\fR manpage, the \fIgenrsa(1)|genrsa(1)\fR manpage,
|
|
the \fIgendsa(1)|gendsa(1)\fR manpage, the \fIverify(1)|verify(1)\fR manpage
|
|
|
|
.rn }` ''
|
|
.IX Title "X509 1"
|
|
.IX Name "x509 - Certificate display and signing utility"
|
|
|
|
.IX Header "NAME"
|
|
|
|
.IX Header "SYNOPSIS"
|
|
|
|
.IX Header "DESCRIPTION"
|
|
|
|
.IX Header "INPUT, OUTPUT AND GENERAL PURPOSE OPTIONS"
|
|
|
|
.IX Item "\fB\-inform \s-1DER\s0|\s-1PEM\s0|\s-1NET\s0\fR"
|
|
|
|
.IX Item "\fB\-outform \s-1DER\s0|\s-1PEM\s0|\s-1NET\s0\fR"
|
|
|
|
.IX Item "\fB\-in filename\fR"
|
|
|
|
.IX Item "\fB\-out filename\fR"
|
|
|
|
.IX Item "\fB\-md2|\-md5|\-sha1|\-mdc2\fR"
|
|
|
|
.IX Header "DISPLAY OPTIONS"
|
|
|
|
.IX Item "\fB\-text\fR"
|
|
|
|
.IX Item "\fB\-noout\fR"
|
|
|
|
.IX Item "\fB\-modulus\fR"
|
|
|
|
.IX Item "\fB\-serial\fR"
|
|
|
|
.IX Item "\fB\-hash\fR"
|
|
|
|
.IX Item "\fB\-subject\fR"
|
|
|
|
.IX Item "\fB\-issuer\fR"
|
|
|
|
.IX Item "\fB\-startdate\fR"
|
|
|
|
.IX Item "\fB\-enddate\fR"
|
|
|
|
.IX Item "\fB\-dates\fR"
|
|
|
|
.IX Item "\fB\-fingerprint\fR"
|
|
|
|
.IX Item "\fB\-C\fR"
|
|
|
|
.IX Header "TRUST SETTINGS"
|
|
|
|
.IX Item "\fB\-trustout\fR"
|
|
|
|
.IX Item "\fB\-setalias arg\fR"
|
|
|
|
.IX Item "\fB\-alias\fR"
|
|
|
|
.IX Item "\fB\-clrtrust\fR"
|
|
|
|
.IX Item "\fB\-clrreject\fR"
|
|
|
|
.IX Item "\fB\-addtrust arg\fR"
|
|
|
|
.IX Item "\fB\-addreject arg\fR"
|
|
|
|
.IX Item "\fB\-purpose\fR"
|
|
|
|
.IX Header "SIGNING OPTIONS"
|
|
|
|
.IX Item "\fB\-signkey filename\fR"
|
|
|
|
.IX Item "\fB\-clrext\fR"
|
|
|
|
.IX Item "\fB\-keyform \s-1PEM\s0|\s-1DER\s0\fR"
|
|
|
|
.IX Item "\fB\-days arg\fR"
|
|
|
|
.IX Item "\fB\-x509toreq\fR"
|
|
|
|
.IX Item "\fB\-req\fR"
|
|
|
|
.IX Item "\fB\-\s-1CA\s0 filename\fR"
|
|
|
|
.IX Item "\fB\-CAkey filename\fR"
|
|
|
|
.IX Item "\fB\-CAserial filename\fR"
|
|
|
|
.IX Item "\fB\-CAcreateserial filename\fR"
|
|
|
|
.IX Item "\fB\-extfile filename\fR"
|
|
|
|
.IX Item "\fB\-extensions section\fR"
|
|
|
|
.IX Header "EXAMPLES"
|
|
|
|
.IX Header "NOTES"
|
|
|
|
.IX Header "CERTIFICATE EXTENSIONS"
|
|
|
|
.IX Item "\fB\s-1SSL\s0 Client\fR"
|
|
|
|
.IX Item "\fB\s-1SSL\s0 Client \s-1CA\s0\fR"
|
|
|
|
.IX Item "\fB\s-1SSL\s0 Server\fR"
|
|
|
|
.IX Item "\fB\s-1SSL\s0 Server \s-1CA\s0\fR"
|
|
|
|
.IX Item "\fBNetscape \s-1SSL\s0 Server\fR"
|
|
|
|
.IX Item "\fBCommon S/\s-1MIME\s0 Client Tests\fR"
|
|
|
|
.IX Item "\fBS/\s-1MIME\s0 Signing\fR"
|
|
|
|
.IX Item "\fBS/\s-1MIME\s0 Encryption\fR"
|
|
|
|
.IX Item "\fBS/\s-1MIME\s0 \s-1CA\s0\fR"
|
|
|
|
.IX Item "\fB\s-1CRL\s0 Signing\fR"
|
|
|
|
.IX Item "\fB\s-1CRL\s0 Signing \s-1CA\s0\fR"
|
|
|
|
.IX Header "BUGS"
|
|
|
|
.IX Header "SEE ALSO"
|
|
|