> Am 03.05.2017 um 12:08 schrieb Stefan Eissing <stefan.eiss...@greenbytes.de>:
> Whatever categories we define where etc. I think we can agree that
> a. Security policy needs to be an opt-in. No existing config will change 
> unless the user choses a policy.
> b. One value of policy names is that they can be easier to understand (if 
> there are not too many), if given a comprehensible name.
> 
> Less clear:
> c. Another value of security policies is that their definition can be updated 
> by the project. "modern" is not "modern" from 2005.
>    There is discussion needed about this aspect. Basically, do we want 
> policies like
>    i. "modern" which we update, or
>    ii. "strong-2017" which we freeze
> 
> The upside of i. is we can improve life for people who are not full time 
> employed as apache admins. The downside of it is that we can break sites with 
> a policy update.    

I propose to offer a directive, such as

  SSLSecurityPolicy modern | intermediate | old | none

with the following rationale:

1. "none" as default. This is exactly the 2.4 behaviour as of now.

   Rationale:  This means that when we ship it, all existing sites will work as 
before.

2. "modern", "intermediate" and "old" as defined and updated by Mozilla in 
https://wiki.mozilla.org/Security/Server_Side_TLS. On release or otherwise 
notified by Mozilla, we would update httpd's definitions. httpd would apply the 
definition with only documented exceptions, for example if the linked SSL 
library lacks support for a cipher. A directive needs to fail configuration 
test if vital parts of the policies are not supported, e.g. "modern" and no 
TLSv1.2 available.

   Rationale: the categories are to a certain extend self-describing. The name 
implies that the definition is a moving target. The categories are known to an 
increasing number of people. SSLLabs uses them. People love SSLLabs scores. 
   The definitions include interop expectations with browser clients. "modern" 
describes modern browsers and modern browsers implement "modern".

3. "old" included.

  Rationale: A server might specify "modern" as part of the base server config. 
But a VirtualHost might need backward compatibility for some reason and, 
instead of specifying all the usual ciphers etc. explicitly, an admin might 
prefer "old" as policy.

Do we need more categories? I do not know! These three seem to work well for 
others. But power users might like to define their own set, not the least 
because their performance/hardware make it most appropriate. We can ether say 
"do not use policy then" or provide a mechanism to define a new policy. The 
ease of doing that depends a lot on how we implement policy definitions 
(code/config/macros etc.) which I open another thread on.

BUT: I think it is very important that only the project defines what "modern" 
is in Apache httpd. If distros or local config files dropped into the server 
re-define what it means, it quickly becomes meaningless for everyone. Then we 
are back to square one. 

The project should say: Apache httpd "modern" is Mozilla's "modern", aka. what 
modern browsers implement (at the time of a release). If you configure your 
site that way, the project keeps it up-to-date. 

4. policy variations: I can get people that say: "yes, I want modern, but a 
little bit speedier than the default, as I have this special 
setup/need/hardware etc.". We can say: take modern and override the ciphers. Or 
we could offer something special, such as "modern-faster". I personally do not 
like this, at least not at the start. Too many options do not help.


In case we can not agree on these categories and their definitions, we would 
need to create, document, advocate and update our own definitions. And define 
what they mean in relation to browsers and Mozilla's classes. Is this worth our 
time?

Cheers,

Stefan

Reply via email to