Skip to content

Commit 8eb9ab9

Browse files
committed
feature: make client cert verify depth optional
1 parent f4803ff commit 8eb9ab9

File tree

2 files changed

+33
-19
lines changed

2 files changed

+33
-19
lines changed

src/ngx_http_lua_ssl_certby.c

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1308,19 +1308,20 @@ ngx_ssl_verify_callback(int ok, X509_STORE_CTX *x509_store)
13081308

13091309

13101310
int
1311-
ngx_http_lua_ffi_ssl_verify_client(ngx_http_request_t *r, int depth,
1312-
void *ca_certs, char **err)
1311+
ngx_http_lua_ffi_ssl_verify_client(ngx_http_request_t *r, void *ca_certs,
1312+
int depth, char **err)
13131313
{
1314-
ngx_ssl_conn_t *ssl_conn;
1315-
STACK_OF(X509) *chain = ca_certs;
1316-
STACK_OF(X509_NAME) *name_chain = NULL;
1317-
X509 *x509 = NULL;
1318-
X509_NAME *subject = NULL;
1319-
X509_STORE *ca_store = NULL;
1314+
ngx_ssl_conn_t *ssl_conn;
1315+
ngx_http_ssl_srv_conf_t *sscf;
1316+
STACK_OF(X509) *chain = ca_certs;
1317+
STACK_OF(X509_NAME) *name_chain = NULL;
1318+
X509 *x509 = NULL;
1319+
X509_NAME *subject = NULL;
1320+
X509_STORE *ca_store = NULL;
13201321
#ifdef OPENSSL_IS_BORINGSSL
1321-
size_t i;
1322+
size_t i;
13221323
#else
1323-
int i;
1324+
int i;
13241325
#endif
13251326

13261327
if (r->connection == NULL || r->connection->ssl == NULL) {
@@ -1334,17 +1335,29 @@ ngx_http_lua_ffi_ssl_verify_client(ngx_http_request_t *r, int depth,
13341335
return NGX_ERROR;
13351336
}
13361337

1337-
ca_store = SSL_CTX_get_cert_store(SSL_get_SSL_CTX(ssl_conn));
1338-
if (ca_store == NULL) {
1339-
*err = "SSL_CTX_get_cert_store() failed";
1340-
return NGX_ERROR;
1341-
}
1338+
/* enable verify */
13421339

13431340
SSL_set_verify(ssl_conn, SSL_VERIFY_PEER, ngx_ssl_verify_callback);
13441341

1342+
/* set depth */
1343+
1344+
if (depth < 0) {
1345+
sscf = ngx_http_get_module_srv_conf(r, ngx_http_ssl_module);
1346+
if (sscf != NULL) {
1347+
depth = sscf->verify_depth;
1348+
}
1349+
}
13451350
SSL_set_verify_depth(ssl_conn, depth);
13461351

1352+
/* set CA chain */
1353+
13471354
if (chain != NULL) {
1355+
ca_store = SSL_CTX_get_cert_store(SSL_get_SSL_CTX(ssl_conn));
1356+
if (ca_store == NULL) {
1357+
*err = "SSL_CTX_get_cert_store() failed";
1358+
return NGX_ERROR;
1359+
}
1360+
13481361
/* construct name chain */
13491362

13501363
name_chain = sk_X509_NAME_new_null();

t/140-ssl-c-api.t

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,8 @@ ffi.cdef[[
6464
6565
int ngx_http_lua_ffi_ssl_clear_certs(void *r, char **err);
6666
67-
int ngx_http_lua_ffi_ssl_verify_client(void *r, int depth, void *cdata, char **err);
67+
int ngx_http_lua_ffi_ssl_verify_client(void *r, void *cdata,
68+
int depth, char **err);
6869
6970
]]
7071
_EOC_
@@ -849,7 +850,7 @@ lua ssl server name: "test.com"
849850
return
850851
end
851852
852-
local rc = ffi.C.ngx_http_lua_ffi_ssl_verify_client(r, 1, cert, errmsg)
853+
local rc = ffi.C.ngx_http_lua_ffi_ssl_verify_client(r, cert, 1, errmsg)
853854
if rc ~= 0 then
854855
ngx.log(ngx.ERR, "failed to verify client: ",
855856
ffi.string(errmsg[0]))
@@ -914,7 +915,7 @@ client certificate subject: [email protected],CN=test.com
914915
return
915916
end
916917
917-
local rc = ffi.C.ngx_http_lua_ffi_ssl_verify_client(r, 1, nil, errmsg)
918+
local rc = ffi.C.ngx_http_lua_ffi_ssl_verify_client(r, nil, -1, errmsg)
918919
if rc ~= 0 then
919920
ngx.log(ngx.ERR, "failed to verify client: ",
920921
ffi.string(errmsg[0]))
@@ -979,7 +980,7 @@ client certificate subject: [email protected],CN=test.com
979980
return
980981
end
981982
982-
local rc = ffi.C.ngx_http_lua_ffi_ssl_verify_client(r, 1, nil, errmsg)
983+
local rc = ffi.C.ngx_http_lua_ffi_ssl_verify_client(r, nil, -1, errmsg)
983984
if rc ~= 0 then
984985
ngx.log(ngx.ERR, "failed to verify client: ",
985986
ffi.string(errmsg[0]))

0 commit comments

Comments
 (0)