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

Re: Comments on / suggested changes for RFC3280bis




Peter,

Thanks for the comments. Below are some responses to your comments. I've skipped over most of the editorial comments for the moment, but I will make any appropriate changes in the document.

Peter Hesse wrote:

A real-world example of the unclear language related to behavior causing a
problem: RFC3280 specified that the inhibitAnyPolicy extension be marked
critical.  At least one version of the Sun Java CertPath implementation
rejects any certification paths containing inhibitAnyPolicy extensions which
are not marked critical.  The wording in RFC3280 was not clear that this was
a requirement for issuers and not for implementations.  (This issue has been
fixed the current RFC3280bis draft, but remains in other places for other
extensions.)
This is definitely something that will need to be addressed in 3280bis. At first I thought it would be sufficient to change statements of the form "this extension MUST be marked critical" to "conforming CAs MUST mark this extension as critical". But Sam Roberts suggested that 3280bis needs a more explicit statement that relying parties should not be checking certificates to verify that they were issued in conformance with 3280bis. As Peter Guttman noted in a recent message (http://www.imc.org/ietf-pkix/mail-archive/msg02333.html), even statements of the form "conforming CAs MUST" can sometimes be interpreted as imposing a requirement on relying parties.

Location: 4.2.1.11, 4th para, last sentence
Original Text: "If the policyConstraints extension is marked critical and
the inhibitPolicyMapping field is present, applications that do not
implement support for the inhibitPolicyMapping field MUST reject the
certificate."
Comment: This seems to be encouraging different behavior depending on the
criticality of the field, which goes against the spirit of extension
processing.
I don't understand the concern here. This statement is entirely consistent with the general rule for processing the criticality bit (from section 4.2):

A certificate using system MUST reject the certificate if it encounters
a critical extension it does not recognize or a critical extension
that contains information that it can not process.

It was only stated here explicitly since section 4.2.1.11 also says:

Conforming applications MUST be able to process the
requireExplicitPolicy field and SHOULD be able to process the
inhibitPolicyMapping field.

We wanted it to be clear that even though the ability to process the inhibitPolicyMapping field was not required, the general rule that one must still reject a certificate with a critical extension containing information that the application cannot process still applies.

Location: 4.2.1.13, 5th para, last sentence
Original Text: "DistributionPointName SHOULD include at least one LDAP or
HTTP URI."
Recommendation: Add the following sentence. "If both HTTP and LDAP
DistributionPointName URI values are specified, the HTTP
DistributionPointName SHOULD appear first."
Reason: Firewalls are more likely to allow HTTP through, and HTTP typically
results in faster access.  Applications typically try distribution points in
the order in which they appear.
The design team thought that it specifying an ordering was too prescriptive. In general it is probably a good idea to list the distribution points in order of preference, but it may not always be possible to control the order in which the distribution points are encoded. Even if 3280bis did say something about ordering, I think it should only note that they should be listed in order of preference without declaring an opinion that one protocol is inherently better than another.

Location: 4.2.2.1, 13th para, 2nd sentence
Original Text: "...and MAY specify a host name (e.g.,
ldap://ldap.example.com/cn=example%20CA,dc=example,dc=com?cACertificate;bina
ry,crossCertificatePair;binary).
Recommendation: remove ",crossCertificatePair;binary" from the example
Reason: Attributes containing cross-certificate pairs should not be
recommended.  There is no way for the client to know whether or not they
will be encountering cross-certificate pairs as opposed to certificates,
without attempting to decode them and failing.  Retrieving only
cACertificate attribute should be sufficient if LDAPv3 schema is being
followed.
First, I don't understand why you say that "[t]here is no way for the client to know whether or not they will be encountering cross-certificate pairs as opposed to certificates, without attempting to decode them and failing." If its stored in the cACertificate or userCertificate attribute, it is a certificate. If its stored in the crossCertificatePair attribute its a cross-certificate pair (it may be that either the forward or reverse element is absent, but it is still encoded as a certificate pair).

I am also not aware of any schema that would make the contents of the crossCertificatePair attribute unnecessary. The current text in X.509 states:

Clause 11.2.2:
The cACertificate attribute of a CA's directory entry shall be used to store
self-issued certificates (if any) and certificates issued to this CA by CAs in the same realm as this CA. In the case of v3 certificates, these certificates
shall include a basicConstraints extension with the cA value set to TRUE.
The definition of realm is purely a matter of local policy.

Clause 11.2.3:
The issuedToThisCA elements of the crossCertificatePair attribute of a CA's
directory entry shall be used to store all, except self-issued certificates issued to this CA. Optionally, the issuedByThisCA elements of the crossCertificatePair attribute, of a CA's directory entry may contain a subset of certificates issued
by this CA to other CAs. If a CA issues a certificate to another CA, and the
subject CA is not a subordinate to the issuer CA in a hierarchy, then the issuer
CA shall place that certificate in the issuedByThisCA element of the
crossCertificatePair attribute of its own directory entry.

The requirements for cACertificate are the same as in RFC 2587. draft-zeilenga-ldap-x509-01.txt simply refers to clause 11.2.2 in X.509. All of these documents state the same thing: certificates issued to this CA by CAs in a different "realm" do not need to be included in the cACertificate attribute, but must be included in the crossCertificatePair attribute. I am not aware of any schemas that require all certificates issued to the CA to be included in the cACertificate attribute.

Location: 4.2.2.1, 16th para
Original Text: " .p7c   A DER encoded "certs-only" CMS message as specified
in [RFC 2797]."
Recommendation: " .p7c   A DER encoded "certs-only" CMS message as specified
in [RFC 2797] which MUST NOT contain self-signed certificates."
Reason: Self-signed certificates retrieved externally should not be included
because they cannot be trusted,
I agree that self-signed certificates should not be included in the directory. Self-signed certificates should only be used as a source of trust anchor information and should be obtained by secure, out-of-band means for this purpose. Including unnecessary certificates in the directory only complicates matters. I think they should be excluded from the cACertificate attribute of the directory as well the Web server. It is, however, very common practice to include self-signed certificates in the directory.

I would be in favor of stating that self-signed certificates SHOULD NOT be included in the directory or in the information pointed to by the AIA extension, but given that this is such common practice, I would need sufficient evidence of working group consensus before making any changes to the current text.

Location: 4.2.2.1, 18th para
Original Text: "The semantics of other id-ad-caIssuers accessLocation name
forms are not defined."
Recommendation: Add a new paragraph before this one: "If both HTTP and LDAP
accessLocations are specified, the HTTP accessLocation SHOULD appear first."
Reason: Same as above (4.2.1.13, 5th para, last sentence).
I am actually aware of some implementations that can process an LDAP URI in the AIA extension but not an HTTP URI (and vice versa), which I think is yet another reason that 3280bis should not declare that one protocol is inherently superior to another.

Location: 4.2.2.2, 9th para, 2nd sentence
Original Text: "...and MAY specify a host name (e.g.,
ldap://ldap.example.com/cn=example%20CA,dc=example,dc=com?cACertificate;bina
ry,crossCertificatePair;binary).
Recommendation: remove ",crossCertificatePair;binary" from the example
Reason: Same as above (4.2.2.1, 13th para, 2nd sentence).
See text from clauses 11.2.2 and 11.2.3 from X.509 above. The cACertificate attribute only includes the self-issued certificates issued by the CA. Only the crossCertificatePair attribute contains the cross-certificates issued by the CA. So, the crossCertificatePair attribute is even more important in the SIA extension than in the AIA extension.


Dave