[squid-dev] [PATCH] received_encrypted ACL
Alex Rousskov
rousskov at measurement-factory.com
Thu Jul 23 16:21:43 UTC 2015
On 07/23/2015 07:41 AM, Amos Jeffries wrote:
> On 23/07/2015 3:32 a.m., Alex Rousskov wrote:
>> On 07/21/2015 04:25 AM, Amos Jeffries wrote:
>>> On 21/07/2015 9:42 a.m., Alex Rousskov wrote:
>>>>>> adaptation_access icapS aclIcap
>>>>>> adaptation_access icapN !aclIcap
>>>>>>
>>>>>>
>>>>>> aclIcap can be a received_encrypted ACL. What ACL expression would you
>>>>>> suggest for aclIcap if received_encrypted is not available?
>>
>>
>>>>> # top 5 criteria - TLS transactions
>>>>> acl aclIcap allof HTTPS
>>
>>>> What is "HTTPS" ACL? If it is based on the URI scheme, then AFAIK, it is
>>>> not going to work because it will not match bumped http:// requests (at
>>>> least).
>>
>>> Good you have seen those. That is what the HTTPbis WG call
>>> "opportunistic encryption" traffic.
>>
>>
>> I bet many (most?) of them are actually regular HTTP requests sent over
>> TLS/SSL connections. There is nothing opportunistic about them.
>
> That is the very definition of "opportunistic" in the related HTTP
> documentation.
Hi Amos,
The opportunistic security (OS) documents you site talk about
optionally applying encryption to traffic X, to arrive at traffic XE. A
general-purpose intermediary cannot use those documents to go backwards
and say that any applied encryption was optional if we see traffic XE!
This backward direction is possible only when X or XE includes some sort
of an "it is OK to decrypt at any time" flag. Until such a flag is
defined for HTTP and/or TLS, and Squid learns to interpret it, the
discussion about opportunistic encryption is pretty much not relevant to
the received_encrypted ACL.
Moreover, the received_encrypted ACL itself and the related use cases do
not become wrong or obsolete when/if "it is OK to decrypt at any time"
flag is supported.
Is "http://" scheme such a flag? Not for Squid. That URI scheme existed
long before any of the HTTP WG proposals you site were written, so Squid
should not assume that an encrypted http:// request is the result of OS.
Either a more reliable flag or an admin decision is required to enable
such behavior. All of this is orthogonal to received_encrypted.
>>> This is where the security requirements and your ACL use-case differ.
>>> Security requirements for those requests is that they be handled as per
>>> any other http:// - any encrytpion or security applied is *optional*.
>>
>> No requirement can _force_ something to be optional! If the use case
>
> I think you misunderstand me.
>
> The forcing applied is: optional->mandatory.
>
> It is done by using the received_encrypted ACL. Apparently without admin
> intending to.
Any assertion that uses a "received ACL forces ..." pattern is wrong. An
ACL is a yes/no test, nothing more. Yet, you keep blaming the ACL for
doing something other than testing. That does not compute for me.
>> demands that requests received over TLS are sent to icapS service, then
>> they should be sent to the icapS service, even if some of the
>> corresponding request owners would not mind to see their requests going
>> to the icapN service.
>
> If you recall my very first words on this thread. I question the use-case.
What does that mean? Are you saying the use case does not exist? That I
made it up? Or that we should not allow the admins to do what they want
to do? Something else?
> Look closely:
> + if (!(filled->request->sources & HttpMsg::srcUnsafe) ||
> + (filled->reply && !(filled->reply->sources & HttpMsg::srcUnsafe)))
> + return 1;
> +
> + return 0;
That code does not make sense to me. I think it should be written like
this instead:
const bool safeRequest =
!(filled->request->sources & HttpMsg::srcUnsafe);
const bool safeReply = !filled->reply ||
!(filled->reply->sources & HttpMsg::srcUnsafe);
return (safeRequest && safeReply) ? 1 : 0;
Furthermore, the values of "unsafe" srcX enum constants should be
increased to actually match the srcUnsafe mask (16 is still smaller than
0xFFFF).
> While I personally like the outcome (more security). Its clearly not
> matching the use case presented as *sole* reason for the ACLs existence.
> Nor the apparent admin policy in adaptation_access.
To me, it just looks like an implementation bug. Christos, do you think
the code should be rewritten as in my sketch above?
> So I ask; why are we bothering with this ACL?
> Just use an https:// scheme match, which will only be true in the top
> line of above if()-matrix. Admin *wanting* "opportunistic security"
> should not be the ones trying to avoid using icapS in the first place.
I have answered that question several times already, including providing
specific examples requested by Kinkie: The URI scheme alone does not
match what the ACL is defined to match.
Cheers,
Alex.
More information about the squid-dev
mailing list