[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Names in Proxy Certificate




Steve Tuecke:


In draft-ietf-pkix-proxy-01, section 6.4, the authors talk about end entity names. Mostly the specification talks about an approach that was rejected. Finally, I think that the conclusion is that the parent of the proxy certificate contains the real identity information.

Note that section 6.4 is the commentary section. It is not intended to be the specification, but rather to help give some insight on the specification (e.g. what was considered but rejected). At some point it may make sense to move this out to a separate informational draft, but we figured it was better to keep it all in one spot to begin with.


The relevant portions of the spec here are sections 3.1 and 3.2.

Section 6.4 was the place that these problems jumped out at me. I will take a look at these sections in the future.


If I have it right, then have a few concerns.

First, in PKIX, we require that all issuers have a subject DN. So, empty DNs cannot be used in the long-term certificates if proxy certificates are to be associated with them. Further, the proxy certificate needs to include a subject DN if proxy certificates are permitted to issue subordinate proxy certificates.

First, let me say that we're not at all married to this particular approach to subjects and issuers. What is in this draft is, in fact, different from what we did in the Globus Toolkit. In writing this draft, we changed the approach (though not the proxy concept) to try to make it live better with son-of-2459. But in going back to son-of-2459, I see I missed the relevant statement here in 4.1.2.4, of "The issuer field MUST contain a non-empty distinguished name (DN)." I don't know how I missed this one!

This is a very important requirement. It is in RFC 2459; it is not new in Son-of-2459. If you want all of the discussion, you will have to review the mail list archive. Off the top of my head, I recall two major points. First, CRL entries are identified by issuer DN and serial number. Second, S/MIME v2 identifies the recipient public key only with issuer DN and serial number. S/MIME v3 continues to supports this method as well as the subject public key identifiers.


The problem (and perhaps why I subconsciously ignored this issuer requirement :-) is that I think the current son-of-2459 language puts us between a rock and a hard place. As your comment suggests, what if the End Entity Certificate (EEC, or what I think you are referring to as the long-term cert) has an empty subject field, and instead only has a subjectAltName? What do we use as the issuer in proxy that is signed by that EEC?

Yes, I see the end entity certificate as long-lived, and the proxy certificate as short-lived.


Maybe the best thing to do is explain what we are trying to accomplish, what I observe the constraints to be, and you might be able to advise us of an approach that lives better with son-of-2459.

First, what are we trying to accomplish... The point of proxies is that we are specifically not trying to create a new identity. Rather, we are trying to define a mechanism by which a proxy can be created that is associated back only to the subject or subjectAltName of the EEC that is at the top of the proxy signing chain. In essence, we want to bind a new key pair back to the subject of the EEC, so that the holder of the new private key can make a verifiable claim on the EEC subject name.

What is the nature of that claim? That's really up to the authorizing party. Having authenticated with a party that is using a proxy certificate, and verified its path up through the proxy chain, EEC, and CA, I know that this party has a valid proxy that was issued by an EEC with a particular subject name. In practice, the way that we use this is as a way to delegate authorization rights. That is, if I have authenticated a proxy that is tied to an EEC with a subject of "Steve", then I apply whatever authorization that I would normally apply to "Steve".

And this is where the proxyRestriction field (3.6.1.3) comes into play. What the holder of an EEC typically wants to do is issue a proxy that implies a subset of the rights normally associated with that EEC subject. So when such a proxy is presented to me, I would apply the intersection of whatever authorization rights I would normally grant to "Steve", with those that are defined in the proxyRestriction field of all proxies in the signing path.

In the current Globus Toolkit code, the way we handle subject and issuers is that we require that the EEC subject be a DN, and then we extend that DN with a "/CN=proxy" attribute in each proxy certificate. Then in the path validation we check that the proxy subject is the same as the issuer, except for an extra "/CN=proxy" attribute.

In PEM (see RFC 1114 and RFC 1422), similar name subordination rules were specified. Such rules were defined because version 1 certificates were employed. Version 3 extensions allow much better answers (i.e., name constraints extensions). I suggest that you avoid name-oriented conventions.


So now what are the issues and constraints in making this play nicely with son-of-2459:

* What do we do if the EEC does not have a subject, but instead only has a subjectAltName? Obviously, the approach that we used in the Globus Toolkit doesn't work in this case. And it doesn't seem particularly satisfying to say that you can only create a proxy certificate from an EEC that has a subject DN.

Some implementations use names to construct paths. Others use public keys (or identifiers of them). So, if you want all currently fielded software to be able to construct a certification path from the proxy certificate (PC) to the trust anchor, then you should mandate the subject DN. On the other hand, if you want such software to only construct the certification path from the end entity certificate (EEC), then you have more design freedom; however, your applications will have to include their own software to validate the PCs.


* One of the uses of the subject is for path discovery. So whatever approach we choose needs to address this. What we did in this draft is give the proxy subjectAltName a (statistically) unique name, so that the path can be discovered from these names. Another option would be to use (or invent) a different field for path discovery, such as SubjectKeyIdentifier and AuthorityKeyIdentifier.

As I said above, there is fielded software that works with both approaches. I would prefer both approaches to be supported by the specification.


* If we choose a different field for path discovery, this obviously liberates us some with respect to the subject and issuer. Nonetheless, requiring a non-empty issuer still seems like a problem. But ignoring that for the moment, what would we want for the subject or subjectAltName? Would it just be a duplicate of the EEC's? Are there any issues with have multiple certificates with the same subject, even though the proxies are clearly marked as such with a critical extensions?

Self-signed certificates are part of the architecture in several places. So far, I do not see any reason to invent a new concept.


I think that the PC should contain the identity. Looking up the chain for the first non-PC seems like work that can easily be avoided. Further, I think that you would want to minimize any special processing. In other words, the processing of a PC and an EEC should be kept as similar as possible.

* We must be very careful to not allow proxies to carry, or somehow imply, the subject of some other EEC than the one at the top of the proxy signing chain. It seems we have basically 2 choices. Either make the subject (or subjectAltName) meaningless and ignore it. Or give it meaning (e.g. carry along the EEC subject) and check it in the path validation code so that some other subject cannot be substituted. We went with the former (modulo path discovery), in the interest of avoiding yet another thing that needs to be checked in the path validation code. But I'd also be comfortable with the latter.

Again, I recommend the inclusion of the EEC names in the PC.


Anyway, I'm eager to hear if you have any suggestions for alternative approaches.

If you are going to be at the IETF in Salt Lake City, we can discuss these issues further.


Second, in PKIX, we allow attribute certificates to be associated with subject DN or issuer/serial. Wouldn't it be useful for authorizations in attribute certificates issued against the long-term certificate to apply to the proxy certificates as well? This seems possible if the attribute certificate uses the subject DN and the proxy certificates also contain this same DN.

Yes, I can certainly imagine this being useful.


Perhaps this is motivation for changing the approach to proxy subject names. For example, we might consider carrying the EEC subject in the proxy unchanged, check it in the path validation to make sure it identical, and use the KeyIdentifiers for path discovery. But there is still the question of what goes in the issuer field.

If you require the EEC to contain a subject DN, then this gets pretty simple.


But an interesting question with the combination of attribute certs and proxy certs is what constraints might you want to put on this? Do you want to be able to associate attribute certs with just EEC's, but not their proxies. Or just with proxies? Or just with a particular proxy? Or a set of proxies signed by a particular proxy? Or some other set of proxies? I can imagine arguments for all of these. This would clearly be an interesting avenue to pursue.

If the Attribute Authority (AA) wants to associate a set of attributes with the EEC, or with a particular PC, then the AA can issue the Attribute Certificate (AC) with the holder set to the appropriate issuer DN/serial number pair. If the AA wants to associate a set of attributes with the identity, then the AA can issue the AC with the holder set to the subject DN.


Russ