ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: ssl и пароль к pem ключу



В Втр, 24/07/2007 в 14:17 +0400, Igor Sysoev пишет:
> В таком случае я не вижу никакой разницы - защищён ключ паролём или нет.
> Проще пароль снять:
> openssl rsa -in key.pem -out keyout.pem

Дело в том что я не могу удалить пароль из ключа :)
Потому пришлось сделать патч.
ЗЫ работает только для http. Так как я mail не юзаю, потому и нетрогал.
Кому надо я думаю посмотрят что и как и изменят.
--- src/event/ngx_event_openssl.c.orig  2007-07-24 13:50:38.000000000 +0300
+++ src/event/ngx_event_openssl.c       2007-07-24 16:44:41.000000000 +0300
@@ -193,14 +193,31 @@
     return NGX_OK;
 }
 
-
 ngx_int_t
 ngx_ssl_certificate(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *cert,
-    ngx_str_t *key)
+    ngx_str_t *key, u_char *pass_cmd, ngx_int_t chk_cmd )
 {
     if (ngx_conf_full_name(cf->cycle, cert) == NGX_ERROR) {
         return NGX_ERROR;
     }
+    if ( chk_cmd == 1 ) {
+        FILE *fpout;
+        char password[251];
+        char *filename = malloc(250);
+        filename = strdup( (char *) pass_cmd );
+        if ( (fpout = popen(filename,"r")) == NULL ) {
+            ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0,
+                      "popen(\"%s\") failed",filename);
+            return NGX_ERROR;
+        }
+        while ( fgets(password,250,fpout) != NULL ) {
+            char *p = password;
+            while (*p != '\n') p++;
+            *p = '\0';
+            SSL_CTX_set_default_passwd_cb_userdata(ssl->ctx, password);
+        }
+        pclose(fpout);
+    }
 
     if (SSL_CTX_use_certificate_chain_file(ssl->ctx, (char *) cert->data)
         == 0)
--- src/event/ngx_event_openssl.h.orig  2007-07-24 13:50:50.000000000 +0300
+++ src/event/ngx_event_openssl.h       2007-07-24 16:01:20.000000000 +0300
@@ -96,7 +96,7 @@
 ngx_int_t ngx_ssl_init(ngx_log_t *log);
 ngx_int_t ngx_ssl_create(ngx_ssl_t *ssl, ngx_uint_t protocols, void *data);
 ngx_int_t ngx_ssl_certificate(ngx_conf_t *cf, ngx_ssl_t *ssl,
-    ngx_str_t *cert, ngx_str_t *key);
+    ngx_str_t *cert, ngx_str_t *key, u_char *pass_cmd, ngx_int_t chk_cmd);
 ngx_int_t ngx_ssl_client_certificate(ngx_conf_t *cf, ngx_ssl_t *ssl,
     ngx_str_t *cert, ngx_int_t depth);
 ngx_int_t ngx_ssl_generate_rsa512_key(ngx_ssl_t *ssl);
--- src/http/modules/ngx_http_ssl_module.h.orig 2007-07-24 13:54:04.000000000 
+0300
+++ src/http/modules/ngx_http_ssl_module.h      2007-07-24 14:01:26.000000000 
+0300
@@ -36,6 +36,8 @@
     ngx_str_t                       ciphers;
 
     ngx_shm_zone_t                 *shm_zone;
+
+    ngx_str_t                       pass_phrase_cmd;
 } ngx_http_ssl_srv_conf_t;
 
 
--- src/http/modules/ngx_http_ssl_module.c.orig 2007-07-24 16:53:12.000000000 
+0300
+++ src/http/modules/ngx_http_ssl_module.c      2007-07-24 16:53:16.000000000 
+0300
@@ -132,6 +132,13 @@
       offsetof(ngx_http_ssl_srv_conf_t, session_timeout),
       NULL },
 
+    { ngx_string("ssl_pass_phrase_cmd"),
+      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,
+      ngx_conf_set_str_slot,
+      NGX_HTTP_SRV_CONF_OFFSET,
+      offsetof(ngx_http_ssl_srv_conf_t, pass_phrase_cmd),
+      NULL },
+
       ngx_null_command
 };
 
@@ -307,6 +314,7 @@
     ngx_http_ssl_srv_conf_t *conf = child;
 
     ngx_pool_cleanup_t  *cln;
+    ngx_int_t use_pass_phrase_cmd;
 
     ngx_conf_merge_value(conf->enable, prev->enable, 0);
 
@@ -366,8 +374,15 @@
     cln->handler = ngx_ssl_cleanup_ctx;
     cln->data = &conf->ssl;
 
+    if (conf->pass_phrase_cmd.len == 0) {
+        use_pass_phrase_cmd = 0;
+    }
+    else {
+        use_pass_phrase_cmd = 1;
+    }
+
     if (ngx_ssl_certificate(cf, &conf->ssl, &conf->certificate,
-                            &conf->certificate_key)
+                            &conf->certificate_key, conf->pass_phrase_cmd.data 
, use_pass_phrase_cmd)
         != NGX_OK)
     {
         return NGX_CONF_ERROR;

Attachment: signature.asc
Description: Эта часть сообщения подписана цифровой подписью



 




Copyright © Lexa Software, 1996-2009.