Thanks, that cleared things up.

Yes, I only had one Cert directive in my listener but only because I was using 
a wildcard certificate.

I've now added another Cert directive with bundled ssl-cert-snakeoil.* just to 
satisfy the condition without changing the code, works as expected.

Any idea if and when your changes might get included in next pound release?

Cheers,
Grzegorz

On 2016-05-02 16:58:12 Joe Gooch <[email protected]> wrote:
> This tells me you only have one Cert directive in your listener, but you're 
> using SNI.. Is this true?
> 
> Usually the point of using SNI would be to have multiple certificates, and 
> choose the appropriate one on each connection.  Up until now there was no 
> point in calling the callback if you only had one certificate, because 
> there's no decision to be made.
> 
> If you have only one certificate but you need SNI in the backend we'll have 
> to run the callback even with a single certificate in the listener.
> 
> If that's the case, just remove the if(res->ctx->next) line entirely. We 
> wouldn't get this far without res->ctx->ctx being set.
> 
> Joe
> 
> 
> 
> 
> On 5/1/16, 9:21 PM, "gojrzan" <[email protected]> wrote:
> 
> >OK, I think I found it.
> >Condition in config.c:1427 (in your 2.8a branch) was never true. Checking 
> >for res->ctx->ctx instead of res->ctx->next makes it work. I'm 65% confident 
> >it's what you intended to check for as the 
> >SSL_CTX_set_tlsext_servername_callback() uses it, but could you verify I'm 
> >not getting myself in a greater mess by doing that?
> >
> >diff --git a/config.c b/config.c
> >--- a/config.c
> >+++ b/config.c
> >@@ -1424,7 +1424,7 @@ parse_HTTPS(void)
> >             if(!has_addr || !has_port || res->ctx == NULL)
> >                 conf_err("ListenHTTPS missing Address, Port or Certificate 
> > - aborted");
> > #ifdef SSL_CTRL_SET_TLSEXT_SERVERNAME_CB
> >-            if(res->ctx->next)
> >+            if(res->ctx->ctx)
> >                 if(!SSL_CTX_set_tlsext_servername_callback(res->ctx->ctx, 
> > SNI_server_name)
> >                 || !SSL_CTX_set_tlsext_servername_arg(res->ctx->ctx, 
> > res->ctx))
> >                     conf_err("ListenHTTPS: can't set SNI callback");
> >
> >
> >Cheers,
> >Grzegorz
> >
> >On 2016-04-26 15:39:45 Joe Gooch <[email protected]> wrote:
> >> It should be syslogged at debug level - or you can run pound in non-daemon 
> >> mode and send stuff to stderr.
> >> 
> >> That servername should be set in the SNI callback in config.c - if the 
> >> host sends a SNI header. (around line 1092) Maybe add some LOG_DEBUG stuff 
> >> or LOG_INFO to verify 1) we're receiving a header and 2) it's writing into 
> >> ssl_request...
> >> 
> >> 
> >> ------
> >>  
> >> Joe
> >> 
> >> 
> >> 
> >> 
> >> 
> >> 
> >> On 4/25/16, 8:49 PM, "gojrzan" <[email protected]> wrote:
> >> 
> >> >Thanks for your links. I've tried both 2.8a SNIPassthrough branch and 
> >> >applying the patch to 2.7, they do compile fine, but I'm still getting 
> >> >that BIO_do_handshake error.
> >> >
> >> >Some poor man's debugging suggests this condition is not true in my case:
> >> >http.c:931    if (ssl_request.servername[0]) {
> >> >
> >> >I tried adding SSL_set_tlsext_host_name function with my servername 
> >> >hardcoded to http.c to confirm pound works with my backend if SNI header 
> >> >is set and it does, so we are on the right track.
> >> >
> >> >P.S.
> >> >Where do all debug messages created by logmsg(LOG_DEBUG, ...) go to? I 
> >> >already redirected all pound logs to its own file in rsyslog template and 
> >> >raised LogLevel in pound config file to 5 (it's not really related to 
> >> >unix loglevels, is it?) but still no luck.
> >> >
> >> >On 2016-04-22 12:35:53 Joe Gooch <[email protected]> wrote:
> >> >> I whipped up passing through SNI from the source request:
> >> >> 
> >> >> Branch https://github.com/goochjj/pound/tree/SNIPassthrough
> >> >> Patch 
> >> >> https://github.com/goochjj/pound/commit/00eb996d8e832741cbcf1342e0bf77bba3f06af0.diff
> >> >> ZIP https://github.com/goochjj/pound/archive/SNIPassthrough.zip
> >> >> 
> >> >> 
> >> >> This is based on my stage for upstream 2.8a branch, so it does have 
> >> >> other patches in it.  The diff should apply cleanly to stock 2.7 if you 
> >> >> want to go that way.
> >> >> 
> >> >> I don't have a good way to test this, so I didn't.  It compiles.  So it 
> >> >> might work for you!  Let me know.
> >> >> 
> >> >> Pound resurrects based on the host accepting a socket connect() call - 
> >> >> no SSL handshake is attempted.  Anything beyond that would require a 
> >> >> custom host check script.
> >> >> 
> >> >> Joe
> >> >> 
> >> >> 
> >> >> 
> >> >> On 4/21/16, 1:57 AM, "gojrzan" <[email protected]> wrote:
> >> >> 
> >> >> >Hi Joe,
> >> >> >
> >> >> >Thank you for your reply.
> >> >> >
> >> >> >Preserving SNI header from the original request seems like a more 
> >> >> >suitable or cleaner way, then again if I already have 'HeadRequire 
> >> >> >"Host: .*www.domain.com.*" line in service definition, I would be 
> >> >> >happy with setting the server name in BackEnd definition too, if that 
> >> >> >would be easier to implement.
> >> >> >
> >> >> >The later option might be even better in my scenario. I ran tcpdump to 
> >> >> >see what is happening and it seems the backend host just sends TCP RST 
> >> >> >after pound sends its first non-SNI-containing data packet.
> >> >> >
> >> >> >17:32:33.526367 IP 192.168.11.21.41841 > 192.168.33.10.443: Flags [S], 
> >> >> >seq 2237443044, win 29200, options [mss 1460,sackOK,TS val 823584186 
> >> >> >ecr 0,nop,wscale 7], length 0
> >> >> >17:32:33.526754 IP 192.168.33.10.443 > 192.168.11.21.41841: Flags 
> >> >> >[S.], seq 2348622935, ack 2237443045, win 8192, options [mss 
> >> >> >1460,nop,wscale 8,sackOK,TS val 61109578 ecr 823584186], length 0
> >> >> >17:32:33.526799 IP 192.168.11.21.41841 > 192.168.33.10.443: Flags [.], 
> >> >> >ack 1, win 229, options [nop,nop,TS val 823584186 ecr 61109578], 
> >> >> >length 0
> >> >> >17:32:33.526903 IP 192.168.11.21.41841 > 192.168.33.10.443: Flags 
> >> >> >[P.], seq 1:296, ack 1, win 229, options [nop,nop,TS val 823584186 ecr 
> >> >> >61109578], length 295
> >> >> >17:32:33.527146 IP 192.168.33.10.443 > 192.168.11.21.41841: Flags 
> >> >> >[R.], seq 1, ack 296, win 0, length 0
> >> >> >
> >> >> >I don't know how pound discovers resurected hosts, if it only needs to 
> >> >> >check if the port is opened it would just work, but if it relies on 
> >> >> >getting a positive HTTP response, doing that without knowing 
> >> >> >servername (when there was no client to pass SNI header from) might 
> >> >> >just fail even if the back end host becomes available.
> >> >> >
> >> >> >Cheers,
> >> >> >Grzegorz
> >> >> >
> >> >> >On 2016-04-20 16:10:48 Joe Gooch <[email protected]> wrote:
> >> >> >> Pound does not pass through the received SNI header to the backend, 
> >> >> >> so requests initiated via HTTPS to backends will not contain the SNI 
> >> >> >> header.  (Nor does the Host header influence it at all)
> >> >> >> 
> >> >> >> It's possible to modify pound to do so, it just doesn't at the 
> >> >> >> moment.  And how would that work for you?  Would you want it to 
> >> >> >> preserve the SNI header from the original request, or specify a 
> >> >> >> hostname via a "ServerName" option in the Backend block? (i.e. 
> >> >> >> Analogous to -servername in s_client)
> >> >> >> 
> >> >> >> -G
> >> >> >> 
> >> >> >> 
> >> >> >> 
> >> >> >> 
> >> >> >> 
> >> >> >> 
> >> >> >> On 4/20/16, 1:51 AM, "gojrzan" <[email protected]> wrote:
> >> >> >> 
> >> >> >> >Hi,
> >> >> >> >
> >> >> >> >tl;dr: Does pound support SNI-enabled HTTPS backends?
> >> >> >> >
> >> >> >> >
> >> >> >> >I have pound working fine terminating HTTPS and passing it to HTTP 
> >> >> >> >backends, but I need to add another service which uses HTTPS on its 
> >> >> >> >own. So I've added:
> >> >> >> >
> >> >> >> >ListenHTTPS
> >> >> >> >  HeadRemove "X-Forwarded-Proto"
> >> >> >> >  HeadRemove "X-Forwarded-For"
> >> >> >> >  AddHeader "X-Forwarded-Proto: https"
> >> >> >> >  Cert "/etc/ssl/private/wildcard-keycert_bundle.pem"
> >> >> >> >  Address 192.168.11.10
> >> >> >> >  Port 443
> >> >> >> >
> >> >> >> >  Service
> >> >> >> >    HeadRequire "Host: .*www.domain.com.*"
> >> >> >> >
> >> >> >> >    BackEnd
> >> >> >> >      Address 192.168.33.9
> >> >> >> >      Port 443
> >> >> >> >      HTTPS
> >> >> >> >     End
> >> >> >> > 
> >> >> >> >   BackEnd
> >> >> >> >     Address 192.168.33.10
> >> >> >> >     Port 443
> >> >> >> >     HTTPS
> >> >> >> >   End
> >> >> >> >
> >> >> >> >  End
> >> >> >> >End
> >> >> >> >
> >> >> >> >But the browser only gets 'The service is not available. Please try 
> >> >> >> >again later.' while syslog on pound host only logs:
> >> >> >> >
> >> >> >> >pound: BIO_do_handshake with 192.168.33.10:443 failed: 
> >> >> >> >error:00000000:lib(0):func(0):reason(0)
> >> >> >> >
> >> >> >> >
> >> >> >> >The BackEnd is Microsoft's Web Application Proxy which I don't have 
> >> >> >> >direct access to, so can't check its running config nor logs, but I 
> >> >> >> >think its SNI-enabled because:
> >> >> >> >
> >> >> >> >If I curl it using it's name I get what I expect, when I only use 
> >> >> >> >its IP:
> >> >> >> >curl -kiv https://192.168.33.10
> >> >> >> >* Rebuilt URL to: https://192.168.33.10/
> >> >> >> >* Hostname was NOT found in DNS cache
> >> >> >> >* Trying 192.168.33.10...
> >> >> >> >* Connected to 192.168.33.10 (192.168.33.10) port 443 (#0)
> >> >> >> >* successfully set certificate verify locations:
> >> >> >> >* CAfile: none
> >> >> >> > CApath: /etc/ssl/certs
> >> >> >> >* SSLv3, TLS handshake, Client hello (1):
> >> >> >> >* Unknown SSL protocol error in connection to 192.168.33.10:443 
> >> >> >> >* Closing connection 0
> >> >> >> >curl: (35) Unknown SSL protocol error in connection to 
> >> >> >> >192.168.33.10:443
> >> >> >> >
> >> >> >> >
> >> >> >> >same goes for when using openssl s_client without -servername param 
> >> >> >> >set:
> >> >> >> >
> >> >> >> >openssl s_client -connect 192.168.33.10:443
> >> >> >> >CONNECTED(00000003)
> >> >> >> >write:errno=104
> >> >> >> >---
> >> >> >> >no peer certificate available
> >> >> >> >---
> >> >> >> >No client certificate CA names sent
> >> >> >> >---
> >> >> >> >SSL handshake has read 0 bytes and written 295 bytes
> >> >> >> >---
> >> >> >> >New, (NONE), Cipher is (NONE)
> >> >> >> >Secure Renegotiation IS NOT supported
> >> >> >> >Compression: NONE
> >> >> >> >Expansion: NONE
> >> >> >> >---
> >> >> >> >
> >> >> >> >while with proper name s_client connects and certs get verified 
> >> >> >> >correctly.
> >> >> >> >
> >> >> >> >
> >> >> >> >Does anyone use pound with SNI backends?
> >> >> >> >If it's not supported yet, is it on the roadmap?
> >> >> >> >
> >> >> >> >It seems my only option is to reconfigure WAP so it serves the site 
> >> >> >> >I'm interested in to be the default when SNI is not presented.
> >> >> >> >
> >> >> >> >Thanks
> >> >> >> >Grzegorz
> >> >> >> >
> >> >> >> >P.S
> >> >> >> >It's my first post on this mailing list so please be gentle :)
> >> >> >> >
> >> >> >> >--
> >> >> >> >To unsubscribe send an email with subject unsubscribe to 
> >> >> >> >[email protected].
> >> >> >> >Please contact [email protected] for questions.
> >> >> >>  N�����r��zǧu�ޙ���+a���y�n�˛���m�h���u�l��!>W���(�֜��,z?��+?��+�笶*'
> >> >> >
> >> >> >
> >> >> >
> >> >> >
> >> >> >--
> >> >> >To unsubscribe send an email with subject unsubscribe to 
> >> >> >[email protected].
> >> >> >Please contact [email protected] for questions.
> >> >>   N�����r��zǧu�ޙ���+a���y�n�˛���m�h���u�l��!>W���(�֜��,z?��+?��+�笶*'
> >> >
> >> >
> >> >
> >> >
> >> >--
> >> >To unsubscribe send an email with subject unsubscribe to [email protected].
> >> >Please contact [email protected] for questions.
> >>   N�����r��zǧu�ޙ���+a���y�n�˛���m�h���u�l��!>W���(�֜��,z?��+?��+�笶*'
> >
> >
> >
> >
> >--
> >To unsubscribe send an email with subject unsubscribe to [email protected].
> >Please contact [email protected] for questions.
> N�����r��zǧu�ޙ���+a���y�n�˛���m�h���u�l��!>W���(�֜��,z��+��+�笶*'




--
To unsubscribe send an email with subject unsubscribe to [email protected].
Please contact [email protected] for questions.

Reply via email to