[squid-users] LEGACY_SERVER_CONNECT, ALLOW_UNSAFE_LEGACY_RENEGOTIATION does not work - SSL bump, OpenSSL 3

Alex Rousskov rousskov at measurement-factory.com
Fri Dec 30 15:08:49 UTC 2022


On 12/29/22 20:05, Amish wrote:
> On 29/12/22 22:32, Alex Rousskov wrote:
>> On 12/29/22 10:41, Amish wrote:
>>> On 29/12/22 20:23, Alex Rousskov wrote:
>>>> There are several ways to fix this bug long-term, including these two:
>>>>
>>>> Minimal: Create a TLS context object dedicated to peeking at origin 
>>>> servers. It will probably have to be admin-configurable to 
>>>> accomodate various TLS v1.2 (and earlier) corner cases, but we can 
>>>> try to start without adding support for such configuration. Continue 
>>>> to use the existing configurable context for staring and other needs 
>>>> but call createClientContext(true) for that existing context.

> I do not know what createClientContext() actually does. I thought it was 
> just a way to test your theory.

Security::PeerOptions::createClientContext() creates the client context 
object we talked about. Its boolean parameter determines whether the new 
context object will honor the corresponding options=... part of its 
configuration.


> If you tell me the starting point then I may try to look at the code and 
> try to implement your minimal way to fix it.

Even the minimal change is not trivial; FWIW, I do not recommend working 
on this if you do not enjoy tinkering with messy code or if you are not 
willing to carefully test various ssl_bump configuration scenarios.

I have not verified/tested any of this, but I would start with these steps:

1. Find ssl_client in SquidConfig.h and add a peekingContext data member 
next to the existing sslContext data member. The two fields should have 
the same Security::ContextPointer type.

2. Examine every Config.ssl_client.sslContext use in the existing code 
("git grep -n ssl_client.sslContext") and adjust those that need an 
adjustment:

* In the code where you edited the createClientContext(false) call, add 
a new line there to initialize the new Config.ssl_client.peekingContext 
pointer with something like 
Security::PeerOptions().createClientContext(false) call (dictated by the 
minimal configuration-free approach outlined above).

The old Config.ssl_client.sslContext field should be initialized with a 
Security::ProxyOutgoingConfig.createClientContext(true) call that you 
have tested already.

* configFreeMemory() will need to reset peekingContext as well.

* In peeking and splicing cases, 
Ssl::PeekingPeerConnector::getTlsContext() should return the new 
peekingContext instead of the old Config.ssl_client.sslContext. I am not 
sure, but it is possible that this method needs to examine sslBumpMode 
like Ssl::PeekingPeerConnector::initialize() does (and default to 
peeking/old context when sslBumpMode is not available). In other words, 
return the new peekingContext only when sslBumpMode is reachable and is 
equal to Ssl::bumpPeek or Ssl::bumpSplice.


You will find some git recipes at 
https://wiki.squid-cache.org/DeveloperResources/GitHints

When you think your code is ready to become official, use 
https://wiki.squid-cache.org/MergeProcedure


> In the mean time, do you think this bug needs to be reported as an issue 
> on Github? I can do that.

We do not use GitHub Issues. We use Squid Bugzilla at 
https://bugs.squid-cache.org

It is probably a good idea to report a "tls_outgoing_options options=... 
are ignored" bug there, with a reference to this email thread.


Thank you,

Alex.


More information about the squid-users mailing list