@@ -2330,3 +2330,177 @@ got TLS1 version: TLSv1.3,
23302330[error]
23312331[alert]
23322332[emerg]
2333+
2334+
2335+
2336+ === TEST 23: verify client with CA certificates
2337+ --- http_config
2338+ lua_package_path "$TEST_NGINX_LUA_PACKAGE_PATH";
2339+
2340+ server {
2341+ listen unix:$TEST_NGINX_HTML_DIR/nginx.sock ssl;
2342+ server_name test.com;
2343+ ssl_certificate_by_lua_block {
2344+ local ssl = require "ngx.ssl"
2345+
2346+ local f = assert(io.open("t/cert/test.crt"))
2347+ local cert_data = f:read("*a")
2348+ f:close()
2349+
2350+ local cert, err = ssl.parse_pem_cert(cert_data)
2351+ if not cert then
2352+ ngx.log(ngx.ERR, "failed to parse pem cert: ", err)
2353+ return
2354+ end
2355+
2356+ local ok, err = ssl.verify_client(cert, 1)
2357+ if not ok then
2358+ ngx.log(ngx.ERR, "failed to verify client: ", err)
2359+ return
2360+ end
2361+ }
2362+
2363+ ssl_certificate ../../cert/test2.crt;
2364+ ssl_certificate_key ../../cert/test2.key;
2365+
2366+ location / {
2367+ default_type 'text/plain';
2368+ content_by_lua_block {
2369+ print('client certificate subject: ', ngx.var.ssl_client_s_dn)
2370+ ngx.say(ngx.var.ssl_client_verify)
2371+ }
2372+ more_clear_headers Date;
2373+ }
2374+ }
2375+ --- config
2376+ location /t {
2377+ proxy_pass https://unix:$TEST_NGINX_HTML_DIR/nginx.sock;
2378+ proxy_ssl_certificate ../../cert/test.crt;
2379+ proxy_ssl_certificate_key ../../cert/test.key;
2380+ proxy_ssl_session_reuse off;
2381+ }
2382+
2383+ --- request
2384+ GET /t
2385+ --- response_body
2386+ SUCCESS
2387+
2388+ --- error_log
2389+ client certificate subject: emailAddress=agentzh@gmail.com,CN=test.com
2390+
2391+ --- no_error_log
2392+ [error]
2393+ [alert]
2394+ [emerg]
2395+
2396+
2397+
2398+ === TEST 24: verify client without CA certificates
2399+ --- http_config
2400+ lua_package_path "$TEST_NGINX_LUA_PACKAGE_PATH";
2401+
2402+ server {
2403+ listen unix:$TEST_NGINX_HTML_DIR/nginx.sock ssl;
2404+ server_name test.com;
2405+ ssl_certificate_by_lua_block {
2406+ local ssl = require "ngx.ssl"
2407+
2408+ local ok, err = ssl.verify_client()
2409+ if not ok then
2410+ ngx.log(ngx.ERR, "failed to verify client: ", err)
2411+ return
2412+ end
2413+ }
2414+
2415+ ssl_certificate ../../cert/test2.crt;
2416+ ssl_certificate_key ../../cert/test2.key;
2417+
2418+ location / {
2419+ default_type 'text/plain';
2420+ content_by_lua_block {
2421+ print('client certificate subject: ', ngx.var.ssl_client_s_dn)
2422+ ngx.say(ngx.var.ssl_client_verify)
2423+ }
2424+ more_clear_headers Date;
2425+ }
2426+ }
2427+ --- config
2428+ location /t {
2429+ proxy_pass https://unix:$TEST_NGINX_HTML_DIR/nginx.sock;
2430+ proxy_ssl_certificate ../../cert/test.crt;
2431+ proxy_ssl_certificate_key ../../cert/test.key;
2432+ proxy_ssl_session_reuse off;
2433+ }
2434+
2435+ --- request
2436+ GET /t
2437+ --- response_body
2438+ FAILED:self signed certificate
2439+
2440+ --- error_log
2441+ client certificate subject: emailAddress=agentzh@gmail.com,CN=test.com
2442+
2443+ --- no_error_log
2444+ [error]
2445+ [alert]
2446+ [emerg]
2447+
2448+
2449+
2450+ === TEST 25: verify client but client provides no certificate
2451+ --- http_config
2452+ lua_package_path "$TEST_NGINX_LUA_PACKAGE_PATH";
2453+
2454+ server {
2455+ listen unix:$TEST_NGINX_HTML_DIR/nginx.sock ssl;
2456+ server_name test.com;
2457+ ssl_certificate_by_lua_block {
2458+ local ssl = require "ngx.ssl"
2459+
2460+ local f = assert(io.open("t/cert/test.crt"))
2461+ local cert_data = f:read("*a")
2462+ f:close()
2463+
2464+ local cert, err = ssl.parse_pem_cert(cert_data)
2465+ if not cert then
2466+ ngx.log(ngx.ERR, "failed to parse pem cert: ", err)
2467+ return
2468+ end
2469+
2470+ local ok, err = ssl.verify_client(cert, 1)
2471+ if not ok then
2472+ ngx.log(ngx.ERR, "failed to verify client: ", err)
2473+ return
2474+ end
2475+ }
2476+
2477+ ssl_certificate ../../cert/test2.crt;
2478+ ssl_certificate_key ../../cert/test2.key;
2479+
2480+ location / {
2481+ default_type 'text/plain';
2482+ content_by_lua_block {
2483+ print('client certificate subject: ', ngx.var.ssl_client_s_dn)
2484+ ngx.say(ngx.var.ssl_client_verify)
2485+ }
2486+ more_clear_headers Date;
2487+ }
2488+ }
2489+ --- config
2490+ location /t {
2491+ proxy_pass https://unix:$TEST_NGINX_HTML_DIR/nginx.sock;
2492+ proxy_ssl_session_reuse off;
2493+ }
2494+
2495+ --- request
2496+ GET /t
2497+ --- response_body
2498+ NONE
2499+
2500+ --- error_log
2501+ client certificate subject: nil
2502+
2503+ --- no_error_log
2504+ [error]
2505+ [alert]
2506+ [emerg]
0 commit comments