Very interesting comments, Sergey.  Remarks in-line.

On Sep 23, 2007, at 8:24 AM, Sergey Beryozkin wrote:

1. The core policy framework needs to be enhanced a bit to deal with the normalization of nested polices which are abound in WS- SecurityPolicy
policies, to deal with the effective policy calculation when multiple
Ws-SecurityPolicy polices are attached to multiple points for a given policy
subject like Endpoint, etc.

That's good to know.


2. Supporting those policy assertions which map to what CXF security
runtime already supports would be a great start IMHO. This includes an
HTTPS-related assertion too.

Good point. The same issues come up with specification of key material there, too (relevant to your remakes below).

A separate comment on a WS-Security feature. I strongly believe that we need to revisit the guidelines on when to use WS-Policy expressions as opposed to
CXF features.

For ex, lets take WS-SecurityPolicy which we all agree is worth supporting.
WS-SecurityPolicy policy expressions are in themselves can do the
configuration just fine.

I am less certain of that. Yes, technically WS-SP is capable of that (modulo specification of key material); the question is; i) were they designed for that, and ii) do we really want to inflict that kind of pain on applications? Do we provide tooling for writing this? Or is it a matter of BYO? (Also known as, "vi or emacs").

But using policy expressions provides for much more than just statically
configuring the runtime. They allow for a next to unlimited set of
enhancements be applied to the consumer of services annotated with such polices. Hence when thinking on how a given capability or requirement should be configured one should prefer using policy expressions when such requirements can be of use to a client/ consumer.

That's a fairly normative statement, there, Sergey! One shouldn't use "should" :)

If we take WS-SecurityPolicy then we can see its policy expressions are about expressing requirements to the consumers. Configuration is a positive
side-effect. One can attach such a WS-SecurityPolicy assertion either
directly in a WSDL, or using an external attachment mechanism supported by CXF. I believe Metro and Axis2 support both approaches. Either way, the
question arises where to put the private stuff, like the key material
location, passwords, and the like. One approach is to put them inside the
policy expression and strip them out at a WSDL publication time.

That seems fraught with the chance of error, to me. What assurance do you have that a private key (password) doesn't "leak"?

Another
approach is to put the private stuff outside the policy expression but then
merge the information from multiple sources.

I think that's Microsoft's approach, and I think it's basically the right one. The spec is mute on this information (righty), as it has no role in what policy is there for (viz., reducing -- not necessarily eliminating -- the amount of out-of-band agreement that would otherwise be needed to get 2 endpoints to communicate).

Either approach has its pros
and cons. The latter approach, by the way, works perfectly well with
Java-first style of service development, the runtime could smartly annotate
the WSDL at a publication time, which is what Metro can do.

I'm not sure what you mean here. Did you mean "former approach"? What's the connection between WSDL annotations and private key material? (Or was this in reference to a previous point?)

So lets have a look at a WS-Security feature. Basically I believe that if we start supporting WS-SecurityPolicy then the WS-Security feature becomes redundant/obsolete. If one uses WS-SecurityPolicy then one does not need to use WS-Security feature, and if one uses a WS-Security feature then there's
no point in using WS-SecurityPolicy.

I think that depends a lot on how you look at what the feature /does/ (or can do). For example, you could think of a feature as playing several roles in the runtime:

 *) as a "user-friendly" way to configure behavior at an endpoint

Most applications probably use pretty simplistic scenarios, and may not require the full flexibility of configuration at, say, the granularity of a WSDL operation.

 *) as a "compiler" of WS-SP

Configuration of a feature could result in the publication of WS- SecurityPolicy in a WSDL endpoint.

*) as a configuration mechanism for interoperability with non- policy-aware applications

Not all applications with which a CXF endpoint are policy- aware. So, for example, you might /need/ some kind of config, because a service has not published policy in its service contract.

 *) (as you say below) as a mechanism for specification of key material

    I like that approach.

Also, don't underestimate the importance of programmatic configuration of key material. There is a strong tendency to push configuration into a file (or other resource), but when you're dealing with applications that have key material in memory (or have obtained it via their own methods), we need to be able to provide a facility for specifying this material programatically. We do that now, for example, in the case of TLS (well, https, at least).

Supporting both WS-SecurityPolicy and
WS-Security feature will add to the confusion people already when choosing
how to configure a given capability.

Im less inclined to use WS-SecurityPolicy as a configuration mechanism, at least exclusively so. It's not really designed to be human-readable, despite the fact that it's written in XML, and XML is supposed to be human-readable, etc etc.

I'm also not sure I buy the argument that having more than one way to do things is inherently confusing to users. That kind of confusion can be managed by well-written documentation, and a clear delineation of roles. For example, if feature-based config is a generator for WS- SecurityPolicy, and there are alternative mechanisms for specifying policy at a low level (with proper support for conflict resolution), then the complexity can be kept under control.

Additionally, using policies one can
annotate the contract at a very fine-grained fashion, which is not possible
when using features.

Again, I'd ask whether this is really something that's needed, in >20% of the cases. In any event, if you have the option to do both low-level config through WS-SP, and coarser config though a feature, you cover the 80% case with low complexity.

So, to summarize:

*) I disagree that specification of key material should be done through WSDL and/or WS-Policy; that's not what it's for, and there is a real risk of compromise of security-sensitive information this way *) I am more inclined to view feature-based config as a kind of simplification of policy-based config, and as a potential generator of policy, which makes it complementary to policy, not orthogonal *) I agree that in some small percentage of cases, we need to support configuration of WS-SecurityPolicy directly, and at a low level, but these cases fall below the 20% bar, and can certainly be exposed through low-level config.

-Fred

PS> Another topic to raise in all this is the distinction between policy, as it is expressed in a service contract, and any client-side security requirements. For example, I'm a voting machine client and I want to make sure the vote I cast i) goes to the voting machine server, and is is confidentiality and integrity protected. Is that a "policy", in your sense? How do I express it? How do I enforce it. (Cuz I ain't submitting my vote until I know the policy constraints are satisfied.)

Still another consideration is what to do in the case where you're no using SOAP. But I suppose this discussion is really limited to SOAP, specifically, as the WS-SecurityPolicy spec is limited in scope to the use of WS-Security.

Reply via email to