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