comparison src/http/ngx_http_request.c @ 4033:4e1a489c26cd

Better handling of various per-server ssl options with SNI. SSL_set_SSL_CTX() doesn't touch values cached within ssl connection structure, it only changes certificates (at least as of now, OpenSSL 1.0.0d and earlier). As a result settings like ssl_verify_client, ssl_verify_depth, ssl_prefer_server_ciphers are only configurable on per-socket basis while with SNI it should be possible to specify them different for two servers listening on the same socket. Workaround is to explicitly re-apply settings we care about from context to ssl connection in servername callback. Note that SSL_clear_options() is only available in OpenSSL 0.9.8m+. I.e. with older versions it is not possible to clear ssl_prefer_server_ciphers option if it's set in default server for a socket.
author Maxim Dounin <mdounin@mdounin.ru>
date Tue, 23 Aug 2011 14:36:31 +0000
parents 07d1aa82899b
children 7ce8f2cde0af
comparison
equal deleted inserted replaced
4032:7968f1edbdde 4033:4e1a489c26cd
671 671
672 sscf = ngx_http_get_module_srv_conf(r, ngx_http_ssl_module); 672 sscf = ngx_http_get_module_srv_conf(r, ngx_http_ssl_module);
673 673
674 SSL_set_SSL_CTX(ssl_conn, sscf->ssl.ctx); 674 SSL_set_SSL_CTX(ssl_conn, sscf->ssl.ctx);
675 675
676 /*
677 * SSL_set_SSL_CTX() only changes certs as of 1.0.0d
678 * adjust other things we care about
679 */
680
681 SSL_set_verify(ssl_conn, SSL_CTX_get_verify_mode(sscf->ssl.ctx),
682 SSL_CTX_get_verify_callback(sscf->ssl.ctx));
683
684 SSL_set_verify_depth(ssl_conn, SSL_CTX_get_verify_depth(sscf->ssl.ctx));
685
686 #ifdef SSL_CTRL_CLEAR_OPTIONS
687 /* only in 0.9.8m+ */
688 SSL_clear_options(ssl_conn, SSL_get_options(ssl_conn) &
689 ~SSL_CTX_get_options(sscf->ssl.ctx));
690 #endif
691
692 SSL_set_options(ssl_conn, SSL_CTX_get_options(sscf->ssl.ctx));
693
676 return SSL_TLSEXT_ERR_OK; 694 return SSL_TLSEXT_ERR_OK;
677 } 695 }
678 696
679 #endif 697 #endif
680 698