1 | =pod
|
---|
2 |
|
---|
3 | =head1 NAME
|
---|
4 |
|
---|
5 | OSSL_CMP_CTX_new,
|
---|
6 | OSSL_CMP_CTX_free,
|
---|
7 | OSSL_CMP_CTX_reinit,
|
---|
8 | OSSL_CMP_CTX_set_option,
|
---|
9 | OSSL_CMP_CTX_get_option,
|
---|
10 | OSSL_CMP_CTX_set_log_cb,
|
---|
11 | OSSL_CMP_CTX_set_log_verbosity,
|
---|
12 | OSSL_CMP_CTX_print_errors,
|
---|
13 | OSSL_CMP_CTX_set1_serverPath,
|
---|
14 | OSSL_CMP_CTX_set1_server,
|
---|
15 | OSSL_CMP_CTX_set_serverPort,
|
---|
16 | OSSL_CMP_CTX_set1_proxy,
|
---|
17 | OSSL_CMP_CTX_set1_no_proxy,
|
---|
18 | OSSL_CMP_CTX_set_http_cb,
|
---|
19 | OSSL_CMP_CTX_set_http_cb_arg,
|
---|
20 | OSSL_CMP_CTX_get_http_cb_arg,
|
---|
21 | OSSL_CMP_transfer_cb_t,
|
---|
22 | OSSL_CMP_CTX_set_transfer_cb,
|
---|
23 | OSSL_CMP_CTX_set_transfer_cb_arg,
|
---|
24 | OSSL_CMP_CTX_get_transfer_cb_arg,
|
---|
25 | OSSL_CMP_CTX_set1_srvCert,
|
---|
26 | OSSL_CMP_CTX_set1_expected_sender,
|
---|
27 | OSSL_CMP_CTX_set0_trustedStore,
|
---|
28 | OSSL_CMP_CTX_get0_trustedStore,
|
---|
29 | OSSL_CMP_CTX_set1_untrusted,
|
---|
30 | OSSL_CMP_CTX_get0_untrusted,
|
---|
31 | OSSL_CMP_CTX_set1_cert,
|
---|
32 | OSSL_CMP_CTX_build_cert_chain,
|
---|
33 | OSSL_CMP_CTX_set1_pkey,
|
---|
34 | OSSL_CMP_CTX_set1_referenceValue,
|
---|
35 | OSSL_CMP_CTX_set1_secretValue,
|
---|
36 | OSSL_CMP_CTX_set1_recipient,
|
---|
37 | OSSL_CMP_CTX_push0_geninfo_ITAV,
|
---|
38 | OSSL_CMP_CTX_reset_geninfo_ITAVs,
|
---|
39 | OSSL_CMP_CTX_set1_extraCertsOut,
|
---|
40 | OSSL_CMP_CTX_set0_newPkey,
|
---|
41 | OSSL_CMP_CTX_get0_newPkey,
|
---|
42 | OSSL_CMP_CTX_set1_issuer,
|
---|
43 | OSSL_CMP_CTX_set1_subjectName,
|
---|
44 | OSSL_CMP_CTX_push1_subjectAltName,
|
---|
45 | OSSL_CMP_CTX_set0_reqExtensions,
|
---|
46 | OSSL_CMP_CTX_reqExtensions_have_SAN,
|
---|
47 | OSSL_CMP_CTX_push0_policy,
|
---|
48 | OSSL_CMP_CTX_set1_oldCert,
|
---|
49 | OSSL_CMP_CTX_set1_p10CSR,
|
---|
50 | OSSL_CMP_CTX_push0_genm_ITAV,
|
---|
51 | OSSL_CMP_certConf_cb_t,
|
---|
52 | OSSL_CMP_certConf_cb,
|
---|
53 | OSSL_CMP_CTX_set_certConf_cb,
|
---|
54 | OSSL_CMP_CTX_set_certConf_cb_arg,
|
---|
55 | OSSL_CMP_CTX_get_certConf_cb_arg,
|
---|
56 | OSSL_CMP_CTX_get_status,
|
---|
57 | OSSL_CMP_CTX_get0_statusString,
|
---|
58 | OSSL_CMP_CTX_get_failInfoCode,
|
---|
59 | OSSL_CMP_CTX_get0_newCert,
|
---|
60 | OSSL_CMP_CTX_get1_newChain,
|
---|
61 | OSSL_CMP_CTX_get1_caPubs,
|
---|
62 | OSSL_CMP_CTX_get1_extraCertsIn,
|
---|
63 | OSSL_CMP_CTX_set1_transactionID,
|
---|
64 | OSSL_CMP_CTX_set1_senderNonce
|
---|
65 | - functions for managing the CMP client context data structure
|
---|
66 |
|
---|
67 | =head1 SYNOPSIS
|
---|
68 |
|
---|
69 | #include <openssl/cmp.h>
|
---|
70 |
|
---|
71 | OSSL_CMP_CTX *OSSL_CMP_CTX_new(OSSL_LIB_CTX *libctx, const char *propq);
|
---|
72 | void OSSL_CMP_CTX_free(OSSL_CMP_CTX *ctx);
|
---|
73 | int OSSL_CMP_CTX_reinit(OSSL_CMP_CTX *ctx);
|
---|
74 | int OSSL_CMP_CTX_set_option(OSSL_CMP_CTX *ctx, int opt, int val);
|
---|
75 | int OSSL_CMP_CTX_get_option(const OSSL_CMP_CTX *ctx, int opt);
|
---|
76 |
|
---|
77 | /* logging and error reporting: */
|
---|
78 | int OSSL_CMP_CTX_set_log_cb(OSSL_CMP_CTX *ctx, OSSL_CMP_log_cb_t cb);
|
---|
79 | #define OSSL_CMP_CTX_set_log_verbosity(ctx, level)
|
---|
80 | void OSSL_CMP_CTX_print_errors(const OSSL_CMP_CTX *ctx);
|
---|
81 |
|
---|
82 | /* message transfer: */
|
---|
83 | int OSSL_CMP_CTX_set1_serverPath(OSSL_CMP_CTX *ctx, const char *path);
|
---|
84 | int OSSL_CMP_CTX_set1_server(OSSL_CMP_CTX *ctx, const char *address);
|
---|
85 | int OSSL_CMP_CTX_set_serverPort(OSSL_CMP_CTX *ctx, int port);
|
---|
86 | int OSSL_CMP_CTX_set1_proxy(OSSL_CMP_CTX *ctx, const char *name);
|
---|
87 | int OSSL_CMP_CTX_set1_no_proxy(OSSL_CMP_CTX *ctx, const char *names);
|
---|
88 | int OSSL_CMP_CTX_set_http_cb(OSSL_CMP_CTX *ctx, HTTP_bio_cb_t cb);
|
---|
89 | int OSSL_CMP_CTX_set_http_cb_arg(OSSL_CMP_CTX *ctx, void *arg);
|
---|
90 | void *OSSL_CMP_CTX_get_http_cb_arg(const OSSL_CMP_CTX *ctx);
|
---|
91 | typedef OSSL_CMP_MSG *(*OSSL_CMP_transfer_cb_t)(OSSL_CMP_CTX *ctx,
|
---|
92 | const OSSL_CMP_MSG *req);
|
---|
93 | int OSSL_CMP_CTX_set_transfer_cb(OSSL_CMP_CTX *ctx,
|
---|
94 | OSSL_CMP_transfer_cb_t cb);
|
---|
95 | int OSSL_CMP_CTX_set_transfer_cb_arg(OSSL_CMP_CTX *ctx, void *arg);
|
---|
96 | void *OSSL_CMP_CTX_get_transfer_cb_arg(const OSSL_CMP_CTX *ctx);
|
---|
97 |
|
---|
98 | /* server authentication: */
|
---|
99 | int OSSL_CMP_CTX_set1_srvCert(OSSL_CMP_CTX *ctx, X509 *cert);
|
---|
100 | int OSSL_CMP_CTX_set1_expected_sender(OSSL_CMP_CTX *ctx,
|
---|
101 | const X509_NAME *name);
|
---|
102 | int OSSL_CMP_CTX_set0_trustedStore(OSSL_CMP_CTX *ctx, X509_STORE *store);
|
---|
103 | X509_STORE *OSSL_CMP_CTX_get0_trustedStore(const OSSL_CMP_CTX *ctx);
|
---|
104 | int OSSL_CMP_CTX_set1_untrusted(OSSL_CMP_CTX *ctx, STACK_OF(X509) *certs);
|
---|
105 | STACK_OF(X509) *OSSL_CMP_CTX_get0_untrusted(const OSSL_CMP_CTX *ctx);
|
---|
106 |
|
---|
107 | /* client authentication: */
|
---|
108 | int OSSL_CMP_CTX_set1_cert(OSSL_CMP_CTX *ctx, X509 *cert);
|
---|
109 | int OSSL_CMP_CTX_build_cert_chain(OSSL_CMP_CTX *ctx, X509_STORE *own_trusted,
|
---|
110 | STACK_OF(X509) *candidates);
|
---|
111 | int OSSL_CMP_CTX_set1_pkey(OSSL_CMP_CTX *ctx, EVP_PKEY *pkey);
|
---|
112 | int OSSL_CMP_CTX_set1_referenceValue(OSSL_CMP_CTX *ctx,
|
---|
113 | const unsigned char *ref, int len);
|
---|
114 | int OSSL_CMP_CTX_set1_secretValue(OSSL_CMP_CTX *ctx,
|
---|
115 | const unsigned char *sec, int len);
|
---|
116 |
|
---|
117 | /* CMP message header and extra certificates: */
|
---|
118 | int OSSL_CMP_CTX_set1_recipient(OSSL_CMP_CTX *ctx, const X509_NAME *name);
|
---|
119 | int OSSL_CMP_CTX_push0_geninfo_ITAV(OSSL_CMP_CTX *ctx, OSSL_CMP_ITAV *itav);
|
---|
120 | int OSSL_CMP_CTX_reset_geninfo_ITAVs(OSSL_CMP_CTX *ctx);
|
---|
121 | int OSSL_CMP_CTX_set1_extraCertsOut(OSSL_CMP_CTX *ctx,
|
---|
122 | STACK_OF(X509) *extraCertsOut);
|
---|
123 |
|
---|
124 | /* certificate template: */
|
---|
125 | int OSSL_CMP_CTX_set0_newPkey(OSSL_CMP_CTX *ctx, int priv, EVP_PKEY *pkey);
|
---|
126 | EVP_PKEY *OSSL_CMP_CTX_get0_newPkey(const OSSL_CMP_CTX *ctx, int priv);
|
---|
127 | int OSSL_CMP_CTX_set1_issuer(OSSL_CMP_CTX *ctx, const X509_NAME *name);
|
---|
128 | int OSSL_CMP_CTX_set1_subjectName(OSSL_CMP_CTX *ctx, const X509_NAME *name);
|
---|
129 | int OSSL_CMP_CTX_push1_subjectAltName(OSSL_CMP_CTX *ctx,
|
---|
130 | const GENERAL_NAME *name);
|
---|
131 | int OSSL_CMP_CTX_set0_reqExtensions(OSSL_CMP_CTX *ctx, X509_EXTENSIONS *exts);
|
---|
132 | int OSSL_CMP_CTX_reqExtensions_have_SAN(OSSL_CMP_CTX *ctx);
|
---|
133 | int OSSL_CMP_CTX_push0_policy(OSSL_CMP_CTX *ctx, POLICYINFO *pinfo);
|
---|
134 | int OSSL_CMP_CTX_set1_oldCert(OSSL_CMP_CTX *ctx, X509 *cert);
|
---|
135 | int OSSL_CMP_CTX_set1_p10CSR(OSSL_CMP_CTX *ctx, const X509_REQ *csr);
|
---|
136 |
|
---|
137 | /* misc body contents: */
|
---|
138 | int OSSL_CMP_CTX_push0_genm_ITAV(OSSL_CMP_CTX *ctx, OSSL_CMP_ITAV *itav);
|
---|
139 |
|
---|
140 | /* certificate confirmation: */
|
---|
141 | typedef int (*OSSL_CMP_certConf_cb_t)(OSSL_CMP_CTX *ctx, X509 *cert,
|
---|
142 | int fail_info, const char **txt);
|
---|
143 | int OSSL_CMP_certConf_cb(OSSL_CMP_CTX *ctx, X509 *cert, int fail_info,
|
---|
144 | const char **text);
|
---|
145 | int OSSL_CMP_CTX_set_certConf_cb(OSSL_CMP_CTX *ctx, OSSL_CMP_certConf_cb_t cb);
|
---|
146 | int OSSL_CMP_CTX_set_certConf_cb_arg(OSSL_CMP_CTX *ctx, void *arg);
|
---|
147 | void *OSSL_CMP_CTX_get_certConf_cb_arg(const OSSL_CMP_CTX *ctx);
|
---|
148 |
|
---|
149 | /* result fetching: */
|
---|
150 | int OSSL_CMP_CTX_get_status(const OSSL_CMP_CTX *ctx);
|
---|
151 | OSSL_CMP_PKIFREETEXT *OSSL_CMP_CTX_get0_statusString(const OSSL_CMP_CTX *ctx);
|
---|
152 | int OSSL_CMP_CTX_get_failInfoCode(const OSSL_CMP_CTX *ctx);
|
---|
153 |
|
---|
154 | X509 *OSSL_CMP_CTX_get0_newCert(const OSSL_CMP_CTX *ctx);
|
---|
155 | STACK_OF(X509) *OSSL_CMP_CTX_get1_newChain(const OSSL_CMP_CTX *ctx);
|
---|
156 | STACK_OF(X509) *OSSL_CMP_CTX_get1_caPubs(const OSSL_CMP_CTX *ctx);
|
---|
157 | STACK_OF(X509) *OSSL_CMP_CTX_get1_extraCertsIn(const OSSL_CMP_CTX *ctx);
|
---|
158 |
|
---|
159 | /* for testing and debugging purposes: */
|
---|
160 | int OSSL_CMP_CTX_set1_transactionID(OSSL_CMP_CTX *ctx,
|
---|
161 | const ASN1_OCTET_STRING *id);
|
---|
162 | int OSSL_CMP_CTX_set1_senderNonce(OSSL_CMP_CTX *ctx,
|
---|
163 | const ASN1_OCTET_STRING *nonce);
|
---|
164 |
|
---|
165 | =head1 DESCRIPTION
|
---|
166 |
|
---|
167 | This is the context API for using CMP (Certificate Management Protocol) with
|
---|
168 | OpenSSL.
|
---|
169 |
|
---|
170 | OSSL_CMP_CTX_new() allocates an B<OSSL_CMP_CTX> structure associated with
|
---|
171 | the library context I<libctx> and property query string I<propq>,
|
---|
172 | both of which may be NULL to select the defaults.
|
---|
173 | It initializes the remaining fields to their default values - for instance,
|
---|
174 | the logging verbosity is set to OSSL_CMP_LOG_INFO,
|
---|
175 | the message timeout is set to 120 seconds,
|
---|
176 | and the proof-of-possession method is set to OSSL_CRMF_POPO_SIGNATURE.
|
---|
177 |
|
---|
178 | OSSL_CMP_CTX_free() deallocates an OSSL_CMP_CTX structure.
|
---|
179 |
|
---|
180 | OSSL_CMP_CTX_reinit() prepares the given I<ctx> for a further transaction by
|
---|
181 | clearing the internal CMP transaction (aka session) status, PKIStatusInfo,
|
---|
182 | and any previous results (newCert, newChain, caPubs, and extraCertsIn)
|
---|
183 | from the last executed transaction.
|
---|
184 | It also clears any ITAVs that were added by OSSL_CMP_CTX_push0_genm_ITAV().
|
---|
185 | All other field values (i.e., CMP options) are retained for potential re-use.
|
---|
186 |
|
---|
187 | OSSL_CMP_CTX_set_option() sets the given value for the given option
|
---|
188 | (e.g., OSSL_CMP_OPT_IMPLICIT_CONFIRM) in the given OSSL_CMP_CTX structure.
|
---|
189 |
|
---|
190 | The following options can be set:
|
---|
191 |
|
---|
192 | =over 4
|
---|
193 |
|
---|
194 | =item B<OSSL_CMP_OPT_LOG_VERBOSITY>
|
---|
195 |
|
---|
196 | The level of severity needed for actually outputting log messages
|
---|
197 | due to errors, warnings, general info, debugging, etc.
|
---|
198 | Default is OSSL_CMP_LOG_INFO. See also L<OSSL_CMP_log_open(3)>.
|
---|
199 |
|
---|
200 | =item B<OSSL_CMP_OPT_KEEP_ALIVE>
|
---|
201 |
|
---|
202 | If the given value is 0 then HTTP connections are not kept open
|
---|
203 | after receiving a response, which is the default behavior for HTTP 1.0.
|
---|
204 | If the value is 1 or 2 then persistent connections are requested.
|
---|
205 | If the value is 2 then persistent connections are required,
|
---|
206 | i.e., in case the server does not grant them an error occurs.
|
---|
207 | The default value is 1: prefer to keep the connection open.
|
---|
208 |
|
---|
209 | =item B<OSSL_CMP_OPT_MSG_TIMEOUT>
|
---|
210 |
|
---|
211 | Number of seconds a CMP request-response message round trip
|
---|
212 | is allowed to take before a timeout error is returned.
|
---|
213 | A value <= 0 means no limitation (waiting indefinitely).
|
---|
214 | Default is to use the B<OSSL_CMP_OPT_TOTAL_TIMEOUT> setting.
|
---|
215 |
|
---|
216 | =item B<OSSL_CMP_OPT_TOTAL_TIMEOUT>
|
---|
217 |
|
---|
218 | Maximum total number of seconds a transaction may take,
|
---|
219 | including polling etc.
|
---|
220 | A value <= 0 means no limitation (waiting indefinitely).
|
---|
221 | Default is 0.
|
---|
222 |
|
---|
223 | =item B<OSSL_CMP_OPT_VALIDITY_DAYS>
|
---|
224 |
|
---|
225 | Number of days new certificates are asked to be valid for.
|
---|
226 |
|
---|
227 | =item B<OSSL_CMP_OPT_SUBJECTALTNAME_NODEFAULT>
|
---|
228 |
|
---|
229 | Do not take default Subject Alternative Names
|
---|
230 | from the reference certificate.
|
---|
231 |
|
---|
232 | =item B<OSSL_CMP_OPT_SUBJECTALTNAME_CRITICAL>
|
---|
233 |
|
---|
234 | Demand that the given Subject Alternative Names are flagged as critical.
|
---|
235 |
|
---|
236 | =item B<OSSL_CMP_OPT_POLICIES_CRITICAL>
|
---|
237 |
|
---|
238 | Demand that the given policies are flagged as critical.
|
---|
239 |
|
---|
240 | =item B<OSSL_CMP_OPT_POPO_METHOD>
|
---|
241 |
|
---|
242 | Select the proof of possession method to use. Possible values are:
|
---|
243 |
|
---|
244 | OSSL_CRMF_POPO_NONE - ProofOfPossession field omitted
|
---|
245 | OSSL_CRMF_POPO_RAVERIFIED - assert that the RA has already
|
---|
246 | verified the PoPo
|
---|
247 | OSSL_CRMF_POPO_SIGNATURE - sign a value with private key,
|
---|
248 | which is the default.
|
---|
249 | OSSL_CRMF_POPO_KEYENC - decrypt the encrypted certificate
|
---|
250 | ("indirect method")
|
---|
251 |
|
---|
252 | Note that a signature-based POPO can only be produced if a private key
|
---|
253 | is provided as the newPkey or client's pkey component of the CMP context.
|
---|
254 |
|
---|
255 | =item B<OSSL_CMP_OPT_DIGEST_ALGNID>
|
---|
256 |
|
---|
257 | The NID of the digest algorithm to be used in RFC 4210's MSG_SIG_ALG
|
---|
258 | for signature-based message protection and Proof-of-Possession (POPO).
|
---|
259 | Default is SHA256.
|
---|
260 |
|
---|
261 | =item B<OSSL_CMP_OPT_OWF_ALGNID>
|
---|
262 | The NID of the digest algorithm to be used as one-way function (OWF)
|
---|
263 | in RFC 4210's MSG_MAC_ALG for PBM-based message protection.
|
---|
264 | Default is SHA256.
|
---|
265 |
|
---|
266 | =item B<OSSL_CMP_OPT_MAC_ALGNID>
|
---|
267 | The NID of the MAC algorithm to be used in RFC 4210's MSG_MAC_ALG
|
---|
268 | for PBM-based message protection.
|
---|
269 | Default is HMAC-SHA1 as per RFC 4210.
|
---|
270 |
|
---|
271 | =item B<OSSL_CMP_OPT_REVOCATION_REASON>
|
---|
272 |
|
---|
273 | The reason code to be included in a Revocation Request (RR);
|
---|
274 | values: 0..10 (RFC 5210, 5.3.1) or -1 for none, which is the default.
|
---|
275 |
|
---|
276 | =item B<OSSL_CMP_OPT_IMPLICIT_CONFIRM>
|
---|
277 |
|
---|
278 | Request server to enable implicit confirm mode, where the client
|
---|
279 | does not need to send confirmation upon receiving the
|
---|
280 | certificate. If the server does not enable implicit confirmation
|
---|
281 | in the return message, then confirmation is sent anyway.
|
---|
282 |
|
---|
283 | =item B<OSSL_CMP_OPT_DISABLE_CONFIRM>
|
---|
284 |
|
---|
285 | Do not confirm enrolled certificates, to cope with broken servers
|
---|
286 | not supporting implicit confirmation correctly.
|
---|
287 | B<WARNING:> This setting leads to unspecified behavior and it is meant
|
---|
288 | exclusively to allow interoperability with server implementations violating
|
---|
289 | RFC 4210.
|
---|
290 |
|
---|
291 | =item B<OSSL_CMP_OPT_UNPROTECTED_SEND>
|
---|
292 |
|
---|
293 | Send request or response messages without CMP-level protection.
|
---|
294 |
|
---|
295 | =item B<OSSL_CMP_OPT_UNPROTECTED_ERRORS>
|
---|
296 |
|
---|
297 | Accept unprotected error responses which are either explicitly
|
---|
298 | unprotected or where protection verification failed. Applies to regular
|
---|
299 | error messages as well as certificate responses (IP/CP/KUP) and
|
---|
300 | revocation responses (RP) with rejection.
|
---|
301 | B<WARNING:> This setting leads to unspecified behavior and it is meant
|
---|
302 | exclusively to allow interoperability with server implementations violating
|
---|
303 | RFC 4210.
|
---|
304 |
|
---|
305 | =item B<OSSL_CMP_OPT_IGNORE_KEYUSAGE>
|
---|
306 |
|
---|
307 | Ignore key usage restrictions in the signer's certificate when
|
---|
308 | validating signature-based protection in received CMP messages.
|
---|
309 | Else, 'digitalSignature' must be allowed by CMP signer certificates.
|
---|
310 |
|
---|
311 | =item B<OSSL_CMP_OPT_PERMIT_TA_IN_EXTRACERTS_FOR_IR>
|
---|
312 |
|
---|
313 | Allow retrieving a trust anchor from extraCerts and using that
|
---|
314 | to validate the certificate chain of an IP message.
|
---|
315 |
|
---|
316 | =back
|
---|
317 |
|
---|
318 | OSSL_CMP_CTX_get_option() reads the current value of the given option
|
---|
319 | (e.g., OSSL_CMP_OPT_IMPLICIT_CONFIRM) from the given OSSL_CMP_CTX structure.
|
---|
320 |
|
---|
321 | OSSL_CMP_CTX_set_log_cb() sets in I<ctx> the callback function I<cb>
|
---|
322 | for handling error queue entries and logging messages.
|
---|
323 | When I<cb> is NULL errors are printed to STDERR (if available, else ignored)
|
---|
324 | any log messages are ignored.
|
---|
325 | Alternatively, L<OSSL_CMP_log_open(3)> may be used to direct logging to STDOUT.
|
---|
326 |
|
---|
327 | OSSL_CMP_CTX_set_log_verbosity() is a macro setting the
|
---|
328 | OSSL_CMP_OPT_LOG_VERBOSITY context option to the given level.
|
---|
329 |
|
---|
330 | OSSL_CMP_CTX_print_errors() outputs any entries in the OpenSSL error queue. It
|
---|
331 | is similar to L<ERR_print_errors_cb(3)> but uses the CMP log callback function
|
---|
332 | if set in the I<ctx> for uniformity with CMP logging if given. Otherwise it uses
|
---|
333 | L<ERR_print_errors(3)> to print to STDERR (unless OPENSSL_NO_STDIO is defined).
|
---|
334 |
|
---|
335 | OSSL_CMP_CTX_set1_serverPath() sets the HTTP path of the CMP server on the host,
|
---|
336 | also known as "CMP alias".
|
---|
337 | The default is C</>.
|
---|
338 |
|
---|
339 | OSSL_CMP_CTX_set1_server() sets the given server I<address>
|
---|
340 | (which may be a hostname or IP address or NULL) in the given I<ctx>.
|
---|
341 |
|
---|
342 | OSSL_CMP_CTX_set_serverPort() sets the port of the CMP server to connect to.
|
---|
343 | If not used or the I<port> argument is 0
|
---|
344 | the default port applies, which is 80 for HTTP and 443 for HTTPS.
|
---|
345 |
|
---|
346 | OSSL_CMP_CTX_set1_proxy() sets the HTTP proxy to be used for connecting to
|
---|
347 | the given CMP server unless overruled by any "no_proxy" settings (see below).
|
---|
348 | If TLS is not used this defaults to the value of
|
---|
349 | the environment variable C<http_proxy> if set, else C<HTTP_PROXY>.
|
---|
350 | Otherwise defaults to the value of C<https_proxy> if set, else C<HTTPS_PROXY>.
|
---|
351 | An empty proxy string specifies not to use a proxy.
|
---|
352 | Else the format is C<[http[s]://]address[:port][/path]>,
|
---|
353 | where any path given is ignored.
|
---|
354 | The default port number is 80, or 443 in case C<https:> is given.
|
---|
355 |
|
---|
356 | OSSL_CMP_CTX_set1_no_proxy() sets the list of server hostnames not to use
|
---|
357 | an HTTP proxy for. The names may be separated by commas and/or whitespace.
|
---|
358 | Defaults to the environment variable C<no_proxy> if set, else C<NO_PROXY>.
|
---|
359 |
|
---|
360 | OSSL_CMP_CTX_set_http_cb() sets the optional BIO connect/disconnect callback
|
---|
361 | function, which has the prototype
|
---|
362 |
|
---|
363 | typedef BIO *(*HTTP_bio_cb_t) (BIO *bio, void *ctx, int connect, int detail);
|
---|
364 |
|
---|
365 | The callback may modify the I<bio> provided by L<OSSL_CMP_MSG_http_perform(3)>,
|
---|
366 | whereby it may make use of a custom defined argument I<ctx>
|
---|
367 | stored in the OSSL_CMP_CTX by means of OSSL_CMP_CTX_set_http_cb_arg().
|
---|
368 | During connection establishment, just after calling BIO_do_connect_retry(),
|
---|
369 | the function is invoked with the I<connect> argument being 1 and the I<detail>
|
---|
370 | argument being 1 if HTTPS is requested, i.e., SSL/TLS should be enabled. On
|
---|
371 | disconnect I<connect> is 0 and I<detail> is 1 in case no error occurred, else 0.
|
---|
372 | For instance, on connect the function may prepend a TLS BIO to implement HTTPS;
|
---|
373 | after disconnect it may do some diagnostic output and/or specific cleanup.
|
---|
374 | The function should return NULL to indicate failure.
|
---|
375 | After disconnect the modified BIO will be deallocated using BIO_free_all().
|
---|
376 |
|
---|
377 | OSSL_CMP_CTX_set_http_cb_arg() sets an argument, respectively a pointer to
|
---|
378 | a structure containing arguments,
|
---|
379 | optionally to be used by the http connect/disconnect callback function.
|
---|
380 | I<arg> is not consumed, and it must therefore explicitly be freed when not
|
---|
381 | needed any more. I<arg> may be NULL to clear the entry.
|
---|
382 |
|
---|
383 | OSSL_CMP_CTX_get_http_cb_arg() gets the argument, respectively the pointer to a
|
---|
384 | structure containing arguments, previously set by
|
---|
385 | OSSL_CMP_CTX_set_http_cb_arg() or NULL if unset.
|
---|
386 |
|
---|
387 | OSSL_CMP_CTX_set_transfer_cb() sets the message transfer callback function,
|
---|
388 | which has the type
|
---|
389 |
|
---|
390 | typedef OSSL_CMP_MSG *(*OSSL_CMP_transfer_cb_t) (OSSL_CMP_CTX *ctx,
|
---|
391 | const OSSL_CMP_MSG *req);
|
---|
392 |
|
---|
393 | Returns 1 on success, 0 on error.
|
---|
394 |
|
---|
395 | Default is NULL, which implies the use of L<OSSL_CMP_MSG_http_perform(3)>.
|
---|
396 | The callback should send the CMP request message it obtains via the I<req>
|
---|
397 | parameter and on success return the response, else it must return NULL.
|
---|
398 | The transfer callback may make use of a custom defined argument stored in
|
---|
399 | the ctx by means of OSSL_CMP_CTX_set_transfer_cb_arg(), which may be retrieved
|
---|
400 | again through OSSL_CMP_CTX_get_transfer_cb_arg().
|
---|
401 |
|
---|
402 | OSSL_CMP_CTX_set_transfer_cb_arg() sets an argument, respectively a pointer to a
|
---|
403 | structure containing arguments, optionally to be used by the transfer callback.
|
---|
404 | I<arg> is not consumed, and it must therefore explicitly be freed when not
|
---|
405 | needed any more. I<arg> may be NULL to clear the entry.
|
---|
406 |
|
---|
407 | OSSL_CMP_CTX_get_transfer_cb_arg() gets the argument, respectively the pointer
|
---|
408 | to a structure containing arguments, previously set by
|
---|
409 | OSSL_CMP_CTX_set_transfer_cb_arg() or NULL if unset.
|
---|
410 |
|
---|
411 | OSSL_CMP_CTX_set1_srvCert() sets the expected server cert in I<ctx> and trusts
|
---|
412 | it directly (even if it is expired) when verifying signed response messages.
|
---|
413 | This pins the accepted CMP server and
|
---|
414 | results in ignoring whatever may be set using OSSL_CMP_CTX_set0_trustedStore().
|
---|
415 | Any previously set value is freed.
|
---|
416 | The I<cert> argument may be NULL to clear the entry.
|
---|
417 | If set, the subject of the certificate is also used
|
---|
418 | as default value for the recipient of CMP requests
|
---|
419 | and as default value for the expected sender of CMP responses.
|
---|
420 |
|
---|
421 | OSSL_CMP_CTX_set1_expected_sender() sets the Distinguished Name (DN)
|
---|
422 | expected in the sender field of incoming CMP messages.
|
---|
423 | Defaults to the subject of the pinned server certificate, if any.
|
---|
424 | This can be used to make sure that only a particular entity is accepted as
|
---|
425 | CMP message signer, and attackers are not able to use arbitrary certificates
|
---|
426 | of a trusted PKI hierarchy to fraudulently pose as CMP server.
|
---|
427 | Note that this gives slightly more freedom than OSSL_CMP_CTX_set1_srvCert(),
|
---|
428 | which pins the server to the holder of a particular certificate, while the
|
---|
429 | expected sender name will continue to match after updates of the server cert.
|
---|
430 |
|
---|
431 | OSSL_CMP_CTX_set0_trustedStore()
|
---|
432 | sets in the CMP context I<ctx> the certificate store of type X509_STORE
|
---|
433 | containing trusted certificates, typically of root CAs.
|
---|
434 | This is ignored when a certificate is pinned using OSSL_CMP_CTX_set1_srvCert().
|
---|
435 | The store may also hold CRLs and a certificate verification callback function
|
---|
436 | used for signature-based peer authentication.
|
---|
437 | Any store entry already set before is freed.
|
---|
438 | When given a NULL parameter the entry is cleared.
|
---|
439 |
|
---|
440 | OSSL_CMP_CTX_get0_trustedStore()
|
---|
441 | extracts from the CMP context I<ctx> the pointer to the currently set
|
---|
442 | certificate store containing trust anchors etc., or an empty store if unset.
|
---|
443 |
|
---|
444 | OSSL_CMP_CTX_set1_untrusted() sets up a list of non-trusted certificates
|
---|
445 | of intermediate CAs that may be useful for path construction for the own CMP
|
---|
446 | signer certificate, for the own TLS certificate (if any), when verifying peer
|
---|
447 | CMP protection certificates, and when verifying newly enrolled certificates.
|
---|
448 | The reference counts of those certificates handled successfully are increased.
|
---|
449 |
|
---|
450 | OSSL_CMP_CTX_get0_untrusted(OSSL_CMP_CTX *ctx) returns a pointer to the
|
---|
451 | list of untrusted certs, which may be empty if unset.
|
---|
452 |
|
---|
453 | OSSL_CMP_CTX_set1_cert() sets the CMP signer certificate
|
---|
454 | related to the private key used for CMP message protection.
|
---|
455 | Therefore the public key of this I<cert> must correspond to
|
---|
456 | the private key set before or thereafter via OSSL_CMP_CTX_set1_pkey().
|
---|
457 | When using signature-based protection of CMP request messages
|
---|
458 | this CMP signer certificate will be included first in the extraCerts field.
|
---|
459 | It serves as fallback reference certificate, see OSSL_CMP_CTX_set1_oldCert().
|
---|
460 | The subject of this I<cert> will be used as the sender field of outgoing
|
---|
461 | messages, while the subject of any cert set via OSSL_CMP_CTX_set1_oldCert()
|
---|
462 | and any value set via OSSL_CMP_CTX_set1_subjectName() are used as fallback.
|
---|
463 |
|
---|
464 | The I<cert> argument may be NULL to clear the entry.
|
---|
465 |
|
---|
466 | OSSL_CMP_CTX_build_cert_chain() builds a certificate chain for the CMP signer
|
---|
467 | certificate previously set in the I<ctx>. It adds the optional I<candidates>,
|
---|
468 | a list of intermediate CA certs that may already constitute the targeted chain,
|
---|
469 | to the untrusted certs that may already exist in the I<ctx>.
|
---|
470 | Then the function uses this augmented set of certs for chain construction.
|
---|
471 | If I<own_trusted> is NULL it builds the chain as far down as possible and
|
---|
472 | ignores any verification errors. Else the CMP signer certificate must be
|
---|
473 | verifiable where the chain reaches a trust anchor contained in I<own_trusted>.
|
---|
474 | On success the function stores the resulting chain in I<ctx>
|
---|
475 | for inclusion in the extraCerts field of signature-protected messages.
|
---|
476 | Calling this function is optional; by default a chain construction
|
---|
477 | is performed on demand that is equivalent to calling this function
|
---|
478 | with the I<candidates> and I<own_trusted> arguments being NULL.
|
---|
479 |
|
---|
480 | OSSL_CMP_CTX_set1_pkey() sets the client's private key corresponding to the
|
---|
481 | CMP signer certificate set via OSSL_CMP_CTX_set1_cert().
|
---|
482 | This key is used create signature-based protection (protectionAlg = MSG_SIG_ALG)
|
---|
483 | of outgoing messages
|
---|
484 | unless a PBM secret has been set via OSSL_CMP_CTX_set1_secretValue().
|
---|
485 | The I<pkey> argument may be NULL to clear the entry.
|
---|
486 |
|
---|
487 | OSSL_CMP_CTX_set1_secretValue() sets the byte string I<sec> with length I<len>
|
---|
488 | as PBM secret in the given I<ctx> or clears it if the I<sec> argument is NULL.
|
---|
489 | If present, this secret is used to create PBM-based protection of outgoing
|
---|
490 | messages and to verify any PBM-based protection of incoming messages
|
---|
491 | (protectionAlg = MSG_MAC_ALG). PBM stands for Password-Based MAC.
|
---|
492 | PBM-based protection takes precedence over signature-based protection.
|
---|
493 |
|
---|
494 | OSSL_CMP_CTX_set1_referenceValue() sets the given referenceValue I<ref> with
|
---|
495 | length I<len> in the given I<ctx> or clears it if the I<ref> argument is NULL.
|
---|
496 | According to RFC 4210 section 5.1.1, if no value for the sender field in
|
---|
497 | CMP message headers can be determined (i.e., no CMP signer certificate
|
---|
498 | and no subject DN is set via OSSL_CMP_CTX_set1_subjectName()
|
---|
499 | then the sender field will contain the NULL-DN
|
---|
500 | and the senderKID field of the CMP message header must be set.
|
---|
501 | When signature-based protection is used the senderKID will be set to
|
---|
502 | the subjectKeyIdentifier of the CMP signer certificate as far as present.
|
---|
503 | If not present or when PBM-based protection is used
|
---|
504 | the I<ref> value is taken as the fallback value for the senderKID.
|
---|
505 |
|
---|
506 | OSSL_CMP_CTX_set1_recipient() sets the recipient name that will be used in the
|
---|
507 | PKIHeader of CMP request messages, i.e. the X509 name of the (CA) server.
|
---|
508 |
|
---|
509 | The recipient field in the header of a CMP message is mandatory.
|
---|
510 | If not given explicitly the recipient is determined in the following order:
|
---|
511 | the subject of the CMP server certificate set using OSSL_CMP_CTX_set1_srvCert(),
|
---|
512 | the value set using OSSL_CMP_CTX_set1_issuer(),
|
---|
513 | the issuer of the certificate set using OSSL_CMP_CTX_set1_oldCert(),
|
---|
514 | the issuer of the CMP signer certificate,
|
---|
515 | as far as any of those is present, else the NULL-DN as last resort.
|
---|
516 |
|
---|
517 | OSSL_CMP_CTX_push0_geninfo_ITAV() adds I<itav> to the stack in the I<ctx> to be
|
---|
518 | added to the GeneralInfo field of the CMP PKIMessage header of a request
|
---|
519 | message sent with this context.
|
---|
520 |
|
---|
521 | OSSL_CMP_CTX_reset_geninfo_ITAVs()
|
---|
522 | clears any ITAVs that were added by OSSL_CMP_CTX_push0_geninfo_ITAV().
|
---|
523 |
|
---|
524 | OSSL_CMP_CTX_set1_extraCertsOut() sets the stack of extraCerts that will be
|
---|
525 | sent to remote.
|
---|
526 |
|
---|
527 | OSSL_CMP_CTX_set0_newPkey() can be used to explicitly set the given EVP_PKEY
|
---|
528 | structure as the private or public key to be certified in the CMP context.
|
---|
529 | The I<priv> parameter must be 0 if and only if the given key is a public key.
|
---|
530 |
|
---|
531 | OSSL_CMP_CTX_get0_newPkey() gives the key to use for certificate enrollment
|
---|
532 | dependent on fields of the CMP context structure:
|
---|
533 | the newPkey (which may be a private or public key) if present,
|
---|
534 | else the public key in the p10CSR if present, else the client's private key.
|
---|
535 | If the I<priv> parameter is not 0 and the selected key does not have a
|
---|
536 | private component then NULL is returned.
|
---|
537 |
|
---|
538 | OSSL_CMP_CTX_set1_issuer() sets the name of the intended issuer that
|
---|
539 | will be set in the CertTemplate, i.e., the X509 name of the CA server.
|
---|
540 |
|
---|
541 | OSSL_CMP_CTX_set1_subjectName() sets the subject DN that will be used in
|
---|
542 | the CertTemplate structure when requesting a new cert. For Key Update Requests
|
---|
543 | (KUR), it defaults to the subject DN of the reference certificate,
|
---|
544 | see OSSL_CMP_CTX_set1_oldCert(). This default is used for Initialization
|
---|
545 | Requests (IR) and Certification Requests (CR) only if no SANs are set.
|
---|
546 | The I<subjectName> is also used as fallback for the sender field
|
---|
547 | of outgoing CMP messages if no reference certificate is available.
|
---|
548 |
|
---|
549 | OSSL_CMP_CTX_push1_subjectAltName() adds the given X509 name to the list of
|
---|
550 | alternate names on the certificate template request. This cannot be used if
|
---|
551 | any Subject Alternative Name extension is set via
|
---|
552 | OSSL_CMP_CTX_set0_reqExtensions().
|
---|
553 | By default, unless B<OSSL_CMP_OPT_SUBJECTALTNAME_NODEFAULT> has been set,
|
---|
554 | the Subject Alternative Names are copied from the reference certificate,
|
---|
555 | see OSSL_CMP_CTX_set1_oldCert().
|
---|
556 | If set and the subject DN is not set with OSSL_CMP_CTX_set1_subjectName() then
|
---|
557 | the certificate template of an IR and CR will not be filled with the default
|
---|
558 | subject DN from the reference certificate.
|
---|
559 | If a subject DN is desired it needs to be set explicitly with
|
---|
560 | OSSL_CMP_CTX_set1_subjectName().
|
---|
561 |
|
---|
562 | OSSL_CMP_CTX_set0_reqExtensions() sets the X.509v3 extensions to be used in
|
---|
563 | IR/CR/KUR.
|
---|
564 |
|
---|
565 | OSSL_CMP_CTX_reqExtensions_have_SAN() returns 1 if the context contains
|
---|
566 | a Subject Alternative Name extension, else 0 or -1 on error.
|
---|
567 |
|
---|
568 | OSSL_CMP_CTX_push0_policy() adds the certificate policy info object
|
---|
569 | to the X509_EXTENSIONS of the requested certificate template.
|
---|
570 |
|
---|
571 | OSSL_CMP_CTX_set1_oldCert() sets the old certificate to be updated in
|
---|
572 | Key Update Requests (KUR) or to be revoked in Revocation Requests (RR).
|
---|
573 | It must be given for RR, else it defaults to the CMP signer certificate.
|
---|
574 | The I<reference certificate> determined in this way, if any, is also used for
|
---|
575 | deriving default subject DN, public key, Subject Alternative Names, and the
|
---|
576 | default issuer entry in the requested certificate template of IR/CR/KUR.
|
---|
577 | The subject of the reference certificate is used as the sender field value
|
---|
578 | in CMP message headers.
|
---|
579 | Its issuer is used as default recipient in CMP message headers.
|
---|
580 |
|
---|
581 | OSSL_CMP_CTX_set1_p10CSR() sets the PKCS#10 CSR to use in P10CR messages.
|
---|
582 | If such a CSR is provided, its subject, public key, and extension fields are
|
---|
583 | also used as fallback values for the certificate template of IR/CR/KUR messages.
|
---|
584 |
|
---|
585 | OSSL_CMP_CTX_push0_genm_ITAV() adds I<itav> to the stack in the I<ctx> which
|
---|
586 | will be the body of a General Message sent with this context.
|
---|
587 |
|
---|
588 | OSSL_CMP_certConf_cb() is the default certificate confirmation callback function.
|
---|
589 | If the callback argument is not NULL it must point to a trust store.
|
---|
590 | In this case the function checks that the newly enrolled certificate can be
|
---|
591 | verified using this trust store and untrusted certificates from the I<ctx>,
|
---|
592 | which have been augmented by the list of extraCerts received.
|
---|
593 | During this verification, any certificate status checking is disabled.
|
---|
594 | If the callback argument is NULL the function tries building an approximate
|
---|
595 | chain as far as possible using the same untrusted certificates from the I<ctx>,
|
---|
596 | and if this fails it takes the received extraCerts as fallback.
|
---|
597 | The resulting cert chain can be retrieved using OSSL_CMP_CTX_get1_newChain().
|
---|
598 |
|
---|
599 | OSSL_CMP_CTX_set_certConf_cb() sets the callback used for evaluating the newly
|
---|
600 | enrolled certificate before the library sends, depending on its result,
|
---|
601 | a positive or negative certConf message to the server. The callback has type
|
---|
602 |
|
---|
603 | typedef int (*OSSL_CMP_certConf_cb_t) (OSSL_CMP_CTX *ctx, X509 *cert,
|
---|
604 | int fail_info, const char **txt);
|
---|
605 |
|
---|
606 | and should inspect the certificate it obtains via the I<cert> parameter and may
|
---|
607 | overrule the pre-decision given in the I<fail_info> and I<*txt> parameters.
|
---|
608 | If it accepts the certificate it must return 0, indicating success. Else it must
|
---|
609 | return a bit field reflecting PKIFailureInfo with at least one failure bit and
|
---|
610 | may set the I<*txt> output parameter to point to a string constant with more
|
---|
611 | detail. The transfer callback may make use of a custom defined argument stored
|
---|
612 | in the I<ctx> by means of OSSL_CMP_CTX_set_certConf_cb_arg(), which may be
|
---|
613 | retrieved again through OSSL_CMP_CTX_get_certConf_cb_arg().
|
---|
614 | Typically, the callback will check at least that the certificate can be verified
|
---|
615 | using a set of trusted certificates.
|
---|
616 | It also could compare the subject DN and other fields of the newly
|
---|
617 | enrolled certificate with the certificate template of the request.
|
---|
618 |
|
---|
619 | OSSL_CMP_CTX_set_certConf_cb_arg() sets an argument, respectively a pointer to a
|
---|
620 | structure containing arguments, optionally to be used by the certConf callback.
|
---|
621 | I<arg> is not consumed, and it must therefore explicitly be freed when not
|
---|
622 | needed any more. I<arg> may be NULL to clear the entry.
|
---|
623 |
|
---|
624 | OSSL_CMP_CTX_get_certConf_cb_arg() gets the argument, respectively the pointer
|
---|
625 | to a structure containing arguments, previously set by
|
---|
626 | OSSL_CMP_CTX_set_certConf_cb_arg(), or NULL if unset.
|
---|
627 |
|
---|
628 | OSSL_CMP_CTX_get_status() returns for client contexts the PKIstatus from
|
---|
629 | the last received CertRepMessage or Revocation Response or error message:
|
---|
630 | =item B<OSSL_CMP_PKISTATUS_accepted> on successful receipt of a GENP message:
|
---|
631 |
|
---|
632 | =over 4
|
---|
633 |
|
---|
634 | =item B<OSSL_CMP_PKISTATUS_request>
|
---|
635 |
|
---|
636 | if an IR/CR/KUR/RR/GENM request message could not be produced,
|
---|
637 |
|
---|
638 | =item B<OSSL_CMP_PKISTATUS_trans>
|
---|
639 |
|
---|
640 | on a transmission error or transaction error for this type of request, and
|
---|
641 |
|
---|
642 | =item B<OSSL_CMP_PKISTATUS_unspecified>
|
---|
643 |
|
---|
644 | if no such request was attempted or OSSL_CMP_CTX_reinit() has been called.
|
---|
645 |
|
---|
646 | =back
|
---|
647 |
|
---|
648 | For server contexts it returns
|
---|
649 | B<OSSL_CMP_PKISTATUS_trans> if a transaction is open,
|
---|
650 | otherwise B<OSSL_CMP_PKISTATUS_unspecified>.
|
---|
651 |
|
---|
652 | OSSL_CMP_CTX_get0_statusString() returns the statusString from the last received
|
---|
653 | CertRepMessage or Revocation Response or error message, or NULL if unset.
|
---|
654 |
|
---|
655 | OSSL_CMP_CTX_get_failInfoCode() returns the error code from the failInfo field
|
---|
656 | of the last received CertRepMessage or Revocation Response or error message,
|
---|
657 | or -1 if no such response was received or OSSL_CMP_CTX_reinit() has been called.
|
---|
658 | This is a bit field and the flags for it are specified in the header file
|
---|
659 | F<< <openssl/cmp.h> >>.
|
---|
660 | The flags start with OSSL_CMP_CTX_FAILINFO, for example:
|
---|
661 | OSSL_CMP_CTX_FAILINFO_badAlg. Returns -1 if the failInfoCode field is unset.
|
---|
662 |
|
---|
663 | OSSL_CMP_CTX_get0_newCert() returns the pointer to the newly obtained
|
---|
664 | certificate in case it is available, else NULL.
|
---|
665 |
|
---|
666 | OSSL_CMP_CTX_get1_newChain() returns a pointer to a duplicate of the stack of
|
---|
667 | X.509 certificates computed by OSSL_CMP_certConf_cb() (if this function has
|
---|
668 | been called) on the last received certificate response message IP/CP/KUP.
|
---|
669 |
|
---|
670 | OSSL_CMP_CTX_get1_caPubs() returns a pointer to a duplicate of the list of
|
---|
671 | X.509 certificates in the caPubs field of the last received certificate
|
---|
672 | response message (of type IP, CP, or KUP),
|
---|
673 | or an empty stack if no caPubs have been received in the current transaction.
|
---|
674 |
|
---|
675 | OSSL_CMP_CTX_get1_extraCertsIn() returns a pointer to a duplicate of the list
|
---|
676 | of X.509 certificates contained in the extraCerts field of the last received
|
---|
677 | response message (except for pollRep and PKIConf), or
|
---|
678 | an empty stack if no extraCerts have been received in the current transaction.
|
---|
679 |
|
---|
680 | OSSL_CMP_CTX_set1_transactionID() sets the given transaction ID in the given
|
---|
681 | OSSL_CMP_CTX structure.
|
---|
682 |
|
---|
683 | OSSL_CMP_CTX_set1_senderNonce() stores the last sent sender I<nonce> in
|
---|
684 | the I<ctx>. This will be used to validate the recipNonce in incoming messages.
|
---|
685 |
|
---|
686 | =head1 NOTES
|
---|
687 |
|
---|
688 | CMP is defined in RFC 4210 (and CRMF in RFC 4211).
|
---|
689 |
|
---|
690 | =head1 RETURN VALUES
|
---|
691 |
|
---|
692 | OSSL_CMP_CTX_free() and OSSL_CMP_CTX_print_errors() do not return anything.
|
---|
693 |
|
---|
694 | OSSL_CMP_CTX_new(),
|
---|
695 | OSSL_CMP_CTX_get_http_cb_arg(),
|
---|
696 | OSSL_CMP_CTX_get_transfer_cb_arg(),
|
---|
697 | OSSL_CMP_CTX_get0_trustedStore(),
|
---|
698 | OSSL_CMP_CTX_get0_untrusted(),
|
---|
699 | OSSL_CMP_CTX_get0_newPkey(),
|
---|
700 | OSSL_CMP_CTX_get_certConf_cb_arg(),
|
---|
701 | OSSL_CMP_CTX_get0_statusString(),
|
---|
702 | OSSL_CMP_CTX_get0_newCert(),
|
---|
703 | OSSL_CMP_CTX_get0_newChain(),
|
---|
704 | OSSL_CMP_CTX_get1_caPubs(), and
|
---|
705 | OSSL_CMP_CTX_get1_extraCertsIn()
|
---|
706 | return the intended pointer value as described above or NULL on error.
|
---|
707 |
|
---|
708 | OSSL_CMP_CTX_get_option(),
|
---|
709 | OSSL_CMP_CTX_reqExtensions_have_SAN(),
|
---|
710 | OSSL_CMP_CTX_get_status(), and
|
---|
711 | OSSL_CMP_CTX_get_failInfoCode()
|
---|
712 | return the intended value as described above or -1 on error.
|
---|
713 |
|
---|
714 | OSSL_CMP_certConf_cb() returns I<fail_info> if it is not equal to 0,
|
---|
715 | else 0 on successful validation,
|
---|
716 | or else a bit field with the B<OSSL_CMP_PKIFAILUREINFO_incorrectData> bit set.
|
---|
717 |
|
---|
718 | All other functions, including OSSL_CMP_CTX_reinit()
|
---|
719 | and OSSL_CMP_CTX_reset_geninfo_ITAVs(),
|
---|
720 | return 1 on success, 0 on error.
|
---|
721 |
|
---|
722 | =head1 EXAMPLES
|
---|
723 |
|
---|
724 | The following code omits error handling.
|
---|
725 |
|
---|
726 | Set up a CMP client context for sending requests and verifying responses:
|
---|
727 |
|
---|
728 | cmp_ctx = OSSL_CMP_CTX_new();
|
---|
729 | OSSL_CMP_CTX_set1_server(cmp_ctx, name_or_address);
|
---|
730 | OSSL_CMP_CTX_set1_serverPort(cmp_ctx, port_string);
|
---|
731 | OSSL_CMP_CTX_set1_serverPath(cmp_ctx, path_or_alias);
|
---|
732 | OSSL_CMP_CTX_set0_trustedStore(cmp_ctx, ts);
|
---|
733 |
|
---|
734 | Set up client credentials for password-based protection (PBM):
|
---|
735 |
|
---|
736 | OSSL_CMP_CTX_set1_referenceValue(cmp_ctx, ref, ref_len);
|
---|
737 | OSSL_CMP_CTX_set1_secretValue(cmp_ctx, sec, sec_len);
|
---|
738 |
|
---|
739 | Set up the details for certificate requests:
|
---|
740 |
|
---|
741 | OSSL_CMP_CTX_set1_subjectName(cmp_ctx, name);
|
---|
742 | OSSL_CMP_CTX_set0_newPkey(cmp_ctx, 1, initialKey);
|
---|
743 |
|
---|
744 | Perform an Initialization Request transaction:
|
---|
745 |
|
---|
746 | initialCert = OSSL_CMP_exec_IR_ses(cmp_ctx);
|
---|
747 |
|
---|
748 | Reset the transaction state of the CMP context and the credentials:
|
---|
749 |
|
---|
750 | OSSL_CMP_CTX_reinit(cmp_ctx);
|
---|
751 | OSSL_CMP_CTX_set1_referenceValue(cmp_ctx, NULL, 0);
|
---|
752 | OSSL_CMP_CTX_set1_secretValue(cmp_ctx, NULL, 0);
|
---|
753 |
|
---|
754 | Perform a Certification Request transaction, making use of the new credentials:
|
---|
755 |
|
---|
756 | OSSL_CMP_CTX_set1_cert(cmp_ctx, initialCert);
|
---|
757 | OSSL_CMP_CTX_set1_pkey(cmp_ctx, initialKey);
|
---|
758 | OSSL_CMP_CTX_set0_newPkey(cmp_ctx, 1, curentKey);
|
---|
759 | currentCert = OSSL_CMP_exec_CR_ses(cmp_ctx);
|
---|
760 |
|
---|
761 | Perform a Key Update Request, signed using the cert (and key) to be updated:
|
---|
762 |
|
---|
763 | OSSL_CMP_CTX_reinit(cmp_ctx);
|
---|
764 | OSSL_CMP_CTX_set1_cert(cmp_ctx, currentCert);
|
---|
765 | OSSL_CMP_CTX_set1_pkey(cmp_ctx, currentKey);
|
---|
766 | OSSL_CMP_CTX_set0_newPkey(cmp_ctx, 1, updatedKey);
|
---|
767 | currentCert = OSSL_CMP_exec_KUR_ses(cmp_ctx);
|
---|
768 | currentKey = updatedKey;
|
---|
769 |
|
---|
770 | Perform a General Message transaction including, as an example,
|
---|
771 | the id-it-signKeyPairTypes OID and prints info on the General Response contents:
|
---|
772 |
|
---|
773 | OSSL_CMP_CTX_reinit(cmp_ctx);
|
---|
774 |
|
---|
775 | ASN1_OBJECT *type = OBJ_txt2obj("1.3.6.1.5.5.7.4.2", 1);
|
---|
776 | OSSL_CMP_ITAV *itav = OSSL_CMP_ITAV_create(type, NULL);
|
---|
777 | OSSL_CMP_CTX_push0_genm_ITAV(cmp_ctx, itav);
|
---|
778 |
|
---|
779 | STACK_OF(OSSL_CMP_ITAV) *itavs;
|
---|
780 | itavs = OSSL_CMP_exec_GENM_ses(cmp_ctx);
|
---|
781 | print_itavs(itavs);
|
---|
782 | sk_OSSL_CMP_ITAV_pop_free(itavs, OSSL_CMP_ITAV_free);
|
---|
783 |
|
---|
784 | =head1 SEE ALSO
|
---|
785 |
|
---|
786 | L<OSSL_CMP_exec_IR_ses(3)>, L<OSSL_CMP_exec_CR_ses(3)>,
|
---|
787 | L<OSSL_CMP_exec_KUR_ses(3)>, L<OSSL_CMP_exec_GENM_ses(3)>,
|
---|
788 | L<OSSL_CMP_exec_certreq(3)>, L<OSSL_CMP_MSG_http_perform(3)>,
|
---|
789 | L<ERR_print_errors_cb(3)>
|
---|
790 |
|
---|
791 | =head1 HISTORY
|
---|
792 |
|
---|
793 | The OpenSSL CMP support was added in OpenSSL 3.0.
|
---|
794 |
|
---|
795 | OSSL_CMP_CTX_reset_geninfo_ITAVs() was added in OpenSSL 3.0.8.
|
---|
796 |
|
---|
797 | =head1 COPYRIGHT
|
---|
798 |
|
---|
799 | Copyright 2007-2023 The OpenSSL Project Authors. All Rights Reserved.
|
---|
800 |
|
---|
801 | Licensed under the Apache License 2.0 (the "License"). You may not use
|
---|
802 | this file except in compliance with the License. You can obtain a copy
|
---|
803 | in the file LICENSE in the source distribution or at
|
---|
804 | L<https://www.openssl.org/source/license.html>.
|
---|
805 |
|
---|
806 | =cut
|
---|