[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