mirror of
https://github.com/apache/httpd.git
synced 2025-08-08 15:02:10 +03:00
Revamp CRL checking for client and remote servers:
- completely delegate CRL processing to OpenSSL - introduce a new [Proxy]CARevocationCheck directive - drop ssl_callback_SSLVerify_CRL from ssl_engine_kernel.c - remove X509_STORE from modssl_ctx_t - drop CRL store helper functions from ssl_util_ssl.c - avoid sending "certificate_expired" SSL alerts to peers when the nextUpdate field of a CRL is in the past git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1165056 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
@@ -726,28 +726,55 @@ static void ssl_init_ctx_crl(server_rec *s,
|
||||
apr_pool_t *ptemp,
|
||||
modssl_ctx_t *mctx)
|
||||
{
|
||||
X509_STORE *store = SSL_CTX_get_cert_store(mctx->ssl_ctx);
|
||||
unsigned long crlflags = 0;
|
||||
char *cfgp = mctx->pkp ? "SSLProxy" : "SSL";
|
||||
|
||||
/*
|
||||
* Configure Certificate Revocation List (CRL) Details
|
||||
*/
|
||||
|
||||
if (!(mctx->crl_file || mctx->crl_path)) {
|
||||
if (mctx->crl_check_mode == SSL_CRLCHECK_LEAF ||
|
||||
mctx->crl_check_mode == SSL_CRLCHECK_CHAIN) {
|
||||
ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s,
|
||||
"Host %s: CRL checking has been enabled, but "
|
||||
"neither %sCARevocationFile nor %sCARevocationPath "
|
||||
"is configured", mctx->sc->vhost_id, cfgp, cfgp);
|
||||
ssl_die();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
|
||||
"Configuring certificate revocation facility");
|
||||
|
||||
mctx->crl =
|
||||
SSL_X509_STORE_create((char *)mctx->crl_file,
|
||||
(char *)mctx->crl_path);
|
||||
|
||||
if (!mctx->crl) {
|
||||
if (!store || !X509_STORE_load_locations(store, mctx->crl_file,
|
||||
mctx->crl_path)) {
|
||||
ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s,
|
||||
"Unable to configure X.509 CRL storage "
|
||||
"for certificate revocation");
|
||||
"Host %s: unable to configure X.509 CRL storage "
|
||||
"for certificate revocation", mctx->sc->vhost_id);
|
||||
ssl_log_ssl_error(SSLLOG_MARK, APLOG_EMERG, s);
|
||||
ssl_die();
|
||||
}
|
||||
|
||||
switch (mctx->crl_check_mode) {
|
||||
case SSL_CRLCHECK_LEAF:
|
||||
crlflags = X509_V_FLAG_CRL_CHECK;
|
||||
break;
|
||||
case SSL_CRLCHECK_CHAIN:
|
||||
crlflags = X509_V_FLAG_CRL_CHECK|X509_V_FLAG_CRL_CHECK_ALL;
|
||||
break;
|
||||
}
|
||||
|
||||
if (crlflags) {
|
||||
X509_STORE_set_flags(store, crlflags);
|
||||
} else {
|
||||
ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s,
|
||||
"Host %s: X.509 CRL storage locations configured, "
|
||||
"but CRL checking (%sCARevocationCheck) is not "
|
||||
"enabled", mctx->sc->vhost_id, cfgp);
|
||||
}
|
||||
}
|
||||
|
||||
static void ssl_init_ctx_pkcs7_cert_chain(server_rec *s, modssl_ctx_t *mctx)
|
||||
@@ -1432,8 +1459,6 @@ void ssl_init_Child(apr_pool_t *p, server_rec *s)
|
||||
|
||||
static void ssl_init_ctx_cleanup(modssl_ctx_t *mctx)
|
||||
{
|
||||
MODSSL_CFG_ITEM_FREE(X509_STORE_free, mctx->crl);
|
||||
|
||||
MODSSL_CFG_ITEM_FREE(SSL_CTX_free, mctx->ssl_ctx);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user