|  | =pod | 
|  |  | 
|  | =head1 NAME | 
|  |  | 
|  | SSL_CTX_load_verify_locations, SSL_CTX_set_default_verify_paths, | 
|  | SSL_CTX_set_default_verify_dir, SSL_CTX_set_default_verify_file - set | 
|  | default locations for trusted CA certificates | 
|  |  | 
|  | =head1 SYNOPSIS | 
|  |  | 
|  | #include <openssl/ssl.h> | 
|  |  | 
|  | int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, | 
|  | const char *CApath); | 
|  |  | 
|  | int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx); | 
|  |  | 
|  | int SSL_CTX_set_default_verify_dir(SSL_CTX *ctx); | 
|  |  | 
|  | int SSL_CTX_set_default_verify_file(SSL_CTX *ctx); | 
|  |  | 
|  | =head1 DESCRIPTION | 
|  |  | 
|  | SSL_CTX_load_verify_locations() specifies the locations for B<ctx>, at | 
|  | which CA certificates for verification purposes are located. The certificates | 
|  | available via B<CAfile> and B<CApath> are trusted. | 
|  |  | 
|  | SSL_CTX_set_default_verify_paths() specifies that the default locations from | 
|  | which CA certificates are loaded should be used. There is one default directory | 
|  | and one default file. The default CA certificates directory is called "certs" in | 
|  | the default OpenSSL directory. Alternatively the SSL_CERT_DIR environment | 
|  | variable can be defined to override this location. The default CA certificates | 
|  | file is called "cert.pem" in the default OpenSSL directory. Alternatively the | 
|  | SSL_CERT_FILE environment variable can be defined to override this location. | 
|  |  | 
|  | SSL_CTX_set_default_verify_dir() is similar to | 
|  | SSL_CTX_set_default_verify_paths() except that just the default directory is | 
|  | used. | 
|  |  | 
|  | SSL_CTX_set_default_verify_file() is similar to | 
|  | SSL_CTX_set_default_verify_paths() except that just the default file is | 
|  | used. | 
|  |  | 
|  | =head1 NOTES | 
|  |  | 
|  | If B<CAfile> is not NULL, it points to a file of CA certificates in PEM | 
|  | format. The file can contain several CA certificates identified by | 
|  |  | 
|  | -----BEGIN CERTIFICATE----- | 
|  | ... (CA certificate in base64 encoding) ... | 
|  | -----END CERTIFICATE----- | 
|  |  | 
|  | sequences. Before, between, and after the certificates text is allowed | 
|  | which can be used e.g. for descriptions of the certificates. | 
|  |  | 
|  | The B<CAfile> is processed on execution of the SSL_CTX_load_verify_locations() | 
|  | function. | 
|  |  | 
|  | If B<CApath> is not NULL, it points to a directory containing CA certificates | 
|  | in PEM format. The files each contain one CA certificate. The files are | 
|  | looked up by the CA subject name hash value, which must hence be available. | 
|  | If more than one CA certificate with the same name hash value exist, the | 
|  | extension must be different (e.g. 9d66eef0.0, 9d66eef0.1 etc). The search | 
|  | is performed in the ordering of the extension number, regardless of other | 
|  | properties of the certificates. | 
|  | Use the B<c_rehash> utility to create the necessary links. | 
|  |  | 
|  | The certificates in B<CApath> are only looked up when required, e.g. when | 
|  | building the certificate chain or when actually performing the verification | 
|  | of a peer certificate. | 
|  |  | 
|  | When looking up CA certificates, the OpenSSL library will first search the | 
|  | certificates in B<CAfile>, then those in B<CApath>. Certificate matching | 
|  | is done based on the subject name, the key identifier (if present), and the | 
|  | serial number as taken from the certificate to be verified. If these data | 
|  | do not match, the next certificate will be tried. If a first certificate | 
|  | matching the parameters is found, the verification process will be performed; | 
|  | no other certificates for the same parameters will be searched in case of | 
|  | failure. | 
|  |  | 
|  | In server mode, when requesting a client certificate, the server must send | 
|  | the list of CAs of which it will accept client certificates. This list | 
|  | is not influenced by the contents of B<CAfile> or B<CApath> and must | 
|  | explicitly be set using the | 
|  | L<SSL_CTX_set_client_CA_list(3)> | 
|  | family of functions. | 
|  |  | 
|  | When building its own certificate chain, an OpenSSL client/server will | 
|  | try to fill in missing certificates from B<CAfile>/B<CApath>, if the | 
|  | certificate chain was not explicitly specified (see | 
|  | L<SSL_CTX_add_extra_chain_cert(3)>, | 
|  | L<SSL_CTX_use_certificate(3)>. | 
|  |  | 
|  | =head1 WARNINGS | 
|  |  | 
|  | If several CA certificates matching the name, key identifier, and serial | 
|  | number condition are available, only the first one will be examined. This | 
|  | may lead to unexpected results if the same CA certificate is available | 
|  | with different expiration dates. If a "certificate expired" verification | 
|  | error occurs, no other certificate will be searched. Make sure to not | 
|  | have expired certificates mixed with valid ones. | 
|  |  | 
|  | =head1 EXAMPLES | 
|  |  | 
|  | Generate a CA certificate file with descriptive text from the CA certificates | 
|  | ca1.pem ca2.pem ca3.pem: | 
|  |  | 
|  | #!/bin/sh | 
|  | rm CAfile.pem | 
|  | for i in ca1.pem ca2.pem ca3.pem ; do | 
|  | openssl x509 -in $i -text >> CAfile.pem | 
|  | done | 
|  |  | 
|  | Prepare the directory /some/where/certs containing several CA certificates | 
|  | for use as B<CApath>: | 
|  |  | 
|  | cd /some/where/certs | 
|  | c_rehash . | 
|  |  | 
|  | =head1 RETURN VALUES | 
|  |  | 
|  | For SSL_CTX_load_verify_locations the following return values can occur: | 
|  |  | 
|  | =over 4 | 
|  |  | 
|  | =item Z<>0 | 
|  |  | 
|  | The operation failed because B<CAfile> and B<CApath> are NULL or the | 
|  | processing at one of the locations specified failed. Check the error | 
|  | stack to find out the reason. | 
|  |  | 
|  | =item Z<>1 | 
|  |  | 
|  | The operation succeeded. | 
|  |  | 
|  | =back | 
|  |  | 
|  | SSL_CTX_set_default_verify_paths(), SSL_CTX_set_default_verify_dir() and | 
|  | SSL_CTX_set_default_verify_file() all return 1 on success or 0 on failure. A | 
|  | missing default location is still treated as a success. | 
|  |  | 
|  | =head1 SEE ALSO | 
|  |  | 
|  | L<ssl(7)>, | 
|  | L<SSL_CTX_set_client_CA_list(3)>, | 
|  | L<SSL_get_client_CA_list(3)>, | 
|  | L<SSL_CTX_use_certificate(3)>, | 
|  | L<SSL_CTX_add_extra_chain_cert(3)>, | 
|  | L<SSL_CTX_set_cert_store(3)>, | 
|  | L<SSL_CTX_set_client_CA_list(3)> | 
|  |  | 
|  | =head1 COPYRIGHT | 
|  |  | 
|  | Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. | 
|  |  | 
|  | Licensed under the OpenSSL license (the "License").  You may not use | 
|  | this file except in compliance with the License.  You can obtain a copy | 
|  | in the file LICENSE in the source distribution or at | 
|  | L<https://www.openssl.org/source/license.html>. | 
|  |  | 
|  | =cut |