| 
									
										
										
										
											2000-10-04 06:02:28 +08:00
										 |  |  | =pod | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 NAME | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-02 13:59:17 +08:00
										 |  |  | SSL_CTX_load_verify_dir, SSL_CTX_load_verify_file, | 
					
						
							|  |  |  | SSL_CTX_load_verify_store, SSL_CTX_set_default_verify_paths, | 
					
						
							|  |  |  | SSL_CTX_set_default_verify_dir, SSL_CTX_set_default_verify_file, | 
					
						
							|  |  |  | SSL_CTX_set_default_verify_store, SSL_CTX_load_verify_locations | 
					
						
							|  |  |  | - set default locations for trusted CA certificates | 
					
						
							| 
									
										
										
										
											2000-10-04 06:02:28 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 SYNOPSIS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  #include <openssl/ssl.h> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-02 13:59:17 +08:00
										 |  |  |  int SSL_CTX_load_verify_dir(SSL_CTX *ctx, const char *CApath); | 
					
						
							|  |  |  |  int SSL_CTX_load_verify_file(SSL_CTX *ctx, const char *CAfile); | 
					
						
							|  |  |  |  int SSL_CTX_load_verify_store(SSL_CTX *ctx, const char *CAstore); | 
					
						
							| 
									
										
										
										
											2000-10-04 06:02:28 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-23 00:05:17 +08:00
										 |  |  |  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); | 
					
						
							| 
									
										
										
										
											2019-09-02 13:59:17 +08:00
										 |  |  |  int SSL_CTX_set_default_verify_store(SSL_CTX *ctx); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, | 
					
						
							|  |  |  |                                    const char *CApath); | 
					
						
							| 
									
										
										
										
											2015-09-23 00:05:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-10-04 06:02:28 +08:00
										 |  |  | =head1 DESCRIPTION | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-01 17:52:23 +08:00
										 |  |  | SSL_CTX_load_verify_locations(), SSL_CTX_load_verify_dir(), | 
					
						
							|  |  |  | SSL_CTX_load_verify_file(), SSL_CTX_load_verify_store() specifies the | 
					
						
							|  |  |  | locations for B<ctx>, at which CA certificates for verification purposes | 
					
						
							|  |  |  | are located. The certificates available via B<CAfile>, B<CApath> and | 
					
						
							| 
									
										
										
										
											2024-08-07 16:54:14 +08:00
										 |  |  | B<CAstore> are trusted. B<ctx> B<MUST NOT> be NULL | 
					
						
							| 
									
										
										
										
											2000-10-04 06:02:28 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-24 06:29:04 +08:00
										 |  |  | Details of the certificate verification and chain checking process are | 
					
						
							|  |  |  | described in L<openssl-verification-options(1)/Certification Path Validation>. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-09 21:48:40 +08:00
										 |  |  | SSL_CTX_set_default_verify_paths() specifies that the default locations from | 
					
						
							| 
									
										
										
										
											2019-09-02 13:59:17 +08:00
										 |  |  | which CA certificates are loaded should be used. There is one default directory, | 
					
						
							|  |  |  | one default file and one default store. | 
					
						
							| 
									
										
										
										
											2019-10-10 03:45:12 +08:00
										 |  |  | The default CA certificates directory is called F<certs> in the default OpenSSL | 
					
						
							| 
									
										
										
										
											2019-09-02 13:59:17 +08:00
										 |  |  | directory, and this is also the default store. | 
					
						
							| 
									
										
										
										
											2019-10-10 03:45:12 +08:00
										 |  |  | Alternatively the B<SSL_CERT_DIR> environment variable can be defined to | 
					
						
							| 
									
										
										
										
											2019-09-02 13:59:17 +08:00
										 |  |  | override this location. | 
					
						
							| 
									
										
										
										
											2019-10-10 03:45:12 +08:00
										 |  |  | The default CA certificates file is called F<cert.pem> in the default | 
					
						
							| 
									
										
										
										
											2019-09-02 13:59:17 +08:00
										 |  |  | OpenSSL directory. | 
					
						
							| 
									
										
										
										
											2019-10-10 03:45:12 +08:00
										 |  |  | Alternatively the B<SSL_CERT_FILE> environment variable can be defined to | 
					
						
							| 
									
										
										
										
											2019-09-02 13:59:17 +08:00
										 |  |  | override this location. | 
					
						
							| 
									
										
										
										
											2024-08-07 16:54:14 +08:00
										 |  |  | B<ctx> B<MUST NOT> be NULL. | 
					
						
							| 
									
										
										
										
											2015-09-23 00:05:17 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 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. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-02 13:59:17 +08:00
										 |  |  | SSL_CTX_set_default_verify_store() is similar to | 
					
						
							|  |  |  | SSL_CTX_set_default_verify_paths() except that just the default store is | 
					
						
							|  |  |  | used. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-10-04 06:02:28 +08:00
										 |  |  | =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. | 
					
						
							| 
									
										
										
										
											2000-10-12 17:56:36 +08:00
										 |  |  | 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. | 
					
						
							| 
									
										
										
										
											2000-10-04 06:02:28 +08:00
										 |  |  | Use the B<c_rehash> utility to create the necessary links. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-12-06 00:47:22 +08:00
										 |  |  | The certificates in B<CApath> are only looked up when required, e.g. when | 
					
						
							| 
									
										
										
										
											2000-10-04 06:02:28 +08:00
										 |  |  | building the certificate chain or when actually performing the verification | 
					
						
							|  |  |  | of a peer certificate. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-24 06:29:04 +08:00
										 |  |  | When looking up CA certificates for chain building, the OpenSSL library | 
					
						
							|  |  |  | will search for suitable certificates first in B<CAfile>, then in B<CApath>. | 
					
						
							|  |  |  | Details of the chain building process are described in | 
					
						
							|  |  |  | L<openssl-verification-options(1)/Certification Path Building>. | 
					
						
							| 
									
										
										
										
											2000-10-12 17:56:36 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-02 13:59:17 +08:00
										 |  |  | If B<CAstore> is not NULL, it's a URI for to a store, which may | 
					
						
							|  |  |  | represent a single container or a whole catalogue of containers. | 
					
						
							|  |  |  | Apart from the B<CAstore> not necessarily being a local file or | 
					
						
							|  |  |  | directory, it's generally treated the same way as a B<CApath>. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-04-13 00:02:34 +08:00
										 |  |  | 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 | 
					
						
							| 
									
										
										
										
											2001-09-07 14:13:40 +08:00
										 |  |  | explicitly be set using the | 
					
						
							| 
									
										
										
										
											2015-08-18 03:21:33 +08:00
										 |  |  | L<SSL_CTX_set_client_CA_list(3)> | 
					
						
							| 
									
										
										
										
											2001-04-13 00:02:34 +08:00
										 |  |  | family of functions. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-12-06 00:47:22 +08:00
										 |  |  | When building its own certificate chain, an OpenSSL client/server will | 
					
						
							| 
									
										
										
										
											2000-12-08 22:29:13 +08:00
										 |  |  | try to fill in missing certificates from B<CAfile>/B<CApath>, if the | 
					
						
							| 
									
										
										
										
											2001-02-16 10:09:53 +08:00
										 |  |  | certificate chain was not explicitly specified (see | 
					
						
							| 
									
										
										
										
											2015-08-18 03:21:33 +08:00
										 |  |  | L<SSL_CTX_add_extra_chain_cert(3)>, | 
					
						
							|  |  |  | L<SSL_CTX_use_certificate(3)>. | 
					
						
							| 
									
										
										
										
											2000-12-06 00:47:22 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-10-12 17:56:36 +08:00
										 |  |  | =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. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-10-04 06:02:28 +08:00
										 |  |  | =head1 RETURN VALUES | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-23 00:05:17 +08:00
										 |  |  | For SSL_CTX_load_verify_locations the following return values can occur: | 
					
						
							| 
									
										
										
										
											2000-10-04 06:02:28 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =over 4 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-21 17:03:01 +08:00
										 |  |  | =item Z<>0 | 
					
						
							| 
									
										
										
										
											2000-10-04 06:02:28 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 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. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-21 17:03:01 +08:00
										 |  |  | =item Z<>1 | 
					
						
							| 
									
										
										
										
											2000-10-04 06:02:28 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | The operation succeeded. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =back | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-23 00:05:17 +08:00
										 |  |  | 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. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-26 13:11:10 +08:00
										 |  |  | =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 . | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-10-04 06:02:28 +08:00
										 |  |  | =head1 SEE ALSO | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-11 16:33:09 +08:00
										 |  |  | L<ssl(7)>, | 
					
						
							| 
									
										
										
										
											2015-08-18 03:21:33 +08:00
										 |  |  | 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)>, | 
					
						
							| 
									
										
										
										
											2016-02-28 06:08:50 +08:00
										 |  |  | L<SSL_CTX_set_cert_store(3)>, | 
					
						
							|  |  |  | L<SSL_CTX_set_client_CA_list(3)> | 
					
						
							| 
									
										
										
										
											2000-10-04 06:02:28 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-18 23:44:05 +08:00
										 |  |  | =head1 COPYRIGHT | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-17 20:24:59 +08:00
										 |  |  | Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. | 
					
						
							| 
									
										
										
										
											2016-05-18 23:44:05 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-06 21:04:44 +08:00
										 |  |  | Licensed under the Apache License 2.0 (the "License").  You may not use | 
					
						
							| 
									
										
										
										
											2016-05-18 23:44:05 +08:00
										 |  |  | 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 |