⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ngx_http_ssl_module.c

📁 nginx 反向代理0.7.1版本 用于实现反向代理
💻 C
📖 第 1 页 / 共 2 页
字号:
/* * Copyright (C) Igor Sysoev */#include <ngx_config.h>#include <ngx_core.h>#include <ngx_http.h>typedef ngx_int_t (*ngx_ssl_variable_handler_pt)(ngx_connection_t *c,    ngx_pool_t *pool, ngx_str_t *s);#define NGX_DEFLAUT_CERTIFICATE      "cert.pem"#define NGX_DEFLAUT_CERTIFICATE_KEY  "cert.pem"#define NGX_DEFLAUT_CIPHERS  "ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP"static ngx_int_t ngx_http_ssl_static_variable(ngx_http_request_t *r,    ngx_http_variable_value_t *v, uintptr_t data);static ngx_int_t ngx_http_ssl_variable(ngx_http_request_t *r,    ngx_http_variable_value_t *v, uintptr_t data);static ngx_int_t ngx_http_ssl_add_variables(ngx_conf_t *cf);static void *ngx_http_ssl_create_srv_conf(ngx_conf_t *cf);static char *ngx_http_ssl_merge_srv_conf(ngx_conf_t *cf,    void *parent, void *child);static char *ngx_http_ssl_session_cache(ngx_conf_t *cf, ngx_command_t *cmd,    void *conf);#if !defined (SSL_OP_CIPHER_SERVER_PREFERENCE)static char *ngx_http_ssl_nosupported(ngx_conf_t *cf, ngx_command_t *cmd,    void *conf);static char  ngx_http_ssl_openssl097[] = "OpenSSL 0.9.7 and higher";#endifstatic ngx_conf_bitmask_t  ngx_http_ssl_protocols[] = {    { ngx_string("SSLv2"), NGX_SSL_SSLv2 },    { ngx_string("SSLv3"), NGX_SSL_SSLv3 },    { ngx_string("TLSv1"), NGX_SSL_TLSv1 },    { ngx_null_string, 0 }};static ngx_command_t  ngx_http_ssl_commands[] = {    { ngx_string("ssl"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_FLAG,      ngx_conf_set_flag_slot,      NGX_HTTP_SRV_CONF_OFFSET,      offsetof(ngx_http_ssl_srv_conf_t, enable),      NULL },    { ngx_string("ssl_certificate"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,      ngx_conf_set_str_slot,      NGX_HTTP_SRV_CONF_OFFSET,      offsetof(ngx_http_ssl_srv_conf_t, certificate),      NULL },    { ngx_string("ssl_certificate_key"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,      ngx_conf_set_str_slot,      NGX_HTTP_SRV_CONF_OFFSET,      offsetof(ngx_http_ssl_srv_conf_t, certificate_key),      NULL },    { ngx_string("ssl_protocols"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_1MORE,      ngx_conf_set_bitmask_slot,      NGX_HTTP_SRV_CONF_OFFSET,      offsetof(ngx_http_ssl_srv_conf_t, protocols),      &ngx_http_ssl_protocols },    { ngx_string("ssl_ciphers"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,      ngx_conf_set_str_slot,      NGX_HTTP_SRV_CONF_OFFSET,      offsetof(ngx_http_ssl_srv_conf_t, ciphers),      NULL },    { ngx_string("ssl_verify_client"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_FLAG,      ngx_conf_set_flag_slot,      NGX_HTTP_SRV_CONF_OFFSET,      offsetof(ngx_http_ssl_srv_conf_t, verify),      NULL },    { ngx_string("ssl_verify_depth"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_1MORE,      ngx_conf_set_num_slot,      NGX_HTTP_SRV_CONF_OFFSET,      offsetof(ngx_http_ssl_srv_conf_t, verify_depth),      NULL },    { ngx_string("ssl_client_certificate"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,      ngx_conf_set_str_slot,      NGX_HTTP_SRV_CONF_OFFSET,      offsetof(ngx_http_ssl_srv_conf_t, client_certificate),      NULL },    { ngx_string("ssl_prefer_server_ciphers"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_FLAG,#ifdef SSL_OP_CIPHER_SERVER_PREFERENCE      ngx_conf_set_flag_slot,      NGX_HTTP_SRV_CONF_OFFSET,      offsetof(ngx_http_ssl_srv_conf_t, prefer_server_ciphers),      NULL },#else      ngx_http_ssl_nosupported, 0, 0, ngx_http_ssl_openssl097 },#endif    { ngx_string("ssl_session_cache"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE12,      ngx_http_ssl_session_cache,      NGX_HTTP_SRV_CONF_OFFSET,      0,      NULL },    { ngx_string("ssl_session_timeout"),      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,      ngx_conf_set_sec_slot,      NGX_HTTP_SRV_CONF_OFFSET,      offsetof(ngx_http_ssl_srv_conf_t, session_timeout),      NULL },      ngx_null_command};static ngx_http_module_t  ngx_http_ssl_module_ctx = {    ngx_http_ssl_add_variables,            /* preconfiguration */    NULL,                                  /* postconfiguration */    NULL,                                  /* create main configuration */    NULL,                                  /* init main configuration */    ngx_http_ssl_create_srv_conf,          /* create server configuration */    ngx_http_ssl_merge_srv_conf,           /* merge server configuration */    NULL,                                  /* create location configuration */    NULL                                   /* merge location configuration */};ngx_module_t  ngx_http_ssl_module = {    NGX_MODULE_V1,    &ngx_http_ssl_module_ctx,              /* module context */    ngx_http_ssl_commands,                 /* module directives */    NGX_HTTP_MODULE,                       /* module type */    NULL,                                  /* init master */    NULL,                                  /* init module */    NULL,                                  /* init process */    NULL,                                  /* init thread */    NULL,                                  /* exit thread */    NULL,                                  /* exit process */    NULL,                                  /* exit master */    NGX_MODULE_V1_PADDING};static ngx_http_variable_t  ngx_http_ssl_vars[] = {    { ngx_string("ssl_protocol"), NULL, ngx_http_ssl_static_variable,      (uintptr_t) ngx_ssl_get_protocol, NGX_HTTP_VAR_CHANGEABLE, 0 },    { ngx_string("ssl_cipher"), NULL, ngx_http_ssl_static_variable,      (uintptr_t) ngx_ssl_get_cipher_name, NGX_HTTP_VAR_CHANGEABLE, 0 },    { ngx_string("ssl_client_s_dn"), NULL, ngx_http_ssl_variable,      (uintptr_t) ngx_ssl_get_subject_dn, NGX_HTTP_VAR_CHANGEABLE, 0 },    { ngx_string("ssl_client_i_dn"), NULL, ngx_http_ssl_variable,      (uintptr_t) ngx_ssl_get_issuer_dn, NGX_HTTP_VAR_CHANGEABLE, 0 },    { ngx_string("ssl_client_serial"), NULL, ngx_http_ssl_variable,      (uintptr_t) ngx_ssl_get_serial_number, NGX_HTTP_VAR_CHANGEABLE, 0 },    { ngx_null_string, NULL, NULL, 0, 0, 0 }};static ngx_str_t ngx_http_ssl_sess_id_ctx = ngx_string("HTTP");static ngx_int_tngx_http_ssl_static_variable(ngx_http_request_t *r,    ngx_http_variable_value_t *v, uintptr_t data){    ngx_ssl_variable_handler_pt  handler = (ngx_ssl_variable_handler_pt) data;    size_t     len;    ngx_str_t  s;    if (r->connection->ssl) {        (void) handler(r->connection, NULL, &s);        v->data = s.data;        for (len = 0; v->data[len]; len++) { /* void */ }        v->len = len;        v->valid = 1;        v->no_cacheable = 0;        v->not_found = 0;        return NGX_OK;    }    v->not_found = 1;    return NGX_OK;}static ngx_int_tngx_http_ssl_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v,    uintptr_t data){    ngx_ssl_variable_handler_pt  handler = (ngx_ssl_variable_handler_pt) data;    ngx_str_t  s;    if (r->connection->ssl) {        if (handler(r->connection, r->pool, &s) != NGX_OK) {            return NGX_ERROR;        }        v->len = s.len;        v->data = s.data;        if (v->len) {            v->valid = 1;            v->no_cacheable = 0;            v->not_found = 0;            return NGX_OK;        }    }    v->not_found = 1;    return NGX_OK;}static ngx_int_tngx_http_ssl_add_variables(ngx_conf_t *cf){    ngx_http_variable_t  *var, *v;    for (v = ngx_http_ssl_vars; v->name.len; v++) {        var = ngx_http_add_variable(cf, &v->name, v->flags);        if (var == NULL) {            return NGX_ERROR;        }        var->get_handler = v->get_handler;        var->data = v->data;    }    return NGX_OK;}static void *ngx_http_ssl_create_srv_conf(ngx_conf_t *cf){    ngx_http_ssl_srv_conf_t  *sscf;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -