@@ -37,6 +37,10 @@ static char *ngx_http_lua_merge_loc_conf(ngx_conf_t *cf, void *parent,
3737 void * child );
3838static ngx_int_t ngx_http_lua_init (ngx_conf_t * cf );
3939static char * ngx_http_lua_lowat_check (ngx_conf_t * cf , void * post , void * data );
40+ #if (NGX_HTTP_SSL )
41+ static ngx_int_t ngx_http_lua_set_ssl (ngx_conf_t * cf ,
42+ ngx_http_lua_loc_conf_t * llcf );
43+ #endif
4044
4145
4246static ngx_conf_post_t ngx_http_lua_lowat_post =
@@ -46,6 +50,20 @@ static ngx_conf_post_t ngx_http_lua_lowat_post =
4650static volatile ngx_cycle_t * ngx_http_lua_prev_cycle = NULL ;
4751
4852
53+ #if (NGX_HTTP_SSL ) && defined(nginx_version ) && nginx_version >= 1001013
54+
55+ static ngx_conf_bitmask_t ngx_http_lua_ssl_protocols [] = {
56+ { ngx_string ("SSLv2" ), NGX_SSL_SSLv2 },
57+ { ngx_string ("SSLv3" ), NGX_SSL_SSLv3 },
58+ { ngx_string ("TLSv1" ), NGX_SSL_TLSv1 },
59+ { ngx_string ("TLSv1.1" ), NGX_SSL_TLSv1_1 },
60+ { ngx_string ("TLSv1.2" ), NGX_SSL_TLSv1_2 },
61+ { ngx_null_string , 0 }
62+ };
63+
64+ #endif
65+
66+
4967static ngx_command_t ngx_http_lua_cmds [] = {
5068
5169 { ngx_string ("lua_max_running_timers" ),
@@ -366,6 +384,49 @@ static ngx_command_t ngx_http_lua_cmds[] = {
366384 offsetof(ngx_http_lua_loc_conf_t , use_default_type ),
367385 NULL },
368386
387+ #if (NGX_HTTP_SSL )
388+
389+ # if defined(nginx_version ) && nginx_version >= 1001013
390+
391+ { ngx_string ("lua_ssl_protocols" ),
392+ NGX_HTTP_MAIN_CONF |NGX_HTTP_SRV_CONF |NGX_HTTP_LOC_CONF |NGX_CONF_1MORE ,
393+ ngx_conf_set_bitmask_slot ,
394+ NGX_HTTP_LOC_CONF_OFFSET ,
395+ offsetof(ngx_http_lua_loc_conf_t , ssl_protocols ),
396+ & ngx_http_lua_ssl_protocols },
397+
398+ # endif
399+
400+ { ngx_string ("lua_ssl_ciphers" ),
401+ NGX_HTTP_MAIN_CONF |NGX_HTTP_SRV_CONF |NGX_HTTP_LOC_CONF |NGX_CONF_TAKE1 ,
402+ ngx_conf_set_str_slot ,
403+ NGX_HTTP_LOC_CONF_OFFSET ,
404+ offsetof(ngx_http_lua_loc_conf_t , ssl_ciphers ),
405+ NULL },
406+
407+ { ngx_string ("lua_ssl_verify_depth" ),
408+ NGX_HTTP_MAIN_CONF |NGX_HTTP_SRV_CONF |NGX_HTTP_LOC_CONF |NGX_CONF_TAKE1 ,
409+ ngx_conf_set_num_slot ,
410+ NGX_HTTP_LOC_CONF_OFFSET ,
411+ offsetof(ngx_http_lua_loc_conf_t , ssl_verify_depth ),
412+ NULL },
413+
414+ { ngx_string ("lua_ssl_trusted_certificate" ),
415+ NGX_HTTP_MAIN_CONF |NGX_HTTP_SRV_CONF |NGX_HTTP_LOC_CONF |NGX_CONF_TAKE1 ,
416+ ngx_conf_set_str_slot ,
417+ NGX_HTTP_LOC_CONF_OFFSET ,
418+ offsetof(ngx_http_lua_loc_conf_t , ssl_trusted_certificate ),
419+ NULL },
420+
421+ { ngx_string ("lua_ssl_crl" ),
422+ NGX_HTTP_MAIN_CONF |NGX_HTTP_SRV_CONF |NGX_HTTP_LOC_CONF |NGX_CONF_TAKE1 ,
423+ ngx_conf_set_str_slot ,
424+ NGX_HTTP_LOC_CONF_OFFSET ,
425+ offsetof(ngx_http_lua_loc_conf_t , ssl_crl ),
426+ NULL },
427+
428+ #endif /* NGX_HTTP_SSL */
429+
369430 ngx_null_command
370431};
371432
@@ -650,6 +711,12 @@ ngx_http_lua_create_loc_conf(ngx_conf_t *cf)
650711 * conf->body_filter_src = {{ 0, NULL }, NULL, NULL, NULL};
651712 * conf->body_filter_src_key = NULL
652713 * conf->body_filter_handler = NULL;
714+ *
715+ * conf->ssl = 0;
716+ * conf->ssl_protocols = 0;
717+ * conf->ssl_ciphers = { 0, NULL };
718+ * conf->ssl_trusted_certificate = { 0, NULL };
719+ * conf->ssl_crl = { 0, NULL };
653720 */
654721
655722 conf -> force_read_body = NGX_CONF_UNSET ;
@@ -669,6 +736,9 @@ ngx_http_lua_create_loc_conf(ngx_conf_t *cf)
669736 conf -> transform_underscores_in_resp_headers = NGX_CONF_UNSET ;
670737 conf -> log_socket_errors = NGX_CONF_UNSET ;
671738
739+ #if (NGX_HTTP_SSL )
740+ conf -> ssl_verify_depth = NGX_CONF_UNSET_UINT ;
741+ #endif
672742
673743 return conf ;
674744}
@@ -716,6 +786,32 @@ ngx_http_lua_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
716786 conf -> body_filter_src_key = prev -> body_filter_src_key ;
717787 }
718788
789+ #if (NGX_HTTP_SSL )
790+
791+ # if defined(nginx_version ) && nginx_version >= 1001013
792+
793+ ngx_conf_merge_bitmask_value (conf -> ssl_protocols , prev -> ssl_protocols ,
794+ (NGX_CONF_BITMASK_SET |NGX_SSL_SSLv3
795+ |NGX_SSL_TLSv1 |NGX_SSL_TLSv1_1
796+ |NGX_SSL_TLSv1_2 ));
797+
798+ # endif
799+
800+ ngx_conf_merge_str_value (conf -> ssl_ciphers , prev -> ssl_ciphers ,
801+ "DEFAULT" );
802+
803+ ngx_conf_merge_uint_value (conf -> ssl_verify_depth ,
804+ prev -> ssl_verify_depth , 1 );
805+ ngx_conf_merge_str_value (conf -> ssl_trusted_certificate ,
806+ prev -> ssl_trusted_certificate , "" );
807+ ngx_conf_merge_str_value (conf -> ssl_crl , prev -> ssl_crl , "" );
808+
809+ if (ngx_http_lua_set_ssl (cf , conf ) != NGX_OK ) {
810+ return NGX_CONF_ERROR ;
811+ }
812+
813+ #endif
814+
719815 ngx_conf_merge_value (conf -> force_read_body , prev -> force_read_body , 0 );
720816 ngx_conf_merge_value (conf -> enable_code_cache , prev -> enable_code_cache , 1 );
721817 ngx_conf_merge_value (conf -> http10_buffering , prev -> http10_buffering , 1 );
@@ -751,4 +847,74 @@ ngx_http_lua_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
751847 return NGX_CONF_OK ;
752848}
753849
850+
851+ #if (NGX_HTTP_SSL )
852+
853+ static ngx_int_t
854+ ngx_http_lua_set_ssl (ngx_conf_t * cf , ngx_http_lua_loc_conf_t * llcf )
855+ {
856+ ngx_pool_cleanup_t * cln ;
857+
858+ llcf -> ssl = ngx_pcalloc (cf -> pool , sizeof (ngx_ssl_t ));
859+ if (llcf -> ssl == NULL ) {
860+ return NGX_ERROR ;
861+ }
862+
863+ llcf -> ssl -> log = cf -> log ;
864+
865+ if (ngx_ssl_create (llcf -> ssl , llcf -> ssl_protocols , NULL ) != NGX_OK ) {
866+ return NGX_ERROR ;
867+ }
868+
869+ cln = ngx_pool_cleanup_add (cf -> pool , 0 );
870+ if (cln == NULL ) {
871+ return NGX_ERROR ;
872+ }
873+
874+ cln -> handler = ngx_ssl_cleanup_ctx ;
875+ cln -> data = llcf -> ssl ;
876+
877+ if (SSL_CTX_set_cipher_list (llcf -> ssl -> ctx ,
878+ (const char * ) llcf -> ssl_ciphers .data )
879+ == 0 )
880+ {
881+ ngx_ssl_error (NGX_LOG_EMERG , cf -> log , 0 ,
882+ "SSL_CTX_set_cipher_list(\"%V\") failed" ,
883+ & llcf -> ssl_ciphers );
884+ return NGX_ERROR ;
885+ }
886+
887+ if (llcf -> ssl_trusted_certificate .len ) {
888+
889+ #if defined(nginx_version ) && nginx_version >= 1003007
890+
891+ if (ngx_ssl_trusted_certificate (cf , llcf -> ssl ,
892+ & llcf -> ssl_trusted_certificate ,
893+ llcf -> ssl_verify_depth )
894+ != NGX_OK )
895+ {
896+ return NGX_ERROR ;
897+ }
898+
899+ #else
900+
901+ ngx_log_error (NGX_LOG_CRIT , cf -> log , 0 , "at least nginx 1.3.7 is "
902+ "required for the \"lua_ssl_trusted_certificate\" "
903+ "directive" );
904+ return NGX_ERROR ;
905+
906+ #endif
907+ }
908+
909+ dd ("ssl crl: %.*s" , (int ) llcf -> ssl_crl .len , llcf -> ssl_crl .data );
910+
911+ if (ngx_ssl_crl (cf , llcf -> ssl , & llcf -> ssl_crl ) != NGX_OK ) {
912+ return NGX_ERROR ;
913+ }
914+
915+ return NGX_OK ;
916+ }
917+
918+ #endif /* NGX_HTTP_SSL */
919+
754920/* vi:set ft=c ts=4 sw=4 et fdm=marker: */
0 commit comments