xref: /onnv-gate/usr/src/common/openssl/doc/apps/ocsp.pod (revision 2175:b0b2f052a486)
1*2175Sjp161948=pod
2*2175Sjp161948
3*2175Sjp161948=head1 NAME
4*2175Sjp161948
5*2175Sjp161948ocsp - Online Certificate Status Protocol utility
6*2175Sjp161948
7*2175Sjp161948=head1 SYNOPSIS
8*2175Sjp161948
9*2175Sjp161948B<openssl> B<ocsp>
10*2175Sjp161948[B<-out file>]
11*2175Sjp161948[B<-issuer file>]
12*2175Sjp161948[B<-cert file>]
13*2175Sjp161948[B<-serial n>]
14*2175Sjp161948[B<-signer file>]
15*2175Sjp161948[B<-signkey file>]
16*2175Sjp161948[B<-sign_other file>]
17*2175Sjp161948[B<-no_certs>]
18*2175Sjp161948[B<-req_text>]
19*2175Sjp161948[B<-resp_text>]
20*2175Sjp161948[B<-text>]
21*2175Sjp161948[B<-reqout file>]
22*2175Sjp161948[B<-respout file>]
23*2175Sjp161948[B<-reqin file>]
24*2175Sjp161948[B<-respin file>]
25*2175Sjp161948[B<-nonce>]
26*2175Sjp161948[B<-no_nonce>]
27*2175Sjp161948[B<-url URL>]
28*2175Sjp161948[B<-host host:n>]
29*2175Sjp161948[B<-path>]
30*2175Sjp161948[B<-CApath dir>]
31*2175Sjp161948[B<-CAfile file>]
32*2175Sjp161948[B<-VAfile file>]
33*2175Sjp161948[B<-validity_period n>]
34*2175Sjp161948[B<-status_age n>]
35*2175Sjp161948[B<-noverify>]
36*2175Sjp161948[B<-verify_other file>]
37*2175Sjp161948[B<-trust_other>]
38*2175Sjp161948[B<-no_intern>]
39*2175Sjp161948[B<-no_signature_verify>]
40*2175Sjp161948[B<-no_cert_verify>]
41*2175Sjp161948[B<-no_chain>]
42*2175Sjp161948[B<-no_cert_checks>]
43*2175Sjp161948[B<-port num>]
44*2175Sjp161948[B<-index file>]
45*2175Sjp161948[B<-CA file>]
46*2175Sjp161948[B<-rsigner file>]
47*2175Sjp161948[B<-rkey file>]
48*2175Sjp161948[B<-rother file>]
49*2175Sjp161948[B<-resp_no_certs>]
50*2175Sjp161948[B<-nmin n>]
51*2175Sjp161948[B<-ndays n>]
52*2175Sjp161948[B<-resp_key_id>]
53*2175Sjp161948[B<-nrequest n>]
54*2175Sjp161948
55*2175Sjp161948=head1 DESCRIPTION
56*2175Sjp161948
57*2175Sjp161948The Online Certificate Status Protocol (OCSP) enables applications to
58*2175Sjp161948determine the (revocation) state of an identified certificate (RFC 2560).
59*2175Sjp161948
60*2175Sjp161948The B<ocsp> command performs many common OCSP tasks. It can be used
61*2175Sjp161948to print out requests and responses, create requests and send queries
62*2175Sjp161948to an OCSP responder and behave like a mini OCSP server itself.
63*2175Sjp161948
64*2175Sjp161948=head1 OCSP CLIENT OPTIONS
65*2175Sjp161948
66*2175Sjp161948=over 4
67*2175Sjp161948
68*2175Sjp161948=item B<-out filename>
69*2175Sjp161948
70*2175Sjp161948specify output filename, default is standard output.
71*2175Sjp161948
72*2175Sjp161948=item B<-issuer filename>
73*2175Sjp161948
74*2175Sjp161948This specifies the current issuer certificate. This option can be used
75*2175Sjp161948multiple times. The certificate specified in B<filename> must be in
76*2175Sjp161948PEM format.
77*2175Sjp161948
78*2175Sjp161948=item B<-cert filename>
79*2175Sjp161948
80*2175Sjp161948Add the certificate B<filename> to the request. The issuer certificate
81*2175Sjp161948is taken from the previous B<issuer> option, or an error occurs if no
82*2175Sjp161948issuer certificate is specified.
83*2175Sjp161948
84*2175Sjp161948=item B<-serial num>
85*2175Sjp161948
86*2175Sjp161948Same as the B<cert> option except the certificate with serial number
87*2175Sjp161948B<num> is added to the request. The serial number is interpreted as a
88*2175Sjp161948decimal integer unless preceded by B<0x>. Negative integers can also
89*2175Sjp161948be specified by preceding the value by a B<-> sign.
90*2175Sjp161948
91*2175Sjp161948=item B<-signer filename>, B<-signkey filename>
92*2175Sjp161948
93*2175Sjp161948Sign the OCSP request using the certificate specified in the B<signer>
94*2175Sjp161948option and the private key specified by the B<signkey> option. If
95*2175Sjp161948the B<signkey> option is not present then the private key is read
96*2175Sjp161948from the same file as the certificate. If neither option is specified then
97*2175Sjp161948the OCSP request is not signed.
98*2175Sjp161948
99*2175Sjp161948=item B<-sign_other filename>
100*2175Sjp161948
101*2175Sjp161948Additional certificates to include in the signed request.
102*2175Sjp161948
103*2175Sjp161948=item B<-nonce>, B<-no_nonce>
104*2175Sjp161948
105*2175Sjp161948Add an OCSP nonce extension to a request or disable OCSP nonce addition.
106*2175Sjp161948Normally if an OCSP request is input using the B<respin> option no
107*2175Sjp161948nonce is added: using the B<nonce> option will force addition of a nonce.
108*2175Sjp161948If an OCSP request is being created (using B<cert> and B<serial> options)
109*2175Sjp161948a nonce is automatically added specifying B<no_nonce> overrides this.
110*2175Sjp161948
111*2175Sjp161948=item B<-req_text>, B<-resp_text>, B<-text>
112*2175Sjp161948
113*2175Sjp161948print out the text form of the OCSP request, response or both respectively.
114*2175Sjp161948
115*2175Sjp161948=item B<-reqout file>, B<-respout file>
116*2175Sjp161948
117*2175Sjp161948write out the DER encoded certificate request or response to B<file>.
118*2175Sjp161948
119*2175Sjp161948=item B<-reqin file>, B<-respin file>
120*2175Sjp161948
121*2175Sjp161948read OCSP request or response file from B<file>. These option are ignored
122*2175Sjp161948if OCSP request or response creation is implied by other options (for example
123*2175Sjp161948with B<serial>, B<cert> and B<host> options).
124*2175Sjp161948
125*2175Sjp161948=item B<-url responder_url>
126*2175Sjp161948
127*2175Sjp161948specify the responder URL. Both HTTP and HTTPS (SSL/TLS) URLs can be specified.
128*2175Sjp161948
129*2175Sjp161948=item B<-host hostname:port>, B<-path pathname>
130*2175Sjp161948
131*2175Sjp161948if the B<host> option is present then the OCSP request is sent to the host
132*2175Sjp161948B<hostname> on port B<port>. B<path> specifies the HTTP path name to use
133*2175Sjp161948or "/" by default.
134*2175Sjp161948
135*2175Sjp161948=item B<-CAfile file>, B<-CApath pathname>
136*2175Sjp161948
137*2175Sjp161948file or pathname containing trusted CA certificates. These are used to verify
138*2175Sjp161948the signature on the OCSP response.
139*2175Sjp161948
140*2175Sjp161948=item B<-verify_other file>
141*2175Sjp161948
142*2175Sjp161948file containing additional certificates to search when attempting to locate
143*2175Sjp161948the OCSP response signing certificate. Some responders omit the actual signer's
144*2175Sjp161948certificate from the response: this option can be used to supply the necessary
145*2175Sjp161948certificate in such cases.
146*2175Sjp161948
147*2175Sjp161948=item B<-trust_other>
148*2175Sjp161948
149*2175Sjp161948the certificates specified by the B<-verify_certs> option should be explicitly
150*2175Sjp161948trusted and no additional checks will be performed on them. This is useful
151*2175Sjp161948when the complete responder certificate chain is not available or trusting a
152*2175Sjp161948root CA is not appropriate.
153*2175Sjp161948
154*2175Sjp161948=item B<-VAfile file>
155*2175Sjp161948
156*2175Sjp161948file containing explicitly trusted responder certificates. Equivalent to the
157*2175Sjp161948B<-verify_certs> and B<-trust_other> options.
158*2175Sjp161948
159*2175Sjp161948=item B<-noverify>
160*2175Sjp161948
161*2175Sjp161948don't attempt to verify the OCSP response signature or the nonce values. This
162*2175Sjp161948option will normally only be used for debugging since it disables all verification
163*2175Sjp161948of the responders certificate.
164*2175Sjp161948
165*2175Sjp161948=item B<-no_intern>
166*2175Sjp161948
167*2175Sjp161948ignore certificates contained in the OCSP response when searching for the
168*2175Sjp161948signers certificate. With this option the signers certificate must be specified
169*2175Sjp161948with either the B<-verify_certs> or B<-VAfile> options.
170*2175Sjp161948
171*2175Sjp161948=item B<-no_signature_verify>
172*2175Sjp161948
173*2175Sjp161948don't check the signature on the OCSP response. Since this option tolerates invalid
174*2175Sjp161948signatures on OCSP responses it will normally only be used for testing purposes.
175*2175Sjp161948
176*2175Sjp161948=item B<-no_cert_verify>
177*2175Sjp161948
178*2175Sjp161948don't verify the OCSP response signers certificate at all. Since this option allows
179*2175Sjp161948the OCSP response to be signed by any certificate it should only be used for
180*2175Sjp161948testing purposes.
181*2175Sjp161948
182*2175Sjp161948=item B<-no_chain>
183*2175Sjp161948
184*2175Sjp161948do not use certificates in the response as additional untrusted CA
185*2175Sjp161948certificates.
186*2175Sjp161948
187*2175Sjp161948=item B<-no_cert_checks>
188*2175Sjp161948
189*2175Sjp161948don't perform any additional checks on the OCSP response signers certificate.
190*2175Sjp161948That is do not make any checks to see if the signers certificate is authorised
191*2175Sjp161948to provide the necessary status information: as a result this option should
192*2175Sjp161948only be used for testing purposes.
193*2175Sjp161948
194*2175Sjp161948=item B<-validity_period nsec>, B<-status_age age>
195*2175Sjp161948
196*2175Sjp161948these options specify the range of times, in seconds, which will be tolerated
197*2175Sjp161948in an OCSP response. Each certificate status response includes a B<notBefore> time and
198*2175Sjp161948an optional B<notAfter> time. The current time should fall between these two values, but
199*2175Sjp161948the interval between the two times may be only a few seconds. In practice the OCSP
200*2175Sjp161948responder and clients clocks may not be precisely synchronised and so such a check
201*2175Sjp161948may fail. To avoid this the B<-validity_period> option can be used to specify an
202*2175Sjp161948acceptable error range in seconds, the default value is 5 minutes.
203*2175Sjp161948
204*2175Sjp161948If the B<notAfter> time is omitted from a response then this means that new status
205*2175Sjp161948information is immediately available. In this case the age of the B<notBefore> field
206*2175Sjp161948is checked to see it is not older than B<age> seconds old. By default this additional
207*2175Sjp161948check is not performed.
208*2175Sjp161948
209*2175Sjp161948=back
210*2175Sjp161948
211*2175Sjp161948=head1 OCSP SERVER OPTIONS
212*2175Sjp161948
213*2175Sjp161948=over 4
214*2175Sjp161948
215*2175Sjp161948=item B<-index indexfile>
216*2175Sjp161948
217*2175Sjp161948B<indexfile> is a text index file in B<ca> format containing certificate revocation
218*2175Sjp161948information.
219*2175Sjp161948
220*2175Sjp161948If the B<index> option is specified the B<ocsp> utility is in responder mode, otherwise
221*2175Sjp161948it is in client mode. The request(s) the responder processes can be either specified on
222*2175Sjp161948the command line (using B<issuer> and B<serial> options), supplied in a file (using the
223*2175Sjp161948B<respin> option) or via external OCSP clients (if B<port> or B<url> is specified).
224*2175Sjp161948
225*2175Sjp161948If the B<index> option is present then the B<CA> and B<rsigner> options must also be
226*2175Sjp161948present.
227*2175Sjp161948
228*2175Sjp161948=item B<-CA file>
229*2175Sjp161948
230*2175Sjp161948CA certificate corresponding to the revocation information in B<indexfile>.
231*2175Sjp161948
232*2175Sjp161948=item B<-rsigner file>
233*2175Sjp161948
234*2175Sjp161948The certificate to sign OCSP responses with.
235*2175Sjp161948
236*2175Sjp161948=item B<-rother file>
237*2175Sjp161948
238*2175Sjp161948Additional certificates to include in the OCSP response.
239*2175Sjp161948
240*2175Sjp161948=item B<-resp_no_certs>
241*2175Sjp161948
242*2175Sjp161948Don't include any certificates in the OCSP response.
243*2175Sjp161948
244*2175Sjp161948=item B<-resp_key_id>
245*2175Sjp161948
246*2175Sjp161948Identify the signer certificate using the key ID, default is to use the subject name.
247*2175Sjp161948
248*2175Sjp161948=item B<-rkey file>
249*2175Sjp161948
250*2175Sjp161948The private key to sign OCSP responses with: if not present the file specified in the
251*2175Sjp161948B<rsigner> option is used.
252*2175Sjp161948
253*2175Sjp161948=item B<-port portnum>
254*2175Sjp161948
255*2175Sjp161948Port to listen for OCSP requests on. The port may also be specified using the B<url>
256*2175Sjp161948option.
257*2175Sjp161948
258*2175Sjp161948=item B<-nrequest number>
259*2175Sjp161948
260*2175Sjp161948The OCSP server will exit after receiving B<number> requests, default unlimited.
261*2175Sjp161948
262*2175Sjp161948=item B<-nmin minutes>, B<-ndays days>
263*2175Sjp161948
264*2175Sjp161948Number of minutes or days when fresh revocation information is available: used in the
265*2175Sjp161948B<nextUpdate> field. If neither option is present then the B<nextUpdate> field is
266*2175Sjp161948omitted meaning fresh revocation information is immediately available.
267*2175Sjp161948
268*2175Sjp161948=back
269*2175Sjp161948
270*2175Sjp161948=head1 OCSP Response verification.
271*2175Sjp161948
272*2175Sjp161948OCSP Response follows the rules specified in RFC2560.
273*2175Sjp161948
274*2175Sjp161948Initially the OCSP responder certificate is located and the signature on
275*2175Sjp161948the OCSP request checked using the responder certificate's public key.
276*2175Sjp161948
277*2175Sjp161948Then a normal certificate verify is performed on the OCSP responder certificate
278*2175Sjp161948building up a certificate chain in the process. The locations of the trusted
279*2175Sjp161948certificates used to build the chain can be specified by the B<CAfile>
280*2175Sjp161948and B<CApath> options or they will be looked for in the standard OpenSSL
281*2175Sjp161948certificates directory.
282*2175Sjp161948
283*2175Sjp161948If the initial verify fails then the OCSP verify process halts with an
284*2175Sjp161948error.
285*2175Sjp161948
286*2175Sjp161948Otherwise the issuing CA certificate in the request is compared to the OCSP
287*2175Sjp161948responder certificate: if there is a match then the OCSP verify succeeds.
288*2175Sjp161948
289*2175Sjp161948Otherwise the OCSP responder certificate's CA is checked against the issuing
290*2175Sjp161948CA certificate in the request. If there is a match and the OCSPSigning
291*2175Sjp161948extended key usage is present in the OCSP responder certificate then the
292*2175Sjp161948OCSP verify succeeds.
293*2175Sjp161948
294*2175Sjp161948Otherwise the root CA of the OCSP responders CA is checked to see if it
295*2175Sjp161948is trusted for OCSP signing. If it is the OCSP verify succeeds.
296*2175Sjp161948
297*2175Sjp161948If none of these checks is successful then the OCSP verify fails.
298*2175Sjp161948
299*2175Sjp161948What this effectively means if that if the OCSP responder certificate is
300*2175Sjp161948authorised directly by the CA it is issuing revocation information about
301*2175Sjp161948(and it is correctly configured) then verification will succeed.
302*2175Sjp161948
303*2175Sjp161948If the OCSP responder is a "global responder" which can give details about
304*2175Sjp161948multiple CAs and has its own separate certificate chain then its root
305*2175Sjp161948CA can be trusted for OCSP signing. For example:
306*2175Sjp161948
307*2175Sjp161948 openssl x509 -in ocspCA.pem -addtrust OCSPSigning -out trustedCA.pem
308*2175Sjp161948
309*2175Sjp161948Alternatively the responder certificate itself can be explicitly trusted
310*2175Sjp161948with the B<-VAfile> option.
311*2175Sjp161948
312*2175Sjp161948=head1 NOTES
313*2175Sjp161948
314*2175Sjp161948As noted, most of the verify options are for testing or debugging purposes.
315*2175Sjp161948Normally only the B<-CApath>, B<-CAfile> and (if the responder is a 'global
316*2175Sjp161948VA') B<-VAfile> options need to be used.
317*2175Sjp161948
318*2175Sjp161948The OCSP server is only useful for test and demonstration purposes: it is
319*2175Sjp161948not really usable as a full OCSP responder. It contains only a very
320*2175Sjp161948simple HTTP request handling and can only handle the POST form of OCSP
321*2175Sjp161948queries. It also handles requests serially meaning it cannot respond to
322*2175Sjp161948new requests until it has processed the current one. The text index file
323*2175Sjp161948format of revocation is also inefficient for large quantities of revocation
324*2175Sjp161948data.
325*2175Sjp161948
326*2175Sjp161948It is possible to run the B<ocsp> application in responder mode via a CGI
327*2175Sjp161948script using the B<respin> and B<respout> options.
328*2175Sjp161948
329*2175Sjp161948=head1 EXAMPLES
330*2175Sjp161948
331*2175Sjp161948Create an OCSP request and write it to a file:
332*2175Sjp161948
333*2175Sjp161948 openssl ocsp -issuer issuer.pem -cert c1.pem -cert c2.pem -reqout req.der
334*2175Sjp161948
335*2175Sjp161948Send a query to an OCSP responder with URL http://ocsp.myhost.com/ save the
336*2175Sjp161948response to a file and print it out in text form
337*2175Sjp161948
338*2175Sjp161948 openssl ocsp -issuer issuer.pem -cert c1.pem -cert c2.pem \
339*2175Sjp161948     -url http://ocsp.myhost.com/ -resp_text -respout resp.der
340*2175Sjp161948
341*2175Sjp161948Read in an OCSP response and print out text form:
342*2175Sjp161948
343*2175Sjp161948 openssl ocsp -respin resp.der -text
344*2175Sjp161948
345*2175Sjp161948OCSP server on port 8888 using a standard B<ca> configuration, and a separate
346*2175Sjp161948responder certificate. All requests and responses are printed to a file.
347*2175Sjp161948
348*2175Sjp161948 openssl ocsp -index demoCA/index.txt -port 8888 -rsigner rcert.pem -CA demoCA/cacert.pem
349*2175Sjp161948	-text -out log.txt
350*2175Sjp161948
351*2175Sjp161948As above but exit after processing one request:
352*2175Sjp161948
353*2175Sjp161948 openssl ocsp -index demoCA/index.txt -port 8888 -rsigner rcert.pem -CA demoCA/cacert.pem
354*2175Sjp161948     -nrequest 1
355*2175Sjp161948
356*2175Sjp161948Query status information using internally generated request:
357*2175Sjp161948
358*2175Sjp161948 openssl ocsp -index demoCA/index.txt -rsigner rcert.pem -CA demoCA/cacert.pem
359*2175Sjp161948     -issuer demoCA/cacert.pem -serial 1
360*2175Sjp161948
361*2175Sjp161948Query status information using request read from a file, write response to a
362*2175Sjp161948second file.
363*2175Sjp161948
364*2175Sjp161948 openssl ocsp -index demoCA/index.txt -rsigner rcert.pem -CA demoCA/cacert.pem
365*2175Sjp161948     -reqin req.der -respout resp.der
366