[zorp-hu] pssl

Balazs Czigany balazs.czigany at bardo.hu
2006. Jan. 12., Cs, 14:18:37 CET


Hi,

Megpacheltem a pssl.c-t de ugyanúgy elszáll. 
Ha kiadom rá a strace-t akkor csak annyi jön rá:
futex(0xd13eac, FUTEX_WAIT, 2, NULL

A process nem csinál semmit....

Üdv Balázs


On Wed, 11 Jan 2006 13:19:46 +0100, Balazs Scheidler wrote
> On Tue, 2006-01-10 at 20:41 +0200, Balazs Czigany wrote:
> > Sziasztok!
> > 
> > Egy webszervert védenék http/https proxyval (az apache a zorp egy gépen van).
> > A teszt üzemben minden jól működött, viszont, most, hogy ma élesbe ment a site
> > a https proxy néha beadja az unalmast. Először lassulásokat tapasztalok, majd
> > a https teljesen leáll. Ezekután csak force-stop-pal tudom csak leállítani a
> > https proxy-t.
> > Mi a fene lehet? 
> > 
> > -------------------------------------------------------------------
> > # zorpctl version
> > Zorp 3.0.8
> > Revision: devel at balabit.hu--zorp-1/zorp-core--mainline--3.0--patch-362
> > Compile-Date: Dec 18 2005 19:39:15
> > Config-Date: 2005/12/18
> > Trace: off
> > Debug: off
> > IPOptions: off
> > IPFilter-Tproxy: off
> > Netfilter-Tproxy: on
> > Netfilter-Linux22-Fallback: on
> > Linux22-Tproxy: off
> > Conntrack: on
> > 
> > Zorplib 3.0.6.4
> > Revision: devel at balabit.hu--zorp-1/zorp-lib--mainline--3.0--patch-109
> > Compile-Date: Dec 18 2005 19:37:19
> 
> Pro vagy GPL ? (jut eszembe, lehet, hogy a version kimenetbe ki kellene
> irni...)
> 
> Van egy ilyen javitas, ami a Pro-ban 3.0.8-cal jelent meg, viszont a
> GPL-ben egy teljesen masik Pssl proxy van, igy ellenoriznem kellene,
> hogy abban megvan-e.
> 
>           * Fixed timeout processing during SSL handshake.
>           * Added new handshake_timeout parameter to control the timeout
>             used during SSL handshake.
> 
> Ugy nezem ott meg megvan ez a problema. Ellenorizni ugy tudod, hogy 
> tenyleg errol van-e szo, hogy rainditasz egy strace-t egy SSL-es 
> szalra, ami valoszinuleg read()-ben blokkol.
> 
> Egy ido utan betelik a --threads altal megadott limit, es ilyenkor a
> zorp var egy szal felszabadulasara, ami ha a szalak fixen, timeout
> nelkul blokkolnak sosem tortenik meg.
> 
> Atportoltam a kereskedelmiben levo javitast (bar szemelyesen nem tudtam
> kiprobalni), a lenyeg, hogy letrejott egy handshake_timeout 
> attributum, default 30 masodperc, es ha az SSL handshake nem jon 
> letre ennyi ido alatt barmelyik oldalon, akkor bontja a kapcsolatot.
> 
> --- orig/modules/pssl/pssl.c
> +++ mod/modules/pssl/pssl.c
> @@ -51,6 +51,7 @@ typedef struct _PsslProxy
>    GString *server_ca_dir;
>    GString *server_crl_dir;
>    gboolean need_ssl[EP_MAX];
> +  gint handshake_timeout;
>    int verify_type[EP_MAX];
>    int verify_depth[EP_MAX];
>  } PsslProxy;
> @@ -71,6 +72,7 @@ pssl_config_set_defaults(PsslProxy *self
> 
>    z_proxy_enter(self);
> 
> +  self->handshake_timeout = 30000;
>    self->session_data.timeout = -1;
>    self->session_data.copy_to_server = TRUE;
>    self->session_data.copy_to_client = TRUE;
> @@ -113,6 +115,11 @@ pssl_register_vars(PsslProxy *self)
>                    &self->session_data.timeout);
> 
>    z_proxy_var_new(&self->super,
> +                  "handshake_timeout",
> +                  Z_VAR_GET | Z_VAR_SET_CONFIG | Z_VAR_TYPE_INT,
> +                  &self->handshake_timeout);
> +
> +  z_proxy_var_new(&self->super,
>                    "copy_to_client",
>                    Z_VAR_GET | Z_VAR_SET_CONFIG | Z_VAR_TYPE_INT,
>                    &self->session_data.copy_to_client);
> @@ -311,11 +318,12 @@ pssl_init_client_ssl(PsslProxy *self)
> 
>    SSL_set_options(ssl->ssl, SSL_MODE_ENABLE_PARTIAL_WRITE);
> 
> +  z_stream_set_timeout(self->super.endpoints[EP_CLIENT], self-
> >handshake_timeout); +   tmpstream = self-
> >super.endpoints[EP_CLIENT];   self->super.endpoints[EP_CLIENT] = 
> z_stream_ssl_new(tmpstream, ssl);   z_stream_unref(tmpstream);
> 
> -  z_stream_set_timeout(self->super.endpoints[EP_CLIENT], self-
> >session_data.timeout);
> 
>    ret = SSL_accept(ssl->ssl);
>    if (ret <= 0)
> @@ -339,6 +347,7 @@ pssl_init_client_ssl(PsslProxy *self)
>      }
> 
>    z_ssl_session_unref(ssl);
> +  z_stream_set_timeout(self->super.endpoints[EP_CLIENT], -2);
>    z_proxy_log(self, PSSL_DEBUG, 6, "Client side SSL handshake 
> successful;");   z_proxy_leave(self);   return TRUE; @@ -370,13 +379,
> 13 @@ pssl_init_server_ssl(PsslProxy *self)     }
> 
>    SSL_set_options(ssl->ssl, SSL_MODE_ENABLE_PARTIAL_WRITE);
> -
> +
> +  z_stream_set_timeout(self->super.endpoints[EP_SERVER], self-
> >handshake_timeout); +   tmpstream = self-
> >super.endpoints[EP_SERVER];   self->super.endpoints[EP_SERVER] = 
> z_stream_ssl_new(tmpstream, ssl);   z_stream_unref(tmpstream);
> 
> -  z_stream_set_timeout(self->super.endpoints[EP_SERVER], self-
> >session_data.timeout);
> -
>    ret = SSL_connect(ssl->ssl);
>    if (ret <= 0)
>      {
> @@ -399,6 +408,7 @@ pssl_init_server_ssl(PsslProxy *self)
>      }
> 
>    z_ssl_session_unref(ssl);
> +  z_stream_set_timeout(self->super.endpoints[EP_SERVER], -2);
>    z_proxy_log(self, PSSL_DEBUG, 6, "Server side SSL handshake 
> successful;");   z_proxy_leave(self);   return TRUE;



További információk a(z) zorp-hu levelezőlistáról