44 (
s,
p, cert_files, key_files),
50 (
s,
p, cert_files, key_files),
67#define KEYTYPES "RSA, DSA or ECC"
69#define KEYTYPES "RSA or DSA"
72#if MODSSL_USE_OPENSSL_PRE_1_1_API
180 "SSL_VERSION_LIBRARY_INTERFACE");
185 "%s compiled against Server: %s, Library: %s",
198 const char **
pcert_pem,
const char **pkey_pem)
222#if MODSSL_USE_OPENSSL_PRE_1_1_API
248 "Init: this version of mod_ssl was compiled against "
249 "a newer library (%s (%s), version currently loaded is 0x%lX)"
250 " - may result in undefined or erroneous behavior",
278 for (
s = base_server;
s;
s =
s->
next) {
292 "%s, SSLSrvConfigRec shared from %s",
322#if APR_HAS_THREADS && MODSSL_USE_OPENSSL_PRE_1_1_API
347 "Could not enable FIPS mode");
375#ifdef HAVE_OCSP_STAPLING
392 "Init: Initializing (virtual) servers for SSL");
394 for (
s = base_server;
s;
s =
s->
next) {
415 "Init: Wiped out the queried pass phrases from memory");
425 for (
s = base_server;
s;
s =
s->
next) {
436 if (
sdc->proxy_enabled) {
452#if MODSSL_USE_OPENSSL_PRE_1_1_API
458#ifdef HAVE_OPENSSL_KEYLOG
469 "Could not open log file '%s' configured via SSLKEYLOGFILE",
475 "Init: Logging SSL private key material to %s",
logfn);
489#if MODSSL_HAVE_ENGINE_API
493 if (
mc->szCryptoDevice) {
496 "Init: Failed to load Crypto Device API `%s'",
502#ifdef ENGINE_CTRL_CHIL_SET_FORKCHECK
503 if (
strEQ(
mc->szCryptoDevice,
"chil")) {
510 "Init: Failed to enable Crypto Device API `%s'",
516 "Init: loaded Crypto Device API `%s'",
537 "Configuring TLS extension handling");
548 "Unable to initialize TLS servername extension "
549 "callback (incompatible OpenSSL version?)");
554#if OPENSSL_VERSION_NUMBER >= 0x10101000L && !defined(LIBRESSL_VERSION_NUMBER)
564#ifdef HAVE_OCSP_STAPLING
582 "Using SRP verifier file [%s]",
mctx->srp_vfile);
586 "Unable to initialize SRP verifier structure "
588 mctx->srp_unknown_user_seed ?
"with" :
"without");
596 "Unable to load SRP verifier file [error %d]",
err);
620#if OPENSSL_VERSION_NUMBER >= 0x10100000L
629 "No SSL protocols available [hint: SSLProtocol]");
646 cp[strlen(cp)-2] =
NUL;
649 "Creating new SSL context (protocols: %s)", cp);
651#if OPENSSL_VERSION_NUMBER < 0x10100000L
652#ifndef OPENSSL_NO_SSL3
676#if SSL_HAVE_PROTOCOL_TLSV1_3
700#if OPENSSL_VERSION_NUMBER < 0x10100000L || \
701 (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x20800000L)
705#ifndef OPENSSL_NO_SSL3
723#if SSL_HAVE_PROTOCOL_TLSV1_3
731#if SSL_HAVE_PROTOCOL_TLSV1_3
742#ifndef OPENSSL_NO_SSL3
750 "No SSL protocols available [hint: SSLProtocol]");
757#if SSL_HAVE_PROTOCOL_TLSV1_3
768#ifndef OPENSSL_NO_SSL3
776#ifdef SSL_OP_CIPHER_SERVER_PREFERENCE
783#ifndef OPENSSL_NO_COMP
785#ifdef SSL_OP_NO_COMPRESSION
794#ifdef SSL_OP_NO_TICKET
804#ifdef SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION
820#ifdef SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
828#ifdef SSL_MODE_RELEASE_BUFFERS
834#if OPENSSL_VERSION_NUMBER >= 0x1010100fL
841#ifdef HAVE_OPENSSL_KEYLOG
842 if (
mctx->sc->mc->keylog_file) {
847#ifdef SSL_OP_NO_RENEGOTIATION
854#ifdef SSL_OP_IGNORE_UNEXPECTED_EOF
882#ifdef SSL_OP_NO_RENEGOTIATION
884#define MODSSL_BLOCKS_RENEG (0)
887#define MODSSL_BLOCKS_RENEG (1)
897#if MODSSL_USE_OPENSSL_PRE_1_1_API
921#if OPENSSL_VERSION_NUMBER < 0x30000000L
948 mctx->auth.verify_depth = 1;
969 if (
mctx->auth.ca_cert_file ||
mctx->auth.ca_cert_path) {
971 "Configuring client authentication");
974 mctx->auth.ca_cert_path)) {
976 "Unable to configure verify locations "
977 "for client authentication");
982 if (
mctx->pks && (
mctx->pks->ca_name_file ||
mctx->pks->ca_name_path)) {
984 mctx->pks->ca_name_file,
985 mctx->pks->ca_name_path);
988 mctx->auth.ca_cert_file,
989 mctx->auth.ca_cert_path);
992 "Unable to determine list of acceptable "
993 "CA certificates for client authentication");
1009 "Init: Oops, you want to request client "
1010 "authentication, but no CAs are known for "
1011 "verification!? [Hint: SSLCACertificate*]");
1033 suite =
mctx->auth.cipher_suite ?
mctx->auth.cipher_suite :
1038 "Configuring permitted SSL ciphers [%s]",
1043 "Unable to configure permitted SSL ciphers");
1047#if SSL_HAVE_PROTOCOL_TLSV1_3
1048 if (
mctx->auth.tls13_ciphers
1051 "Unable to configure permitted TLSv1.3 ciphers");
1064#if OPENSSL_VERSION_NUMBER < 0x30000000L
1083 char *
cfgp =
mctx->pkp ?
"SSLProxy" :
"SSL";
1099 if (!(
mctx->crl_file ||
mctx->crl_path)) {
1103 "Host %s: CRL checking has been enabled, but "
1104 "neither %sCARevocationFile nor %sCARevocationPath "
1112 "Configuring certificate revocation facility");
1117 "Host %s: unable to configure X.509 CRL storage "
1118 "for certificate revocation",
mctx->sc->vhost_id);
1138 "Host %s: X.509 CRL storage locations configured, "
1139 "but CRL checking (%sCARevocationCheck) is not "
1140 "enabled",
mctx->sc->vhost_id,
cfgp);
1174#ifdef OPENSSL_NO_SSL_INTERN
1177 if (
ctx->extra_certs !=
NULL) {
1214 const char *chain =
mctx->cert_chain;
1234 for (
i = 0; (
i <
mctx->pks->cert_files->nelts) &&
1245 "Failed to configure CA certificate chain!");
1250 "Configuring server certificate chain "
1251 "(%d CA certificate%s)",
1252 n,
n == 1 ?
"" :
"s");
1318 "%s server certificate is a CA certificate "
1319 "(BasicConstraints: CA == TRUE !?)", key_id);
1324 "%s server certificate is not a leaf certificate "
1325 "(BasicConstraints: pathlen == %d > 0 !?)",
1333 "%s server certificate does NOT include an ID "
1334 "which matches the server name", key_id);
1351#if OPENSSL_VERSION_NUMBER < 0x30000000L
1352#define CHECK_PRIVKEY_ERROR(ec) (ERR_GET_FUNC(ec) != X509_F_X509_CHECK_PRIVATE_KEY)
1354#define CHECK_PRIVKEY_ERROR(ec) (ERR_GET_LIB(ec) != ERR_LIB_X509 \
1355 || (ERR_GET_REASON(ec) != X509_R_KEY_TYPE_MISMATCH \
1356 && ERR_GET_REASON(ec) != X509_R_KEY_VALUES_MISMATCH \
1357 && ERR_GET_REASON(ec) != X509_R_UNKNOWN_KEY_TYPE))
1380 for (
i = 0; (
i <
mctx->pks->cert_files->nelts) &&
1395 else if (
mctx->cert_chain) {
1399 "Failed to configure certificate %s, check %s",
1408 "Failed to configure certificate %s (with chain),"
1436 "Failed to configure certificate %s from %s, check %s",
1437 key_id,
mc->szCryptoDevice ?
1438 mc->szCryptoDevice :
"provider",
1450 "Failed to configure private key %s from %s",
1452 mc->szCryptoDevice :
"provider");
1464 const unsigned char *ptr;
1472 !(ptr =
asn1->cpData) ||
1476 "Failed to configure encrypted (?) private key %s,"
1477 " check %s", key_id,
keyfile);
1485 "Certificate and private key %s from %s and %s "
1490#ifdef HAVE_SSL_CONF_CMD
1514 "Unable to retrieve certificate %s", key_id);
1521#if defined(HAVE_OCSP_STAPLING) && !defined(SSL_CTRL_SET_CURRENT_CERT)
1531 "Unable to configure certificate %s for stapling",
1537 "Certificate and private key %s configured from %s and %s",
1547#if OPENSSL_VERSION_NUMBER < 0x30000000L
1569 "Custom DH parameters (%d bits) for %s loaded from %s",
1573#if !MODSSL_USE_OPENSSL_PRE_1_1_API
1588#if OPENSSL_VERSION_NUMBER < 0x30000000L
1604 "ECDH curve %s for %s specified in %s",
1613#if MODSSL_USE_OPENSSL_PRE_1_1_API
1615#if defined(SSL_CTX_set_ecdh_auto)
1633#ifdef HAVE_TLS_SESSION_TICKETS
1658 "Failed to open ticket key file %s: (%d) %pm",
1667 "Failed to read %d bytes from %s: (%d) %pm",
1674#if OPENSSL_VERSION_NUMBER < 0x30000000L
1690 "Unable to initialize TLS session ticket key callback "
1691 "(incompatible OpenSSL version?)");
1697 "TLS session ticket key for %s successfully loaded from %s",
1744#if OPENSSL_VERSION_NUMBER >= 0x1010100fL && !defined(LIBRESSL_VERSION_NUMBER)
1779 APLOGNO(10261)
"Trusting non-leaf certificate");
1792 "incomplete client cert configured for SSL proxy "
1793 "(missing or encrypted private key?)");
1799 APLOGNO(02326)
"proxy client certificate and "
1800 "private key do not match");
1809 "no client certs found for SSL proxy");
1814 "loaded %d client certs for SSL proxy",
1834 "SSL proxy client cert initialization failed");
1856 APLOGNO(02270)
"SSL proxy client cert chain "
1857 "verification failed: %s :",
1867 if (chain !=
NULL) {
1873 pkp->ca_certs[
n] = chain;
1878 pkp->ca_certs[
n] =
NULL;
1883 "loaded %i intermediate CA%s for cert %i: ",
1884 i,
i == 1 ?
"" :
"s",
n);
1887 for (j = 0; j <
i; j++) {
1904#define MODSSL_CFG_ITEM_FREE(func, item) \
1928 if (
mctx->pkp->certs) {
1932 if (
mctx->pkp->ca_certs) {
1982#ifdef HAVE_SSL_CONF_CMD
1994 "Illegal attempt to re-initialise SSL for server "
1995 "(SSLEngine On should go in the VirtualHost, not in global scope.)");
2012 "Init: %s will respond with '503 Service Unavailable' for now. There "
2013 "are no SSL certificates configured and no other module contributed any.",
2032#ifdef HAVE_SSL_CONF_CMD
2034 for (
i = 0;
i < sc->
server->ssl_ctx_param->nelts;
i++,
param++) {
2038 "\"SSLOpenSSLConfCmd %s %s\" failed for %s",
2044 "\"SSLOpenSSLConfCmd %s %s\" applied to %s",
2051 "SSL_CONF_CTX_finish() failed");
2060 "Failed to configure at least one certificate and key "
2066#if defined(HAVE_OCSP_STAPLING) && defined(SSL_CTRL_SET_CURRENT_CERT)
2083 "Unable to configure certificate %s:%d "
2093#ifdef HAVE_TLS_SESSION_TICKETS
2123 "Configuring server %s for SSL protocol", sc->
vhost_id);
2130 #ifndef OPENSSL_NO_OCSP
2136 sdc->proxy->sc = sc;
2137 if (
sdc->proxy_enabled ==
TRUE) {
2146 sdc->proxy_post_config = 1;
2168 for (
s = base_server;
s;
s =
s->
next) {
2174 "Init: (%s) You configured HTTPS(%d) "
2175 "on the standard HTTP(%d) port!",
2183 "Init: (%s) You configured HTTP(%d) "
2184 "on the standard HTTPS(%d) port!",
2198 for (
s = base_server;
s;
s =
s->
next) {
2213 "Init: SSL server IP/port conflict: "
2214 "%s (%s:%d) vs. %s (%s:%d)",
2216 (
s->defn_name ?
s->defn_name :
"unknown"),
2230 "Init: Name-based SSL virtual hosts require "
2231 "an OpenSSL version with support for TLS extensions "
2232 "(RFC 6066 - Server Name Indication / SNI), "
2233 "but the currently used library version (%s) is "
2252 if (
pdc->proxy_enabled) {
2265 pdc->proxy_post_config = 1;
2306 const char *ca_file,
2322 "Failed to load SSLCACertificateFile: %s", ca_file);
2334 "Failed to open Certificate Path `%s'",
ca_path);
2352#ifdef HAVE_OCSP_STAPLING
2372 for (
s = base_server;
s;
s =
s->
next) {
2378 #ifndef OPENSSL_NO_OCSP
2384#if MODSSL_USE_OPENSSL_PRE_1_1_API
const char apr_size_t len
#define AP_SERVER_BASEVERSION
static apr_pool_t * pconf
#define ap_get_module_config(v, m)
struct ap_conf_vector_t ap_conf_vector_t
char * ap_server_root_relative(apr_pool_t *p, const char *fname)
request_rec int int apr_table_t const char * path
const char server_rec server_rec ** ps
void ap_add_version_component(apr_pool_t *pconf, const char *component)
#define DEFAULT_HTTPS_PORT
#define DEFAULT_HTTP_PORT
const char * ap_get_server_protocol(server_rec *s)
const unsigned char * buf
int ap_ssl_answer_challenge(conn_rec *c, const char *server_name, const char **pcert_pem, const char **pkey_pem)
apr_status_t ap_ssl_add_cert_files(server_rec *s, apr_pool_t *p, apr_array_header_t *cert_files, apr_array_header_t *key_files)
apr_status_t ap_ssl_add_fallback_cert_files(server_rec *s, apr_pool_t *p, apr_array_header_t *cert_files, apr_array_header_t *key_files)
apr_uint32_t ap_max_mem_free
apr_brigade_flush void * ctx
apr_pool_t apr_dbd_t apr_dbd_results_t ** res
#define APR_IMPLEMENT_OPTIONAL_HOOK_RUN_ALL(ns, link, ret, name, args_decl, args_use, ok, decline)
#define HTTP_INTERNAL_SERVER_ERROR
#define BN_get_rfc3526_prime_4096
int ssl_callback_NewSessionCacheEntry(SSL *ssl, SSL_SESSION *session)
apr_status_t ssl_die(server_rec *s)
DH * modssl_get_dh_params(unsigned keylen)
void ssl_scache_kill(server_rec *)
int modssl_is_engine_id(const char *name)
apr_status_t ssl_init_CheckServers(server_rec *base_server, apr_pool_t *p)
apr_status_t modssl_load_engine_keypair(server_rec *s, apr_pool_t *pconf, apr_pool_t *ptemp, const char *vhostid, const char *certid, const char *keyid, X509 **pubkey, EVP_PKEY **privkey)
#define SSL_VERIFY_PEER_STRICT
SSLModConfigRec * ssl_config_global_create(server_rec *s)
* ssl_init_FindCAList(server_rec *, apr_pool_t *, const char *, const char *)
apr_status_t ssl_init_Module(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *base_server)
char * ssl_util_vhostid(apr_pool_t *, server_rec *)
#define SSL_PROTOCOL_TLSV1
apr_status_t ssl_scache_init(server_rec *, apr_pool_t *)
#define BN_get_rfc3526_prime_2048
apr_status_t ssl_load_encrypted_pkey(server_rec *s, apr_pool_t *p, int idx, const char *pkey_file, apr_array_header_t **pphrases)
apr_status_t ssl_init_ModuleKill(void *data)
DH * modssl_dh_from_file(const char *)
DH * ssl_callback_TmpDH(SSL *ssl, int export, int keylen)
#define BN_get_rfc2409_prime_1024
char * ssl_var_lookup(apr_pool_t *p, server_rec *s, conn_rec *c, request_rec *r, char *var)
#define MODSSL_SSL_METHOD_CONST
int ssl_proxy_section_post_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s, ap_conf_vector_t *section_config)
void ssl_config_proxy_merge(apr_pool_t *p, SSLDirConfigRec *base, SSLDirConfigRec *conf)
#define BN_get_rfc3526_prime_8192
#define BN_get_rfc3526_prime_3072
void ssl_log_ssl_error(const char *file, int line, int level, server_rec *s)
#define BN_get_rfc3526_prime_6144
int ssl_is_challenge(conn_rec *c, const char *servername, X509 **pcert, EVP_PKEY **pkey, const char **pcert_pem, const char **pkey_pem)
int ssl_stapling_mutex_reinit(server_rec *, apr_pool_t *)
void ssl_callback_Info(const SSL *ssl, int where, int rc)
void ssl_callback_DelSessionCacheEntry(SSL_CTX *ctx, SSL_SESSION *session)
apr_status_t ssl_init_Engine(server_rec *s, apr_pool_t *p)
#define SSL_SESSION_CACHE_TIMEOUT
ssl_asn1_t * ssl_asn1_table_get(apr_hash_t *table, const char *key)
apr_status_t ssl_init_ConfigureServer(server_rec *s, apr_pool_t *p, apr_pool_t *ptemp, SSLSrvConfigRec *sc, apr_array_header_t *pphrases)
int ssl_mutex_init(server_rec *s, apr_pool_t *p)
SSL_SESSION * ssl_callback_GetSessionCacheEntry(SSL *ssl, unsigned char *id, int idlen, int *do_copy)
void ssl_init_Child(apr_pool_t *p, server_rec *s)
#define SSL_PROTOCOL_NONE
int ssl_rand_seed(server_rec *s, apr_pool_t *p, ssl_rsctx_t nCtx, char *prefix)
int ssl_mutex_reinit(server_rec *s, apr_pool_t *p)
int ssl_callback_proxy_cert(SSL *ssl, X509 **x509, EVP_PKEY **pkey)
#define SSL_PROTOCOL_SSLV3
void ssl_init_ocsp_certificates(server_rec *s, modssl_ctx_t *mctx)
void ssl_config_global_fix(SSLModConfigRec *mc)
int ssl_callback_SSLVerify(int ok, X509_STORE_CTX *ctx)
@ SSL_CVERIFY_OPTIONAL_NO_CA
void modssl_init_app_data2_idx(void)
#define MODSSL_LIBRARY_VERSION
#define MODSSL_LIBRARY_DYNTEXT
#define MODSSL_LIBRARY_NAME
#define MODSSL_LIBRARY_TEXT
unsigned int modssl_X509_getBC(X509 *cert, int *ca, int *pathlen)
int ssl_run_answer_challenge(conn_rec *c, const char *server_name, X509 **pcert, EVP_PKEY **pkey)
int ssl_run_init_server(server_rec *s, apr_pool_t *p, int is_proxy, SSL_CTX *ctx)
int ssl_run_add_fallback_cert_files(server_rec *s, apr_pool_t *p, apr_array_header_t *cert_files, apr_array_header_t *key_files)
int ssl_run_add_cert_files(server_rec *s, apr_pool_t *p, apr_array_header_t *cert_files, apr_array_header_t *key_files)
#define AP_DEBUG_ASSERT(exp)
#define APR_ALLOCATOR_MAX_FREE_UNLIMITED
const char apr_file_t * file
#define APR_FOPEN_LARGEFILE
apr_vformatter_buff_t * c
apr_uint32_t apr_pool_t apr_uint32_t apr_pollset_method_e method
#define apr_pcalloc(p, size)
apr_size_t const char * filename
#define APR_ARRAY_IDX(ary, i, type)
apr_int32_t apr_int32_t apr_int32_t err
Multi-Processing Modules functions.
static apr_status_t ssl_init_proxy_ctx(server_rec *s, apr_pool_t *p, apr_pool_t *ptemp, modssl_ctx_t *proxy)
static apr_status_t ssl_init_server_certs(server_rec *s, apr_pool_t *p, apr_pool_t *ptemp, modssl_ctx_t *mctx, apr_array_header_t *pphrases)
static apr_status_t ssl_init_server_ctx(server_rec *s, apr_pool_t *p, apr_pool_t *ptemp, SSLSrvConfigRec *sc, apr_array_header_t *pphrases)
static apr_status_t ssl_init_ctx_protocol(server_rec *s, apr_pool_t *p, apr_pool_t *ptemp, modssl_ctx_t *mctx)
static APR_INLINE unsigned long modssl_runtime_lib_version(void)
static apr_status_t ssl_init_ctx_cert_chain(server_rec *s, apr_pool_t *p, apr_pool_t *ptemp, modssl_ctx_t *mctx)
static int use_certificate_chain(SSL_CTX *ctx, char *file, int skipfirst, pem_password_cb *cb)
static void init_dh_params(void)
static void ssl_add_version_components(apr_pool_t *ptemp, apr_pool_t *pconf, server_rec *s)
#define MODSSL_CFG_ITEM_FREE(func, item)
static APR_INLINE int modssl_X509_STORE_load_locations(X509_STORE *store, const char *file, const char *path)
static unsigned int load_x509_info(apr_pool_t *ptemp, STACK_OF(X509_INFO) *sk, const char *filename)
static apr_status_t ssl_init_ctx_crl(server_rec *s, apr_pool_t *p, apr_pool_t *ptemp, modssl_ctx_t *mctx)
#define MODSSL_BLOCKS_RENEG
static APR_INLINE int modssl_CTX_load_verify_locations(SSL_CTX *ctx, const char *file, const char *path)
static void free_dh_params(void)
static apr_status_t ssl_init_ctx_cipher_suite(server_rec *s, apr_pool_t *p, apr_pool_t *ptemp, modssl_ctx_t *mctx)
static apr_status_t ssl_init_ca_cert_path(server_rec *, apr_pool_t *, const char *, STACK_OF(X509_NAME) *, STACK_OF(X509_INFO) *)
static void ssl_init_ctx_callbacks(server_rec *s, apr_pool_t *p, apr_pool_t *ptemp, modssl_ctx_t *mctx)
static int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g)
static void ssl_check_public_cert(server_rec *s, apr_pool_t *ptemp, X509 *cert, const char *key_id)
static void ssl_init_ctx_cleanup(modssl_ctx_t *mctx)
static apr_status_t ssl_init_proxy_certs(server_rec *s, apr_pool_t *p, apr_pool_t *ptemp, modssl_ctx_t *mctx)
static apr_status_t ssl_init_ctx_verify(server_rec *s, apr_pool_t *p, apr_pool_t *ptemp, modssl_ctx_t *mctx)
static int ssl_no_passwd_prompt_cb(char *buf, int size, int rwflag, void *userdata)
static void ssl_init_ctx_session_cache(server_rec *s, apr_pool_t *p, apr_pool_t *ptemp, modssl_ctx_t *mctx)
static DH * make_dh_params(BIGNUM *(*prime)(BIGNUM *))
static struct dhparam dhparams[]
static apr_status_t ssl_cleanup_proxy_ctx(void *data)
static apr_status_t ssl_init_ctx(server_rec *s, apr_pool_t *p, apr_pool_t *ptemp, modssl_ctx_t *mctx)
#define CHECK_PRIVKEY_ERROR(ec)
void ssl_log_xerror(const char *file, int line, int level, apr_status_t rv, apr_pool_t *ptemp, server_rec *s, X509 *cert, const char *fmt,...)
Internal interfaces private to mod_ssl.
unsigned int modssl_X509_match_name(apr_pool_t *p, X509 *x509, const char *name, unsigned int allow_wildcard, server_rec *s)
unsigned int cipher_server_pref
unsigned int session_tickets
int session_cache_timeout
unsigned int insecure_reneg
Structure to store things which are per connection.
BIGNUM *(*const prime)(BIGNUM *)
ssl_pphrase_t pphrase_dialog_type
const char * ca_cert_file
apr_array_header_t * key_files
apr_array_header_t * cert_files
A structure to store information for each virtual server.
unsigned defn_line_number
apr_status_t apr_dir_read(apr_finfo_t *finfo, apr_int32_t wanted, apr_dir_t *thedir)
apr_status_t apr_dir_close(apr_dir_t *thedir)
apr_status_t apr_dir_open(apr_dir_t **new, const char *dirname, apr_pool_t *pool)
static size_t keylen(KEY s)