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

📄 mod_ssl.c

📁 linux网络服务器工具
💻 C
📖 第 1 页 / 共 2 页
字号:
    SSL_library_init();#if HAVE_ENGINE_LOAD_BUILTIN_ENGINES    ENGINE_load_builtin_engines();#endif#ifdef HAVE_OPENSSL    OpenSSL_add_all_algorithms();#if OPENSSL_VERSION_NUMBER >= 0x00907001    OPENSSL_load_builtin_modules();#endif#endif    /*     * Let us cleanup the ssl library when the module is unloaded     */    apr_pool_cleanup_register(pconf, NULL, ssl_cleanup_pre_config,                                           apr_pool_cleanup_null);    /* Register us to handle mod_log_config %c/%x variables */    ssl_var_log_config_register(pconf);    /* Register to handle mod_status status page generation */    ssl_scache_status_register(pconf);    return OK;}static SSLConnRec *ssl_init_connection_ctx(conn_rec *c){    SSLConnRec *sslconn = myConnConfig(c);    if (sslconn) {        return sslconn;    }    sslconn = apr_pcalloc(c->pool, sizeof(*sslconn));    myConnConfigSet(c, sslconn);    return sslconn;}int ssl_proxy_enable(conn_rec *c){    SSLSrvConfigRec *sc = mySrvConfig(c->base_server);    SSLConnRec *sslconn = ssl_init_connection_ctx(c);    if (!sc->proxy_enabled) {        ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c,                      "SSL Proxy requested for %s but not enabled "                      "[Hint: SSLProxyEngine]", sc->vhost_id);        return 0;    }    sslconn->is_proxy = 1;    sslconn->disabled = 0;    return 1;}int ssl_engine_disable(conn_rec *c){    SSLSrvConfigRec *sc = mySrvConfig(c->base_server);    SSLConnRec *sslconn;    if (sc->enabled == SSL_ENABLED_FALSE) {        return 0;    }    sslconn = ssl_init_connection_ctx(c);    sslconn->disabled = 1;    return 1;}int ssl_init_ssl_connection(conn_rec *c){    SSLSrvConfigRec *sc = mySrvConfig(c->base_server);    SSL *ssl;    SSLConnRec *sslconn = myConnConfig(c);    char *vhost_md5;    modssl_ctx_t *mctx;    /*     * Seed the Pseudo Random Number Generator (PRNG)     */    ssl_rand_seed(c->base_server, c->pool, SSL_RSCTX_CONNECT, "");    if (!sslconn) {        sslconn = ssl_init_connection_ctx(c);    }    mctx = sslconn->is_proxy ? sc->proxy : sc->server;    /*     * Create a new SSL connection with the configured server SSL context and     * attach this to the socket. Additionally we register this attachment     * so we can detach later.     */    if (!(ssl = SSL_new(mctx->ssl_ctx))) {        ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c,                      "Unable to create a new SSL connection from the SSL "                      "context");        ssl_log_ssl_error(APLOG_MARK, APLOG_ERR, c->base_server);        c->aborted = 1;        return DECLINED; /* XXX */    }    vhost_md5 = ap_md5_binary(c->pool, (unsigned char *)sc->vhost_id,                              sc->vhost_id_len);    if (!SSL_set_session_id_context(ssl, (unsigned char *)vhost_md5,                                    APR_MD5_DIGESTSIZE*2))    {        ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c,                      "Unable to set session id context to `%s'", vhost_md5);        ssl_log_ssl_error(APLOG_MARK, APLOG_ERR, c->base_server);        c->aborted = 1;        return DECLINED; /* XXX */    }    SSL_set_app_data(ssl, c);    SSL_set_app_data2(ssl, NULL); /* will be request_rec */    sslconn->ssl = ssl;    /*     *  Configure callbacks for SSL connection     */    SSL_set_tmp_rsa_callback(ssl, ssl_callback_TmpRSA);    SSL_set_tmp_dh_callback(ssl,  ssl_callback_TmpDH);    SSL_set_verify_result(ssl, X509_V_OK);    ssl_io_filter_init(c, ssl);    return APR_SUCCESS;}static const char *ssl_hook_http_scheme(const request_rec *r){    SSLSrvConfigRec *sc = mySrvConfig(r->server);    if (sc->enabled == SSL_ENABLED_FALSE || sc->enabled == SSL_ENABLED_OPTIONAL) {        return NULL;    }    return "https";}static apr_port_t ssl_hook_default_port(const request_rec *r){    SSLSrvConfigRec *sc = mySrvConfig(r->server);    if (sc->enabled == SSL_ENABLED_FALSE || sc->enabled == SSL_ENABLED_OPTIONAL) {        return 0;    }    return 443;}static int ssl_hook_pre_connection(conn_rec *c, void *csd){    SSLSrvConfigRec *sc = mySrvConfig(c->base_server);    SSLConnRec *sslconn = myConnConfig(c);    /*     * Immediately stop processing if SSL is disabled for this connection     */    if (!(sc && (sc->enabled == SSL_ENABLED_TRUE ||                 (sslconn && sslconn->is_proxy))))    {        return DECLINED;    }    /*     * Create SSL context     */    if (!sslconn) {        sslconn = ssl_init_connection_ctx(c);    }    if (sslconn->disabled) {        return DECLINED;    }    /*     * Remember the connection information for     * later access inside callback functions     */    ap_log_cerror(APLOG_MARK, APLOG_INFO, 0, c,                  "Connection to child %ld established "                  "(server %s)", c->id, sc->vhost_id);    return ssl_init_ssl_connection(c);}static void ssl_hook_Insert_Filter(request_rec *r){    SSLSrvConfigRec *sc = mySrvConfig(r->server);    if (sc->enabled == SSL_ENABLED_OPTIONAL) {        ap_add_output_filter("UPGRADE_FILTER", NULL, r, r->connection);    }}/* *  the module registration phase */static void ssl_register_hooks(apr_pool_t *p){    /* ssl_hook_ReadReq needs to use the BrowserMatch settings so must     * run after mod_setenvif's post_read_request hook. */    static const char *pre_prr[] = { "mod_setenvif.c", NULL };    ssl_io_filter_register(p);    ap_hook_pre_connection(ssl_hook_pre_connection,NULL,NULL, APR_HOOK_MIDDLE);    ap_hook_test_config   (ssl_hook_ConfigTest,    NULL,NULL, APR_HOOK_MIDDLE);    ap_hook_post_config   (ssl_init_Module,        NULL,NULL, APR_HOOK_MIDDLE);    ap_hook_http_scheme   (ssl_hook_http_scheme,   NULL,NULL, APR_HOOK_MIDDLE);    ap_hook_default_port  (ssl_hook_default_port,  NULL,NULL, APR_HOOK_MIDDLE);    ap_hook_pre_config    (ssl_hook_pre_config,    NULL,NULL, APR_HOOK_MIDDLE);    ap_hook_child_init    (ssl_init_Child,         NULL,NULL, APR_HOOK_MIDDLE);    ap_hook_check_user_id (ssl_hook_UserCheck,     NULL,NULL, APR_HOOK_FIRST);    ap_hook_fixups        (ssl_hook_Fixup,         NULL,NULL, APR_HOOK_MIDDLE);    ap_hook_access_checker(ssl_hook_Access,        NULL,NULL, APR_HOOK_MIDDLE);    ap_hook_auth_checker  (ssl_hook_Auth,          NULL,NULL, APR_HOOK_MIDDLE);    ap_hook_post_read_request(ssl_hook_ReadReq, pre_prr,NULL, APR_HOOK_MIDDLE);    ap_hook_insert_filter (ssl_hook_Insert_Filter, NULL,NULL, APR_HOOK_MIDDLE);/*    ap_hook_handler       (ssl_hook_Upgrade,       NULL,NULL, APR_HOOK_MIDDLE); */    ssl_var_register(p);    APR_REGISTER_OPTIONAL_FN(ssl_proxy_enable);    APR_REGISTER_OPTIONAL_FN(ssl_engine_disable);    APR_REGISTER_OPTIONAL_FN(ssl_extlist_by_oid);}module AP_MODULE_DECLARE_DATA ssl_module = {    STANDARD20_MODULE_STUFF,    ssl_config_perdir_create,   /* create per-dir    config structures */    ssl_config_perdir_merge,    /* merge  per-dir    config structures */    ssl_config_server_create,   /* create per-server config structures */    ssl_config_server_merge,    /* merge  per-server config structures */    ssl_config_cmds,            /* table of configuration directives   */    ssl_register_hooks          /* register hooks */};

⌨️ 快捷键说明

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