<div dir="ltr"><div>We've already made good updates to the list of acceptable revocation reason codes and the circumstances in which they may/must be used in the last few years, but I think we all agree that we can still do better. I like the idea of fully specifying which reason codes can only be requested by the Subscriber versus which reason codes can only be administratively set by the CA. And I like the idea of having clear delineations around which revocation reasons are more "security critical" than others.</div><div><br></div><div>Yes, this means departing somewhat from the original reason code definitions as laid out by ITU-T X.509, but I think the result is clean. And in the end the most important thing is that CAs and Browsers agree on what each reason code means, and that's what this forum is for.</div><div><br></div><div>So here's a concrete starting proposal:</div><div><br></div><div>0 / unspecified: Can be requested by either the Subscriber or the CA, but can only be used administratively by the CA if no other reason applies.</div><div><br></div><div>1 / keyCompromise: Can be requested by either the Subscriber or the CA. MUST be used in specific circumstances (when compromise is demonstrated or demonstrably easy) and MUST NOT be used in others (when compromise is not demonstrated).</div><div><br></div><div>3 / affiliationChanged: Indicates that the certificate has been revoked because the CA messed up as part of validation (e.g. failed to perform DCV correctly, put a typo in the Organization field). Can only be administratively set by the CA, and only in response to incidents.</div><div><br></div><div>4 / superseded: Indicates that the certificate has been replaced. Can only be requested by the Subscriber because only they know if it's actually been replaced. Intended to be used to reduce the "stale certificate" issue as presented by Zane Ma.</div><div><br></div><div>5 / cessationOfOperation: Indicates that the certificate has been revoked because the CA messed up <i>other than</i> during validation (e.g. issued with a too-long validity period, included the wrong CRL URL, etc). Can only be administratively set by the CA, and only in response to incidents.</div><div><br></div><div>9 / privilegeWithdrawn: Indicates that the certificate has been revoked because the Subscriber messed up (e.g. violated the Subscriber Agreement, presented false validation information, etc). Can only be administratively set by the CA.</div><div><br></div><div>The other reason codes (2 / cACompromise, 6 / certificateHold, 7 / unused, 8 / removeFromCRL, and 10 / aACompromise) MUST NOT be used.</div><div><br></div><div>With this framework, it's easy to see that keyCompromise and affiliationChanged are the most critical revocation reason codes to pay attention to. It's clear that Subscribers can only request reason codes 0, 1, and 4; and clear that CAs can only unilaterally set reason codes 0, 1, and 9, except in exceptional circumstances that should be reflected by a public incident report. It makes it much easier to tell if the appropriate reason code has been set in each circumstance, which in turn makes it much easier for user-agents to react to different reason codes differently.</div><div><br></div><div>We'd still have the list of circumstances under which a cert must be revoked in Section 4.9.1.1, but the corresponding reason code in each bullet point would change.</div><div><br></div><div>I'm certainly not wedded to the details of this proposal, but I wanted to kick off discussion with a concrete starting point. What do people think about moving in a direction similar to this?</div><div><br></div><div>Thanks,<br>Aaron</div></div>