summaryrefslogtreecommitdiffhomepage
path: root/src/event
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2009-07-22 17:41:42 +0000
committerIgor Sysoev <igor@sysoev.ru>2009-07-22 17:41:42 +0000
commit5b4b7c58ccb1c11f1154db06f515982ae989f6f0 (patch)
tree5b4253385581b72558bb96864f91f708e47441a7 /src/event
parenta4038c8e719fd1d874eee7fd653092c56eeadcf0 (diff)
downloadnginx-5b4b7c58ccb1c11f1154db06f515982ae989f6f0.tar.gz
nginx-5b4b7c58ccb1c11f1154db06f515982ae989f6f0.tar.bz2
*) $ssl_client_verify
*) "ssl_verify_client ask" was changed to "ssl_verify_client optional"
Diffstat (limited to 'src/event')
-rw-r--r--src/event/ngx_event_openssl.c29
-rw-r--r--src/event/ngx_event_openssl.h2
2 files changed, 31 insertions, 0 deletions
diff --git a/src/event/ngx_event_openssl.c b/src/event/ngx_event_openssl.c
index 1607814ce..a2f6a25c5 100644
--- a/src/event/ngx_event_openssl.c
+++ b/src/event/ngx_event_openssl.c
@@ -2108,6 +2108,35 @@ ngx_ssl_get_serial_number(ngx_connection_t *c, ngx_pool_t *pool, ngx_str_t *s)
}
+ngx_int_t
+ngx_ssl_get_client_verify(ngx_connection_t *c, ngx_pool_t *pool, ngx_str_t *s)
+{
+ X509 *cert;
+
+ if (SSL_get_verify_result(c->ssl->connection) != X509_V_OK) {
+ s->len = sizeof("FAILED") - 1;
+ s->data = (u_char *) "FAILED";
+
+ return NGX_OK;
+ }
+
+ cert = SSL_get_peer_certificate(c->ssl->connection);
+
+ if (cert) {
+ s->len = sizeof("SUCCESS") - 1;
+ s->data = (u_char *) "SUCCESS";
+
+ } else {
+ s->len = sizeof("NONE") - 1;
+ s->data = (u_char *) "NONE";
+ }
+
+ X509_free(cert);
+
+ return NGX_OK;
+}
+
+
static void *
ngx_openssl_create_conf(ngx_cycle_t *cycle)
{
diff --git a/src/event/ngx_event_openssl.h b/src/event/ngx_event_openssl.h
index 1e83606fd..3e496ee42 100644
--- a/src/event/ngx_event_openssl.h
+++ b/src/event/ngx_event_openssl.h
@@ -131,6 +131,8 @@ ngx_int_t ngx_ssl_get_issuer_dn(ngx_connection_t *c, ngx_pool_t *pool,
ngx_str_t *s);
ngx_int_t ngx_ssl_get_serial_number(ngx_connection_t *c, ngx_pool_t *pool,
ngx_str_t *s);
+ngx_int_t ngx_ssl_get_client_verify(ngx_connection_t *c, ngx_pool_t *pool,
+ ngx_str_t *s);
ngx_int_t ngx_ssl_handshake(ngx_connection_t *c);