Changeset 7a82302e42af9b267a7e01baf5413e332772f261

Show
Ignore:
Timestamp:
04/27/08 18:04:36 (10 years ago)
Author:
Theo Schlossnagle <jesus@omniti.com>
git-committer:
Theo Schlossnagle <jesus@omniti.com> 1209319476 +0000
git-parent:

[2813552f03f008760ad05253249246d6b3941385]

git-author:
Theo Schlossnagle <jesus@omniti.com> 1209319476 +0000
Message:

add cert validation hooks

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • src/modules/http.c

    r2813552 r7a82302  
    422422                              apr_pool_t *pool) { 
    423423} 
    424  
     424static apr_status_t need_client_cert(void *data, 
     425                                     const char **path) { 
     426  app_baton_t *ctx = data; 
     427  *path = ctx->certificate_file; 
     428  return APR_SUCCESS; 
     429
     430static apr_status_t need_server_cert(void *data, 
     431                                     int failures, 
     432                                     const serf_ssl_certificate_t *cert) { 
     433  return APR_SUCCESS; 
     434
    425435static serf_bucket_t* conn_setup(apr_socket_t *skt, 
    426436                                void *setup_baton, 
     
    431441  c = serf_bucket_socket_create(skt, ctx->bkt_alloc); 
    432442  if (ctx->using_ssl) { 
    433       c = serf_bucket_ssl_decrypt_create(c, ctx->ssl_ctx, ctx->bkt_alloc); 
    434       if (!ctx->ssl_ctx) { 
    435           ctx->ssl_ctx = serf_bucket_ssl_decrypt_context_get(c); 
    436           serf_ssl_use_default_certificates(ctx->ssl_ctx); 
    437       } 
     443    c = serf_bucket_ssl_decrypt_create(c, ctx->ssl_ctx, ctx->bkt_alloc); 
     444    if (!ctx->ssl_ctx) { 
     445      serf_ssl_certificate_t *cert; 
     446      ctx->ssl_ctx = serf_bucket_ssl_decrypt_context_get(c); 
     447 
     448      /* Setup CA chain */ 
     449      if(ctx->ca_chain_file && 
     450         serf_ssl_load_cert_file(&cert, ctx->ca_chain_file, 
     451                                 pool) != APR_SUCCESS) 
     452        serf_ssl_trust_cert(ctx->ssl_ctx, cert); 
     453      else 
     454        serf_ssl_use_default_certificates(ctx->ssl_ctx); 
     455      serf_ssl_server_cert_callback_set(ctx->ssl_ctx, need_server_cert, 
     456                                        ctx); 
     457 
     458      /* Setup client cert */ 
     459      serf_ssl_client_cert_provider_set(ctx->ssl_ctx, need_client_cert, 
     460                                        ctx, pool); 
     461    } 
    438462  } 
    439463 
     
    710734  if (strcasecmp(ci->url.scheme, "https") == 0) { 
    711735    void *vstr; 
     736    serf_module_conf_t *conf; 
     737    conf = noit_module_get_userdata(self); 
     738 
    712739    ci->app_ctx.using_ssl = 1; 
     740 
    713741    if(noit_hash_retrieve(check->config, "ca_chain", 
    714742                          strlen("ca_chain"), &vstr)) 
    715743      ci->app_ctx.ca_chain_file = apr_pstrdup(ci->pool, vstr); 
     744    else if(noit_hash_retrieve(conf->options, "ca_chain", 
     745                               strlen("ca_chain"), &vstr)) 
     746      ci->app_ctx.ca_chain_file = apr_pstrdup(ci->pool, vstr); 
     747 
    716748    if(noit_hash_retrieve(check->config, "certificate_file", 
    717749                          strlen("certificate_file"), &vstr)) 
     750      ci->app_ctx.certificate_file = apr_pstrdup(ci->pool, vstr); 
     751    else if(noit_hash_retrieve(conf->options, "certificate_file", 
     752                               strlen("certificate_file"), &vstr)) 
    718753      ci->app_ctx.certificate_file = apr_pstrdup(ci->pool, vstr); 
    719754  }