Ticket #13: proxy_ssl_verify-0.7.67.patch

File proxy_ssl_verify-0.7.67.patch, 4.8 KB (added by waloeiii.myopenid.com, 15 years ago)
  • src/event/ngx_event_openssl.c

    diff --git a/src/event/ngx_event_openssl.c b/src/event/ngx_event_openssl.c
    index 5eab4af..4fb9645 100644
    a b ngx_ssl_create(ngx_ssl_t *ssl, ngx_uint_t protocols, void *data)  
    157157    SSL_CTX_set_options(ssl->ctx, SSL_OP_NETSCAPE_CHALLENGE_BUG);
    158158    SSL_CTX_set_options(ssl->ctx, SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG);
    159159
     160    /* verification options */
     161
     162    SSL_CTX_load_verify_locations(ssl->ctx, (const char *)ssl->ca_certificate.data, NULL);
     163    SSL_CTX_set_verify(ssl->ctx, ssl->verify, NULL);
     164    SSL_CTX_set_verify_depth(ssl->ctx, ssl->verify_depth);
     165
    160166    /* server side options */
    161167
    162168    SSL_CTX_set_options(ssl->ctx, SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG);
  • src/event/ngx_event_openssl.h

    diff --git a/src/event/ngx_event_openssl.h b/src/event/ngx_event_openssl.h
    index a8f9d87..264f748 100644
    a b  
    2727typedef struct {
    2828    SSL_CTX                    *ctx;
    2929    ngx_log_t                  *log;
     30    ngx_uint_t                  verify;
     31    ngx_uint_t                  verify_depth;
     32    ngx_str_t                   ca_certificate;
    3033} ngx_ssl_t;
    3134
    3235
  • src/http/modules/ngx_http_proxy_module.c

    diff --git a/src/http/modules/ngx_http_proxy_module.c b/src/http/modules/ngx_http_proxy_module.c
    index 518bf85..232cbb0 100644
    a b static ngx_command_t ngx_http_proxy_commands[] = {  
    466466      offsetof(ngx_http_proxy_loc_conf_t, upstream.ssl_session_reuse),
    467467      NULL },
    468468
     469      { ngx_string("proxy_ssl_verify"),
     470      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
     471      ngx_conf_set_num_slot,
     472      NGX_HTTP_LOC_CONF_OFFSET,
     473      offsetof(ngx_http_proxy_loc_conf_t, upstream.ssl_verify),
     474      NULL },
     475
     476      { ngx_string("proxy_ssl_verify_depth"),
     477      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
     478      ngx_conf_set_num_slot,
     479      NGX_HTTP_LOC_CONF_OFFSET,
     480      offsetof(ngx_http_proxy_loc_conf_t, upstream.ssl_verify_depth),
     481      NULL },
     482
     483      { ngx_string("proxy_ssl_ca_certificate"),
     484      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
     485      ngx_conf_set_str_slot,
     486      NGX_HTTP_LOC_CONF_OFFSET,
     487      offsetof(ngx_http_proxy_loc_conf_t, upstream.ssl_ca_certificate),
     488      NULL },
     489
    469490#endif
    470491
    471492      ngx_null_command
    ngx_http_proxy_create_loc_conf(ngx_conf_t *cf)  
    19501971    conf->upstream.intercept_errors = NGX_CONF_UNSET;
    19511972#if (NGX_HTTP_SSL)
    19521973    conf->upstream.ssl_session_reuse = NGX_CONF_UNSET;
     1974    conf->upstream.ssl_verify = NGX_CONF_UNSET_UINT;
     1975    conf->upstream.ssl_verify_depth = NGX_CONF_UNSET_UINT;
    19531976#endif
    19541977
    19551978    /* "proxy_cyclic_temp_file" is disabled */
    ngx_http_proxy_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)  
    21962219#if (NGX_HTTP_SSL)
    21972220    ngx_conf_merge_value(conf->upstream.ssl_session_reuse,
    21982221                              prev->upstream.ssl_session_reuse, 1);
     2222    ngx_conf_merge_uint_value(conf->upstream.ssl_verify,
     2223                              prev->upstream.ssl_verify, 0);
     2224    ngx_conf_merge_uint_value(conf->upstream.ssl_verify_depth,
     2225                              prev->upstream.ssl_verify_depth, 1);
     2226    ngx_conf_merge_str_value(conf->upstream.ssl_ca_certificate,
     2227                              prev->upstream.ssl_ca_certificate, "");
     2228
     2229    if (conf->upstream.ssl_verify) {
     2230      if (conf->upstream.ssl_ca_certificate.len == 0) {
     2231        ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
     2232            "no \"proxy_ssl_ca_certificate\" is defined for "
     2233            "the \"proxy_ssl_verify\" directive");
     2234
     2235        return NGX_CONF_ERROR;
     2236      }
     2237    }
    21992238#endif
    22002239
    22012240    ngx_conf_merge_value(conf->redirect, prev->redirect, 1);
    ngx_http_proxy_set_ssl(ngx_conf_t *cf, ngx_http_proxy_loc_conf_t *plcf)  
    30113050
    30123051    plcf->upstream.ssl->log = cf->log;
    30133052
     3053    plcf->upstream.ssl->ca_certificate.len = plcf->upstream.ssl_ca_certificate.len;
     3054    plcf->upstream.ssl->ca_certificate.data = plcf->upstream.ssl_ca_certificate.data;
     3055
     3056    plcf->upstream.ssl->verify = plcf->upstream.ssl_verify;
     3057    plcf->upstream.ssl->verify_depth = plcf->upstream.ssl_verify_depth;
     3058
    30143059    if (ngx_ssl_create(plcf->upstream.ssl,
    30153060                       NGX_SSL_SSLv2|NGX_SSL_SSLv3|NGX_SSL_TLSv1, NULL)
    30163061        != NGX_OK)
  • src/http/ngx_http_upstream.h

    diff --git a/src/http/ngx_http_upstream.h b/src/http/ngx_http_upstream.h
    index 38bd7df..772bbf5 100644
    a b typedef struct {  
    173173#if (NGX_HTTP_SSL)
    174174    ngx_ssl_t                       *ssl;
    175175    ngx_flag_t                       ssl_session_reuse;
     176    ngx_uint_t                       ssl_verify;
     177    ngx_uint_t                       ssl_verify_depth;
     178    ngx_str_t                        ssl_ca_certificate;
    176179#endif
    177180
    178181} ngx_http_upstream_conf_t;