6aa192d8a8e6796d4bd9c6707e36e5f22b10de89
[openssl.git] / doc / man3 / OCSP_resp_find_status.pod
1 =pod
2
3 =head1 NAME
4
5 OCSP_resp_get0_certs,
6 OCSP_resp_get0_signer,
7 OCSP_resp_get0_id,
8 OCSP_resp_get1_id,
9 OCSP_resp_get0_produced_at,
10 OCSP_resp_get0_tbs_sigalg,
11 OCSP_resp_get0_respdata,
12 OCSP_resp_find_status, OCSP_resp_count, OCSP_resp_get0, OCSP_resp_find,
13 OCSP_single_get0_status, OCSP_check_validity,
14 OCSP_basic_verify
15 - OCSP response utility functions
16
17 =head1 SYNOPSIS
18
19  #include <openssl/ocsp.h>
20
21  int OCSP_resp_find_status(OCSP_BASICRESP *bs, OCSP_CERTID *id, int *status,
22                            int *reason,
23                            ASN1_GENERALIZEDTIME **revtime,
24                            ASN1_GENERALIZEDTIME **thisupd,
25                            ASN1_GENERALIZEDTIME **nextupd);
26
27  int OCSP_resp_count(OCSP_BASICRESP *bs);
28  OCSP_SINGLERESP *OCSP_resp_get0(OCSP_BASICRESP *bs, int idx);
29  int OCSP_resp_find(OCSP_BASICRESP *bs, OCSP_CERTID *id, int last);
30  int OCSP_single_get0_status(OCSP_SINGLERESP *single, int *reason,
31                              ASN1_GENERALIZEDTIME **revtime,
32                              ASN1_GENERALIZEDTIME **thisupd,
33                              ASN1_GENERALIZEDTIME **nextupd);
34
35  const ASN1_GENERALIZEDTIME *OCSP_resp_get0_produced_at(
36                              const OCSP_BASICRESP* single);
37
38  const X509_ALGOR *OCSP_resp_get0_tbs_sigalg(const OCSP_BASICRESP *bs);
39  const OCSP_RESPDATA *OCSP_resp_get0_respdata(const OCSP_BASICRESP *bs);
40  const STACK_OF(X509) *OCSP_resp_get0_certs(const OCSP_BASICRESP *bs);
41
42  int OCSP_resp_get0_signer(OCSP_BASICRESP *bs, X509 **signer,
43                            STACK_OF(X509) *extra_certs);
44
45  int OCSP_resp_get0_id(const OCSP_BASICRESP *bs,
46                        const ASN1_OCTET_STRING **pid,
47                        const X509_NAME **pname);
48  int OCSP_resp_get1_id(const OCSP_BASICRESP *bs,
49                        ASN1_OCTET_STRING **pid,
50                        X509_NAME **pname);
51
52  int OCSP_check_validity(ASN1_GENERALIZEDTIME *thisupd,
53                          ASN1_GENERALIZEDTIME *nextupd,
54                          long sec, long maxsec);
55
56  int OCSP_basic_verify(OCSP_BASICRESP *bs, STACK_OF(X509) *certs,
57                       X509_STORE *st, unsigned long flags);
58
59 =head1 DESCRIPTION
60
61 OCSP_resp_find_status() searches B<bs> for an OCSP response for B<id>. If it is
62 successful the fields of the response are returned in B<*status>, B<*reason>,
63 B<*revtime>, B<*thisupd> and B<*nextupd>.  The B<*status> value will be one of
64 B<V_OCSP_CERTSTATUS_GOOD>, B<V_OCSP_CERTSTATUS_REVOKED> or
65 B<V_OCSP_CERTSTATUS_UNKNOWN>. The B<*reason> and B<*revtime> fields are only
66 set if the status is B<V_OCSP_CERTSTATUS_REVOKED>. If set the B<*reason> field
67 will be set to the revocation reason which will be one of
68 B<OCSP_REVOKED_STATUS_NOSTATUS>, B<OCSP_REVOKED_STATUS_UNSPECIFIED>,
69 B<OCSP_REVOKED_STATUS_KEYCOMPROMISE>, B<OCSP_REVOKED_STATUS_CACOMPROMISE>,
70 B<OCSP_REVOKED_STATUS_AFFILIATIONCHANGED>, B<OCSP_REVOKED_STATUS_SUPERSEDED>,
71 B<OCSP_REVOKED_STATUS_CESSATIONOFOPERATION>,
72 B<OCSP_REVOKED_STATUS_CERTIFICATEHOLD> or B<OCSP_REVOKED_STATUS_REMOVEFROMCRL>.
73
74 OCSP_resp_count() returns the number of B<OCSP_SINGLERESP> structures in B<bs>.
75
76 OCSP_resp_get0() returns the B<OCSP_SINGLERESP> structure in B<bs>
77 corresponding to index B<idx>. Where B<idx> runs from 0 to
78 OCSP_resp_count(bs) - 1.
79
80 OCSP_resp_find() searches B<bs> for B<id> and returns the index of the first
81 matching entry after B<last> or starting from the beginning if B<last> is -1.
82
83 OCSP_single_get0_status() extracts the fields of B<single> in B<*reason>,
84 B<*revtime>, B<*thisupd> and B<*nextupd>.
85
86 OCSP_resp_get0_produced_at() extracts the B<producedAt> field from the
87 single response B<bs>.
88
89 OCSP_resp_get0_tbs_sigalg() returns the B<signatureAlgorithm> from B<bs>.
90
91 OCSP_resp_get0_respdata() returns the B<tbsResponseData> from B<bs>.
92
93 OCSP_resp_get0_certs() returns any certificates included in B<bs>.
94
95 OCSP_resp_get0_signer() attempts to retrieve the certificate that directly
96 signed B<bs>.  The OCSP protocol does not require that this certificate
97 is included in the B<certs> field of the response, so additional certificates
98 can be supplied in B<extra_certs> if the certificates that may have
99 signed the response are known via some out-of-band mechanism.
100
101 OCSP_resp_get0_id() gets the responder id of B<bs>. If the responder ID is
102 a name then <*pname> is set to the name and B<*pid> is set to NULL. If the
103 responder ID is by key ID then B<*pid> is set to the key ID and B<*pname>
104 is set to NULL. OCSP_resp_get1_id() leaves ownership of B<*pid> and B<*pname>
105 with the caller, who is responsible for freeing them. Both functions return 1
106 in case of success and 0 in case of failure. If OCSP_resp_get1_id() returns 0,
107 no freeing of the results is necessary.
108
109 OCSP_check_validity() checks the validity of B<thisupd> and B<nextupd> values
110 which will be typically obtained from OCSP_resp_find_status() or
111 OCSP_single_get0_status(). If B<sec> is non-zero it indicates how many seconds
112 leeway should be allowed in the check. If B<maxsec> is positive it indicates
113 the maximum age of B<thisupd> in seconds.
114
115 OCSP_basic_verify() checks that the basic response message B<bs> is correctly
116 signed and that the signer certificate can be validated. It takes B<st> as
117 the trusted store and B<certs> as a set of untrusted intermediate certificates.
118 The function first tries to find the signer certificate of the response
119 in <certs>. It also searches the certificates the responder may have included
120 in B<bs> unless the B<flags> contain B<OCSP_NOINTERN>.
121 It fails if the signer certificate cannot be found.
122 Next, the function checks the signature of B<bs> and fails on error
123 unless the B<flags> contain B<OCSP_NOSIGS>. Then the function already returns
124 success if the B<flags> contain B<OCSP_NOVERIFY> or if the signer certificate
125 was found in B<certs> and the B<flags> contain B<OCSP_TRUSTOTHER>.
126 Otherwise the function continues by validating the signer certificate.
127 To this end, all certificates in B<cert> and in B<bs> are considered as
128 untrusted certificates for the construction of the validation path for the
129 signer certificate unless the B<OCSP_NOCHAIN> flag is set. After successful path
130 validation the function returns success if the B<OCSP_NOCHECKS> flag is set.
131 Otherwise it verifies that the signer certificate meets the OCSP issuer
132 criteria including potential delegation. If this does not succeed and the
133 B<flags> do not contain B<OCSP_NOEXPLICIT> the function checks for explicit
134 trust for OCSP signing in the root CA certificate.
135
136 =head1 RETURN VALUES
137
138 OCSP_resp_find_status() returns 1 if B<id> is found in B<bs> and 0 otherwise.
139
140 OCSP_resp_count() returns the total number of B<OCSP_SINGLERESP> fields in
141 B<bs>.
142
143 OCSP_resp_get0() returns a pointer to an B<OCSP_SINGLERESP> structure or
144 B<NULL> if B<idx> is out of range.
145
146 OCSP_resp_find() returns the index of B<id> in B<bs> (which may be 0) or -1 if
147 B<id> was not found.
148
149 OCSP_single_get0_status() returns the status of B<single> or -1 if an error
150 occurred.
151
152 OCSP_resp_get0_signer() returns 1 if the signing certificate was located,
153 or 0 on error.
154
155 OCSP_basic_verify() returns 1 on success, 0 on error, or -1 on fatal error such
156 as malloc failure.
157
158 =head1 NOTES
159
160 Applications will typically call OCSP_resp_find_status() using the certificate
161 ID of interest and then check its validity using OCSP_check_validity(). They
162 can then take appropriate action based on the status of the certificate.
163
164 An OCSP response for a certificate contains B<thisUpdate> and B<nextUpdate>
165 fields. Normally the current time should be between these two values. To
166 account for clock skew the B<maxsec> field can be set to non-zero in
167 OCSP_check_validity(). Some responders do not set the B<nextUpdate> field, this
168 would otherwise mean an ancient response would be considered valid: the
169 B<maxsec> parameter to OCSP_check_validity() can be used to limit the permitted
170 age of responses.
171
172 The values written to B<*revtime>, B<*thisupd> and B<*nextupd> by
173 OCSP_resp_find_status() and OCSP_single_get0_status() are internal pointers
174 which B<MUST NOT> be freed up by the calling application. Any or all of these
175 parameters can be set to NULL if their value is not required.
176
177 =head1 SEE ALSO
178
179 L<crypto(7)>,
180 L<OCSP_cert_to_id(3)>,
181 L<OCSP_request_add1_nonce(3)>,
182 L<OCSP_REQUEST_new(3)>,
183 L<OCSP_response_status(3)>,
184 L<OCSP_sendreq_new(3)>
185
186 =head1 COPYRIGHT
187
188 Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved.
189
190 Licensed under the OpenSSL license (the "License").  You may not use
191 this file except in compliance with the License.  You can obtain a copy
192 in the file LICENSE in the source distribution or at
193 L<https://www.openssl.org/source/license.html>.
194
195 =cut