}
}
+static void ssl_init_proxy_certs(server_rec *s,
+ apr_pool_t *p,
+ apr_pool_t *ptemp,
+ modssl_ctx_t *mctx)
+{
+ int ncerts = 0;
+ STACK_OF(X509_INFO) *sk;
+ modssl_pk_proxy_t *pkp = mctx->pkp;
+
+ if (!(pkp->cert_file || pkp->cert_path)) {
+ return;
+ }
+
+ sk = sk_X509_INFO_new_null();
+
+ if (pkp->cert_file) {
+ SSL_X509_INFO_load_file(ptemp, sk, pkp->cert_file);
+ }
+
+ if (pkp->cert_path) {
+ SSL_X509_INFO_load_file(ptemp, sk, pkp->cert_path);
+ }
+
+ if ((ncerts = sk_X509_INFO_num(sk)) > 0) {
+ ssl_log(s, SSL_LOG_TRACE|SSL_INIT,
+ "loaded %d client certs for SSL proxy",
+ ncerts);
+ pkp->certs = sk;
+ }
+ else {
+ ssl_log(s, SSL_LOG_WARN|SSL_INIT,
+ "no client certs found for SSL proxy");
+ sk_X509_INFO_free(sk);
+ }
+}
+
static void ssl_init_proxy_ctx(server_rec *s,
apr_pool_t *p,
apr_pool_t *ptemp,
SSLSrvConfigRec *sc)
{
ssl_init_ctx(s, p, ptemp, sc->proxy);
+
+ ssl_init_proxy_certs(s, p, ptemp, sc->proxy);
}
static void ssl_init_server_ctx(server_rec *s,