Welcome! Log In Create A New Profile

Advanced

Re: Возможность собрать современную версию nginx и openssl с поддержкой ssl renegotiation

Maxim Dounin
July 06, 2015 10:06AM
Hello!

On Tue, Jun 23, 2015 at 01:19:46PM -0400, AterCattus wrote:

> Всем привет.
>
> Возникла необходимость взаимодействия с сервером, использующего ssl
> renegotiation. А в качестве промежуточного звена отлично подошел бы nginx с
> его proxy_pass и proxy_ssl_certificate* + proxy_ssl_trusted_certificate. Но
> соответствующий функционал убран еще в 0.8.23.
> Можно ли как-то достучаться до такого сервера из nginx?
> Правка event/ngx_event_openssl.c не помогает - nginx перестает ругаться на
> "SSL renegotiation disabled", но все-равно запрос не проходит.
>
> Да, я понимаю, что не просто так это было убрано, но внешний сервер работает
> только так. Вопрос безопасности оставляю вне данного вопроса.

В принципе, с бекендами можно и разрешить, проблем быть не должно.

Правка src/event/ngx_event_openssl.c должна помогать, если не
помогает - значит, недоправили.

Как-то так должно быть достаточно (untested):

# User Maxim Dounin <mdounin@mdounin.ru>
# Date 1436191454 -10800
# Mon Jul 06 17:04:14 2015 +0300
# Node ID 33e62c32b9d602700a3cd48955067668fe9a86ab
# Parent 137a5031414793ce42e5b0741d2815372ef12a73
SSL: enabled renegotiation with upstream servers.

diff --git a/src/event/ngx_event_openssl.c b/src/event/ngx_event_openssl.c
--- a/src/event/ngx_event_openssl.c
+++ b/src/event/ngx_event_openssl.c
@@ -704,7 +704,7 @@ ngx_ssl_info_callback(const ngx_ssl_conn
if (where & SSL_CB_HANDSHAKE_START) {
c = ngx_ssl_get_connection((ngx_ssl_conn_t *) ssl_conn);

- if (c->ssl->handshaked) {
+ if (c->ssl->server && c->ssl->handshaked) {
c->ssl->renegotiation = 1;
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, 0, "SSL renegotiation");
}
@@ -1055,6 +1055,7 @@ ngx_ssl_create_connection(ngx_ssl_t *ssl

} else {
SSL_set_accept_state(sc->connection);
+ sc->server = 1;
}

if (SSL_set_ex_data(sc->connection, ngx_ssl_connection_index, c) == 0) {
@@ -1161,7 +1162,7 @@ ngx_ssl_handshake(ngx_connection_t *c)
#ifdef SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS

/* initial handshake done, disable renegotiation (CVE-2009-3555) */
- if (c->ssl->connection->s3) {
+ if (c->ssl->server && c->ssl->connection->s3) {
c->ssl->connection->s3->flags |= SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS;
}

diff --git a/src/event/ngx_event_openssl.h b/src/event/ngx_event_openssl.h
--- a/src/event/ngx_event_openssl.h
+++ b/src/event/ngx_event_openssl.h
@@ -58,6 +58,7 @@ typedef struct {

unsigned handshaked:1;
unsigned renegotiation:1;
+ unsigned server:1;
unsigned buffer:1;
unsigned no_wait_shutdown:1;
unsigned no_send_shutdown:1;


--
Maxim Dounin
http://nginx.org/

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

Возможность собрать современную версию nginx и openssl с поддержкой ssl renegotiation

AterCattus June 23, 2015 01:19PM

Re: Возможность собрать современную версию nginx и openssl с поддержкой ssl renegotiation

Maxim Dounin July 06, 2015 10:06AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 162
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready