summaryrefslogtreecommitdiffhomepage
path: root/src/event
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2008-03-10 14:47:07 +0000
committerIgor Sysoev <igor@sysoev.ru>2008-03-10 14:47:07 +0000
commit472233d0a349c4658f7339e3e94455230bd0e1f1 (patch)
tree40d636235ac57ca719cade5226d993827848d955 /src/event
parentfb14092fdc9281b96dd6cd9715c834e07618d9c2 (diff)
downloadnginx-472233d0a349c4658f7339e3e94455230bd0e1f1.tar.gz
nginx-472233d0a349c4658f7339e3e94455230bd0e1f1.tar.bz2
invalidate SSL session if there is no valid client certificate
Diffstat (limited to 'src/event')
-rw-r--r--src/event/ngx_event_openssl.c13
-rw-r--r--src/event/ngx_event_openssl.h1
2 files changed, 14 insertions, 0 deletions
diff --git a/src/event/ngx_event_openssl.c b/src/event/ngx_event_openssl.c
index 8ba3e8e39..9f964dabe 100644
--- a/src/event/ngx_event_openssl.c
+++ b/src/event/ngx_event_openssl.c
@@ -1552,6 +1552,15 @@ done:
}
+void
+ngx_ssl_remove_cached_session(SSL_CTX *ssl, ngx_ssl_session_t *sess)
+{
+ SSL_CTX_remove_session(ssl, sess);
+
+ ngx_ssl_remove_session(ssl, sess);
+}
+
+
static void
ngx_ssl_remove_session(SSL_CTX *ssl, ngx_ssl_session_t *sess)
{
@@ -1567,6 +1576,10 @@ ngx_ssl_remove_session(SSL_CTX *ssl, ngx_ssl_session_t *sess)
shm_zone = SSL_CTX_get_ex_data(ssl, ngx_ssl_session_cache_index);
+ if (shm_zone == NULL) {
+ return;
+ }
+
cache = shm_zone->data;
id = sess->session_id;
diff --git a/src/event/ngx_event_openssl.h b/src/event/ngx_event_openssl.h
index e027dde86..b9771c121 100644
--- a/src/event/ngx_event_openssl.h
+++ b/src/event/ngx_event_openssl.h
@@ -105,6 +105,7 @@ ngx_int_t ngx_ssl_session_cache(ngx_ssl_t *ssl, ngx_str_t *sess_ctx,
ngx_int_t ngx_ssl_create_connection(ngx_ssl_t *ssl, ngx_connection_t *c,
ngx_uint_t flags);
+void ngx_ssl_remove_cached_session(SSL_CTX *ssl, ngx_ssl_session_t *sess);
ngx_int_t ngx_ssl_set_session(ngx_connection_t *c, ngx_ssl_session_t *session);
#define ngx_ssl_get_session(c) SSL_get1_session(c->ssl->connection)
#define ngx_ssl_free_session SSL_SESSION_free