Ticket #921: lighttpd-1.4.13_ssl_client_verify_0.2.patch

File lighttpd-1.4.13_ssl_client_verify_0.2.patch, 4.6 kB (added by Lars, 18 months ago)
  • lighttpd-1.4.13

    diff -pruN lighttpd-1.4.13.orig/src/base.h lighttpd-1.4.13/src/base.h
    old new  
    265265        buffer *ssl_ca_file; 
    266266        buffer *ssl_cipher_list; 
    267267        unsigned short ssl_use_sslv2; 
     268        unsigned short ssl_verify_peer; 
     269        unsigned short ssl_verify_depth; 
    268270 
    269271        unsigned short use_ipv6; 
    270272        unsigned short is_ssl; 
  • src/configfile.c

    diff -pruN lighttpd-1.4.13.orig/src/configfile.c lighttpd-1.4.13/src/configfile.c
    old new  
    8989                { "server.core-files",           NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION }, /* 45 */ 
    9090                { "ssl.cipher-list",             NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_SERVER },      /* 46 */ 
    9191                { "ssl.use-sslv2",               NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION }, /* 47 */ 
     92                { "ssl.verify-peer",             NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_SERVER },     /* 48 */ 
     93                { "ssl.verify-depth",            NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_SERVER },       /* 49 */ 
    9294 
    9395                { "server.host",                 "use server.bind instead", T_CONFIG_DEPRECATED, T_CONFIG_SCOPE_UNSET }, 
    9496                { "server.docroot",              "use server.document-root instead", T_CONFIG_DEPRECATED, T_CONFIG_SCOPE_UNSET }, 
     
    155157                s->max_write_idle = 360; 
    156158                s->use_xattr     = 0; 
    157159                s->is_ssl        = 0; 
     160                s->ssl_verify_peer = 0; 
     161                s->ssl_verify_depth = 9; 
    158162                s->ssl_use_sslv2 = 1; 
    159163                s->use_ipv6      = 0; 
    160164#ifdef HAVE_LSTAT 
     
    206210 
    207211                cv[46].destination = s->ssl_cipher_list; 
    208212                cv[47].destination = &(s->ssl_use_sslv2); 
     213                cv[48].destination = &(s->ssl_verify_peer); 
     214                cv[49].destination = &(s->ssl_verify_depth); 
    209215 
    210216                srv->config_storage[i] = s; 
    211217 
     
    327333                                PATCH(ssl_cipher_list); 
    328334                        } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("ssl.engine"))) { 
    329335                                PATCH(is_ssl); 
     336                        } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("ssl.verify-peer"))) { 
     337                                PATCH(ssl_verify_peer); 
     338                        } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("ssl.verify-depth"))) { 
     339                                PATCH(ssl_verify_depth); 
    330340#ifdef HAVE_LSTAT 
    331341                        } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("server.follow-symlink"))) { 
    332342                                PATCH(follow_symlink); 
  • src/connections.c

    diff -pruN lighttpd-1.4.13.orig/src/connections.c lighttpd-1.4.13/src/connections.c
    old new  
    13201320                                                ERR_error_string(ERR_get_error(), NULL)); 
    13211321                                return NULL; 
    13221322                        } 
     1323                        if (con->conf.ssl_verify_peer) 
     1324                        { 
     1325                                if(SSL_get_verify_result(con->ssl) != X509_V_OK) 
     1326                                { 
     1327                                        log_error_write(srv, __FILE__, __LINE__, "ss", "SSL:", 
     1328                                                        ERR_error_string(ERR_get_error(), NULL)); 
     1329                                        return NULL; 
     1330                                } 
     1331                                 
     1332                        } 
    13231333                } 
    13241334#endif 
    13251335                return con; 
  • lighttpd-1.4.13

    diff -pruN lighttpd-1.4.13.orig/src/network.c lighttpd-1.4.13/src/network.c
    old new  
    7272        buffer *b; 
    7373        int is_unix_domain_socket = 0; 
    7474        int fd; 
     75#ifdef USE_OPENSSL 
     76        pid_t pid; 
     77#endif 
    7578 
    7679#ifdef SO_ACCEPTFILTER 
    7780        struct accept_filter_arg afa; 
     
    359362                                                ERR_error_string(ERR_get_error(), NULL), s->ssl_ca_file); 
    360363                                return -1; 
    361364                        } 
     365                        if (s->ssl_verify_peer) { 
     366                                SSL_CTX_set_client_CA_list( 
     367                                        s->ssl_ctx, SSL_load_client_CA_file(s->ssl_ca_file->ptr)); 
     368                        } 
    362369                } 
    363370 
    364371                if (SSL_CTX_use_certificate_file(s->ssl_ctx, s->ssl_pemfile->ptr, SSL_FILETYPE_PEM) < 0) { 
     
    380387                                        s->ssl_pemfile); 
    381388                        return -1; 
    382389                } 
     390                 
     391                if (s->ssl_verify_peer) { 
     392                        SSL_CTX_set_verify(s->ssl_ctx, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, NULL); 
     393                        SSL_CTX_set_verify_depth(s->ssl_ctx, s->ssl_verify_depth); 
     394                } 
     395                 
     396                pid = getpid(); 
     397                if (SSL_CTX_set_session_id_context(s->ssl_ctx, (void*)&pid, sizeof(pid)) != 1) { 
     398                        log_error_write(srv, __FILE__, __LINE__, "ss", "SSL:", 
     399                                        ERR_error_string(ERR_get_error(), NULL)); 
     400                        return -1; 
     401                } 
     402                 
    383403                SSL_CTX_set_default_read_ahead(s->ssl_ctx, 1); 
    384404                SSL_CTX_set_mode(s->ssl_ctx, SSL_CTX_get_mode(s->ssl_ctx) | SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER); 
    385405