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: Эта часть сообщения подписана цифровой подписью
|