Compare commits

..

179 Commits

Author SHA1 Message Date
Aaron Gable 23a92a65cc
Update 6.2.7 to match 6.1.1 and 5.1.8 (#296)
Let's have our cross-references use the same language.
2025-07-25 10:58:21 -07:00
Aaron Gable 3be4b8b141
Remove "at any time" (#295)
Although we're required to maintain "a continuous 24x7 ability to
accept... revocation requests", we are not required to do so via any
particular interface. Our cert-prob-reports alias satisfies this
requirement, so we should not tie our own hands with regards to ACME
Revocation API availability.
2025-07-25 10:42:18 -07:00
Aaron Gable d2ef7f10db
Allow O=ISRG in Root Certs (#294)
As we intend to do in our 2025 ceremony.
2025-07-24 11:27:06 -07:00
Josh Aas e5cc4bb98f
Pluralize identifiers, keys, and certificates in subscriber warranties section. (#292)
Co-authored-by: Aaron Gable <aaron@letsencrypt.org>
2025-07-24 14:24:34 -04:00
James Renken f77ac9e555
Update HSM certification standards (#293)
5.1.8 & 6.2.1: Replace FIPS language with excerpt of BRs 6.2.7, allowing
Common Criteria EAL 4+ as an alternative to FIPS.

6.1.6: Remove mention of FIPS 186-4, which is not specifically required
by the BRs and was withdrawn on Feb. 3, 2024 in favour of FIPS 186-5.

6.2.10: Replace FIPS mention with more general language, borrowing a
phrase from 5.1.7.

---------

Co-authored-by: Josh Aas <jaas@kflag.net>
Co-authored-by: Aaron Gable <aaron@letsencrypt.org>
2025-07-24 14:16:51 -04:00
Josh Aas 0fcd126c15
Use more precise language in Section 3.1.3. (#290) 2025-07-23 16:47:42 -07:00
Josh Aas 383546467e
9.6.3 Pt 3: Change or to and and pluralize identifiers. (#289) 2025-07-22 16:22:56 -04:00
Aaron Gable 379ac450ce
Clarify that Short-Lived certs may not be revoked (#287)
Rearrange information in Sections 4.9.2 and 4.9.3, to make it easier to
talk about differences between requesting revocation versus that request
being accepted. State that revocation requests for short-lived certs may
be ignored, regardless of how the request was received. In the two
places where we say we will revoke "all" certificates under certain
circumstances, update that to only include long-lived certs.

Fixes https://github.com/letsencrypt/cp-cps/issues/257
2025-07-22 16:12:18 -04:00
Aaron Gable fdbead24ad
Unify and linkify section cross-references (#286)
Remove all instances of "of this document"; bare section references
always point to this document. Wrap all internal section references in
hyperlinks, to make document navigation easier. Settle of saying
"Section X of the Baseline Requirements", rather than putting the
section number after the document name.

Fixes https://github.com/letsencrypt/cp-cps/issues/187
2025-07-22 15:54:17 -04:00
kberdan f00ef5845a
Fix section heading spacing. (#288)
Minor formatting change from a tab to a space to make format consistent
with other headings.

Co-authored-by: Kristin Berdan <kberdan@abetterinternet.org>
2025-07-17 12:32:50 -04:00
Josh Aas 2770f0a986
Add new WebTrust audit types for the future (#285)
Resolves #284
2025-07-15 15:49:51 -04:00
Josh Aas 6e053d5e0b
Remove unnecessary ETSI reference (#282)
Fixes https://github.com/letsencrypt/cp-cps/issues/277

---------

Co-authored-by: Aaron Gable <aaron@letsencrypt.org>
2025-07-15 15:20:17 -04:00
Josh Aas 91247f36ca
Improve reference in Section 4.9.3 (#283)
Fixes https://github.com/letsencrypt/cp-cps/issues/278
2025-07-15 15:04:52 -04:00
Josh Aas b916ee3ad6
State that HSMs are validated as meeting FIPS requirements (#281)
...not just that they meet them.

Fixes https://github.com/letsencrypt/cp-cps/issues/269
2025-07-15 15:04:33 -04:00
Josh Aas 104deee221
Introduce Identifier definition (#280)
To make it easier to collectively refer to both domain names and IP
addresses.

Fixes https://github.com/letsencrypt/cp-cps/issues/276

---------

Co-authored-by: Aaron Gable <aaron@letsencrypt.org>
2025-07-14 15:28:45 -04:00
Aaron Gable 4cd3c805d0
Describe our remote VAs in Section 3.2.2 (#263)
Fixes https://github.com/letsencrypt/cp-cps/issues/234
2025-07-14 12:02:04 -07:00
Josh Aas 969ebec64b
Revocation timeline notification (#270) 2025-07-14 14:57:03 -04:00
Jaime Hablutzel 08747fd8c3
Replace several "ISRG CA" occurrences with "ISRG PKI" (#268) 2025-06-26 18:10:06 -04:00
Josh Aas ff65281e10
Clarify language regarding the safeguarding of data. (#279) 2025-06-26 17:15:41 -04:00
Josh Aas 8daf2311d5
Updated text for Section 9.9 (#275)
Co-authored-by: Aaron Gable <aaron@letsencrypt.org>
2025-06-26 15:08:19 -04:00
Josh Aas 972fac5ec4
Updated text for Section 9.7 (#274) 2025-06-26 15:08:09 -04:00
Aaron Gable 1c778b99c0
Changelog for v5.7 (#267) 2025-01-15 12:22:01 -08:00
Aaron Gable 109c2b7da8
Update trusted roles (#266)
Reference the NetSec Requirements for the definition of Trusted Role,
and update our list of Trusted Roles.
2025-01-15 12:07:32 -08:00
Aaron Gable 2eeca3ec2c
Simplify "at all times" / "24x7" (#265)
Only use the "24x7" language in sections where the BRs do the same.

Fixes https://github.com/letsencrypt/cp-cps/issues/256
2025-01-15 11:39:29 -08:00
Aaron Gable 2139057132
Document issuance from Root CAs (#264)
Fixes https://github.com/letsencrypt/cp-cps/issues/247
2025-01-15 11:38:16 -08:00
Aaron Gable fc17e8cb9a
Describe subscriber key checks (#262)
Fixes https://github.com/letsencrypt/cp-cps/issues/227
2025-01-15 11:27:24 -08:00
Aaron Gable c21f852fe4
Clarify CA public key delivery (#261)
Fixes https://github.com/letsencrypt/cp-cps/issues/209
2025-01-15 11:24:39 -08:00
Aaron Gable 9b75865140
Add support for IP Address validation (#259)
Fixes https://github.com/letsencrypt/cp-cps/issues/207
2025-01-15 11:22:37 -08:00
Aaron Gable 672061c4c2
Make TLS Client Auth optional (#258)
The TLS Client Auth EKU will be omitted from Subscriber Certificates
issued under the "tlsserver" profile, and likely omitted from
Subordinate CA Certificates issued later this year to comply with
Chrome's "single purpose hierarchy" requirement.

Fixes https://github.com/letsencrypt/cp-cps/issues/260
2025-01-15 11:18:19 -08:00
Josh Aas 9857498044
Remove text containing typo. (#255) 2024-12-12 12:22:01 -05:00
Josh Aas 60e2c4e2dd
Change log for CPS v5.6. (#254) 2024-12-12 12:07:16 -05:00
Aaron Gable c7621992f5
Remove reference to expiry emails (#253) 2024-11-25 09:08:44 -08:00
Josh Aas 177465f28f
Make OCSP entirely optional (#252) 2024-11-20 19:48:13 -05:00
Aaron Gable af00251020
Release notes for Version 5.5 (#250) 2024-10-25 13:52:28 -07:00
Aaron Gable f39852b23e
Reference BRs for algorithm object identifier encodings (#251)
No need to duplicate these encodings in our own documents;
cross-referencing the BRs is sufficient.
2024-10-25 13:50:04 -07:00
Aaron Gable ad0699fafe
Reference 6.1 for key changeover (#249)
RFC 3647 says that the key changeover section "describes the procedures
to provide a new public key to a CA's users following a re-key by the
CA. These procedures may be the same as the procedure for providing the
current key."

Since section 6.1 describes the procedures for generating and providing
the current CA keys to relying parties, it is a better reference than
section 2.2.
2024-10-25 13:19:01 -07:00
Aaron Gable 70910b184c
Improve profiles (#228)
- Remove OCSP Delegated Responder profile, as we no longer issue such
certificates
- Remove restrictions on the Common Names we set
- Remove restriction on ECDSA P-521
- Improve descriptions of key sizes and checking routines
- Improve descriptions of algorithm identifiers
- Miscellaneous formatting and phrasing improvements

Fixes #185
Fixes #196
Fixes #212
Fixes #213
Fixes #217
Fixes #218
2024-10-23 13:49:56 -07:00
Aaron Gable bd16234c9f
Remove references to certificate contents from issuance process (#245)
Sections 4.3.1 and 4.4.2 do not need to describe certificate contents,
only the actions undertaken to issue those certificates.
2024-10-23 13:22:26 -07:00
Aaron Gable bf6a42a4d8
CAA: Use "requested FQDN" instead of subjectAltName (#248) 2024-10-23 13:06:39 -07:00
Aaron Gable 61afd95284
Simplify section 2.1 and 2.2 (#241)
- Move references to both the policy/legal repository and the
certificate repository into Section 2.2, matching the BRs
- Replace description of revocation advertisement with cross-reference

Fixes https://github.com/letsencrypt/cp-cps/issues/239
2024-10-22 13:20:15 -07:00
Aaron Gable 47737b728c
Simplify language regarding names in Section 3.1.* (#242)
The BRs have no requirements in Section 3.1.1, and all statements about
names in our certificates should be found in our profiles.
2024-10-22 13:20:01 -07:00
Aaron Gable 58a53bd800
Slightly simplify Section 6.3.2 validity period cross-reference (#246) 2024-10-22 13:11:15 -07:00
Aaron Gable fce73f0556
Simplify Section 4.2.2 references to PSL (#244)
Rather than speaking about how we use the PSL to filter the TLDs of DNS
names in our certificates, speak about filtering names in issuance
requests.
2024-10-22 13:11:04 -07:00
Aaron Gable 2948642554
Simplify statements about authentication of cert information (#243)
- Simplify 3.2.2 to more directly reflect the language used in that
section of the BRs
- Replace sections 3.2.3, 3.2.4, and 3.2.5 with "No applicable", because
Let's Encrypt does not need to perform authentication of individual
identity or validation of authority, and does not include non-verified
subscriber information in certificates

Note that this is the first use of "Not applicable." as full section
contents in this document. This feels more appropriate than "No
stipulation", as we are affirmatively stating that these sections do not
concern our operations, rather than saying simply that we choose not to
describe our operations in these sections.
2024-10-22 13:10:46 -07:00
Aaron Gable ce234fb163
Tighten definition of a Precertificate (#240)
No need to recapitulate the definition; just reference it.
2024-10-22 13:07:29 -07:00
Aaron Gable c9bafa0f2a
Explicitly state that we do pre-issuance linting (#232)
Update Section 4.3.1 to mention our pre-issuance linting, which is now
required by the BRs. Also rephrase Section 8.7 to mention our
post-issuance (rather than pre-issuance) linting, in line with what that
section of the BRs cares about.

Fixes https://github.com/letsencrypt/cp-cps/issues/223
2024-10-18 12:50:41 -04:00
Aaron Gable 348c7e38a4
Replace normative language with descriptive language (#237)
Fixes https://github.com/letsencrypt/cp-cps/issues/221
Fixes https://github.com/letsencrypt/cp-cps/issues/222
2024-10-17 23:19:32 -04:00
Aaron Gable fa95375838
Replace prohibited certificate usage with reference to Subscriber Agreement (#230)
It is not the role of the CP/CPS to place restrictions on Subscriber
behavior, and we already have very similar language in the Subscriber
Agreement.

Fixes #205
2024-10-17 23:15:56 -04:00
Aaron Gable 05feb6f07a
Remove key changeover text (#233)
RFC 3647 says that the key changeover section "describes the procedures
to provide a new public key to a CA's users following a re-key by the
CA. These procedures may be the same as the procedure for providing the
current key." As such, it's best to replace this section with a
reference to Section 2.2, which already describes how we publish our CA
public keys.

Fixes https://github.com/letsencrypt/cp-cps/issues/225
2024-10-17 22:17:06 -04:00
Aaron Gable 321a91540b
Clarify what submitting a CSR means (#229)
Fixes #198
2024-10-17 22:07:00 -04:00
Phil Porada ca61811071
Update 6.2.10 to remove mention of Subscriber private key destruction (#226)
Let's Encrypt is never in control of a Subscriber's private key and thus
has no say in their private key destruction.
2024-10-17 22:05:32 -04:00
Aaron Gable 49bed6610e
Release notes for Version 5.4 (#238) 2024-09-27 13:21:24 -07:00
Aaron Gable 7b8ea4bbcf
Remove requirements around meaningful names (#231)
Section 3.1.2 is described by RFC 3647 as simply "Whether names have to
be meaningful or not", with a footnote defining "meaningful" as "the
name form has commonly understood semantics to determine the identity of
a person and/or organization."

By this definition our certificates -- neither CA certs nor end-entity
certs -- have "meaningful" names. We should accurately reflect this by
simply stating "no stipulation" and not placing any additional
requirements on ourselves.

Fixes https://github.com/letsencrypt/cp-cps/issues/224
2024-09-27 13:16:33 -07:00
Aaron Gable d5b258ac45
Update CP/CPS to exactly match RFC 3647, Section 6 (#216)
Change the phrasing and capitalization of a few CP/CPS section headings
to exactly match those suggested by RFC 3647, Section 6. These section
titles will be mandatory as of 2024-09-15, per CA/BF Ballot SC-074.

Also add a new linting tool which enforces some of the requirements
imposed by Ballot SC-074. And fix the old "Test Tools" job, which was
broken because it only ran for PRs targeting "master".
2024-05-07 15:12:12 -07:00
Josh Aas 9cfeef2364
CP/CPS 5.3 release notes (#215) 2024-03-22 14:02:49 -06:00
Andrew Gabbitas afa93098bd
Fix keyCompromise behavior (#214)
* Fix keyCompromise behavior
2024-03-22 15:48:45 -04:00
Phil Porada 2a36c02b5f
Remove the term 'renewing' from overview (#206) 2024-03-21 13:22:56 -04:00
Aaron Gable 177a3e3daf
Improve subordinate CA IDP phrasing (#203) 2024-02-07 09:14:09 -08:00
Josh Aas 9a38b63961
Update release notes for version 5.2. (#202) 2024-02-07 09:44:39 -07:00
Phil Porada b1d49edde4
Add IssuingDistributionPoint to Subordinate CA CRL Profile (#195)
* Add subordinate CA idp text

* Improve IDP language

---------

Co-authored-by: Aaron Gable <aaron@letsencrypt.org>
2024-02-06 21:33:59 -07:00
Aaron Gable 362cf1393a
Remove id-qt-cps from Subscriber profile (#201) 2024-02-06 19:55:18 -07:00
Aaron Gable c70f48e494
Add CRLDP to Subscriber Certificate Profile (#200) 2024-02-06 18:28:32 -07:00
Aaron Gable 63b7633d02
Clarify waste disposal procedure and FIPS levels for backups (#199)
Some media has secure erasure procedures which can be used in lieu of physical destruction. Also clarify FIPS levels for backups.
2024-02-06 18:19:25 -07:00
Aaron Gable ad99251dde
Remove CPS OID and URL from Subscriber Certificate profile (#191)
* Remove CPS OID and URL from Subscriber Certificate profile

As of BRs version 2.0.0, the inclusion of policy identifiers beyond the BRs DV OID is optional, and the inclusion of CPS URL policy qualifiers for those identifiers is NOT RECOMMENDED. Remove these from our certificate profile, as we intend to remove them from our Subscriber certificates on June 15th.

* Make it optional, unify Subscriber and Subordinate CA language

* Trailing space

Co-authored-by: Andrew Gabbitas <agabbitas@letsencrypt.org>

* Update publication date

---------

Co-authored-by: Andrew Gabbitas <agabbitas@letsencrypt.org>
2023-05-16 15:43:31 -04:00
Josh Aas aad5e52b64
Remove/archive stuff from historic separate CP/CPS (#189)
* Remove/archive stuff from historic separate CP/CPS.

* Remove patch files entirely
2023-05-05 12:00:19 -04:00
Josh Aas a675cab1d7
Add v5 release date (#190)
* Add v5 release date

* Change release date to May 5
2023-05-05 11:55:13 -04:00
Josh Aas ef4e45fca6
Combined CP/CPS (#186)
Create new combined CP/CPS based on existing CPS. The date will
be added in a future commit.

Leave the existing CP.md and CPS.md documents, and their supporting
infrastructure, in place. They will be removed or moved aside in a future
change.
2023-05-04 12:33:41 -07:00
Josh Aas fe4ba582a1
Release information for CP 3.4 and CPS 4.5 (#184)
* Release information for CP 3.4 and CPS 4.5

* Update patch version of release date
2023-03-09 13:57:52 -05:00
James Renken aa3275af59
Minor grammatical, punctuation, and formatting changes (#174)
* Section 1.1: Eliminate passive voice. Correct HTTP links to HTTPS.
* Section 1.2: Change "Certification Practices Statement" to use "Practice" singular, for consistency. Add revision information for these changes.
* Section 1.4.2: Add punctuation and "or" to alphabetical lists, for clarity.
* Section 1.5.1: Eliminate passive voice.
* Sections 1.6.1 & 1.6.2: Reformat to match the CP's formatting style.
* Section 1.6.4: Add an Oxford comma to the document list (as used throughout). Remove the incorrect comma before "of the CA". Correct "these Requirements" to "this CPS".
* Section 3.4: Partially eliminate passive voice (some does reduce ambiguity).
* Section 4.2.1: Eliminate passive voice.
* Section 4.9.2: Eliminate passive voice.
* Section 4.9.3: Eliminate passive voice.
* Section 4.9.8: Eliminate passive voice. Add a comma after "Relying Party", for clarity.
* Section 5.3.4: Rephrase that training is "repeated annually" not "on an annual basis", for brevity.
* Section 5.7.3: Eliminate passive voice.
* Section 5.8: Eliminate passive voice (which makes "review"'s tense correct).
* Section 6.1.6: Change NIST SP link to break out the URL, for consistency.
* Section 6.4.1: Add a second "the" before "place it will be stored", for clarity.
* Section 6.4.2: Replace "a combination of" with "both", for brevity.
* Section 6.6.1: Replace "reception" with "receipt", per common usage.
2023-03-09 12:28:26 -05:00
Josh Aas 5ff9f3220d
Correct references to cross-signing entities in indemnity language. (#183) 2023-03-08 20:20:00 -05:00
Aaron Gable 95d4fbbe6b
Update CP to match BRs v1.8.6 (#181) 2023-03-08 10:27:37 -07:00
Aaron Gable 6a7dc5e78c
Add subscriber CRL profile to CPS Section 7.2 (#180) 2023-03-04 13:18:59 -05:00
Aaron Gable e8bc4b86f3
Update Subscriber cert profile to make CN optional (#179) 2023-03-04 13:17:42 -05:00
Phil Porada 7682d249e2
Change Systems Administrator to PKI Administrator (#177) 2023-03-04 13:16:47 -05:00
James Renken 62a623e5fa
Changes for CPS version 4.4. (#172)
* Update Sections 4.9.7 & 4.10.1 to cover CRLs for Subscriber Certificates.
* Clarify language about background checks in Section 5.3.
2022-09-28 15:25:46 -06:00
Aaron Gable 688fa29016
Update CPS audit log and archive retention periods (#171)
This brings our CPS commitments in line with the new requirements
as of SC51 and our own CP.
2022-05-05 11:18:35 -07:00
Aaron Gable 93ac20c999
Update CP to match BRs v1.8.4 (#170)
This updates our CP to match BRs v1.8.4, which pulls in one ballot:

SC54: Onion Cleanup
2022-05-05 11:18:15 -07:00
Aaron Gable 7cdf44a31e
Update CP to match BRs v1.8.3 (#169)
This updates our CP to match BRs v1.8.3, which pulls in ballots:
- SC50: Remove the requirements of 4.1.1
- SC53: Sunset for SHA-1 OCSP Signing
- SC51: Reduce and Clarify Log and Records Archival Retention Requirements

Fixes #166
Fixes #167
2022-05-02 14:30:22 -07:00
Josh Aas 3f40b1e812
Dec 22 release notes (#165) 2021-12-22 14:12:18 -05:00
Phil Porada e87977bf16
Capitalize SHA-256 fingerprints (#157)
* Capitalize the SHA-256 fingerprint of ISRG Root X2

* Uncapitalize html br
2021-12-21 19:08:34 -05:00
Aaron Gable 8d1d52021d
Update Trusted Roles to match internal definitions (#162)
* Update Trusted Roles to match internal definitions

* Update trusted role definitions

Co-authored-by: Josh Aas <jaas@kflag.net>
2021-12-21 19:08:24 -05:00
Josh Aas 22af6c3c6b
Update CPS 9.4.6. (#164) 2021-12-21 19:07:47 -05:00
Aaron Gable 3ad73ed37c
Update patchfile for minor changes (#158) 2021-12-15 14:38:48 -05:00
Aaron Gable 8687e0ec44
CPS: minor updates and typo fixes (#159)
* CPS: minor updates and typo fixes

* Survival of subscriber agreements
2021-12-15 14:38:03 -05:00
Andrew Gabbitas 893ca4356a
Be consistent about FIPS 140-2 references (#161)
Fixes #150
2021-12-15 14:37:39 -05:00
Aaron Gable 5e969621a1
Update CP for BRs v1.8.0 (#153) 2021-12-15 10:26:06 -07:00
Josh Aas be0b02016f
Changelogs for CP 3.1 and CPS 4.1 (#149)
* Changelogs for CP 3.1 and CPS 4.1

* Add release dates
2021-08-20 13:31:13 -04:00
James Renken da1e907c9f
Update CPS headings to match CP (#145)
* Update CPS headings to match CP

Fixes #126

* Tiny capitalization fix
2021-08-20 09:15:08 -04:00
James Renken 6e61a939bf
Pedantic CP & CPS formatting changes (#148)
Replace smart quotes with ASCII.

Unwrap an inconsistently hard-wrapped paragraph.
2021-08-20 08:01:23 -04:00
James Renken b3e597dff4
s/domain/FQDN/ in 3.1.2, 3.1.3, 3.1.6, 4.9.2 (#146)
Fixes #94
2021-08-19 21:45:35 -04:00
Josh Aas 876884866b
Update CP references in CPS to use consistent language to identify ISRG CP (#143) 2021-08-19 21:43:32 -04:00
James Renken 6505e3e5f0
Make URLs in CP and CPS clickable (#144)
* Make repo URL clickable

Fixes #54

* Make all links properly clickable
2021-08-19 21:31:03 -04:00
Josh Aas 30d4a16f0c
Remove duplicate definitions from CPS (#142) 2021-08-18 17:59:50 -04:00
Josh Aas c33814f4b9
Capitalize all uses of defined term Subscriber (#141) 2021-08-18 17:31:45 -04:00
James Renken 2615c01e54
Update ISRG mailing address (#140)
* Update ISRG mailing address

* Fix BR tags throughout
2021-08-18 16:46:53 -04:00
Josh Aas 518ebeb42c
Release information for new CP and CPS docs (#138) 2021-07-19 08:49:31 -06:00
Josh Aas b5df90050f
Update document precedence language to match BRs. (#136) 2021-07-18 10:12:19 -06:00
Josh Aas ab2ad9b572
CPS: Match BR recommended language for document precedence (#135) 2021-07-18 09:49:53 -06:00
Josh Aas a8eb1fc249
Upddate CP and CPS changelogs. (#134) 2021-07-16 20:15:46 -06:00
Aaron Gable 09609e962c
Add owners listing only PMA members (#133) 2021-07-16 11:46:37 -06:00
Aaron Gable 9a34ebdcb4
Move revocation response to 4.9.3 (#131)
* Move revocation response to 4.9.3

* match language exactly
2021-07-16 13:25:04 -04:00
Aaron Gable da60387c14
Use Subscriber instead of End-Entity (#129) 2021-07-16 13:18:20 -04:00
Aaron Gable efaf2e8181
Clarify Profile Validity Periods in CPS 7.1 (#130) 2021-07-16 13:16:35 -04:00
Aaron Gable 216cd74d0a
Simplify Section 3.2.2 (#121)
* Simplify Section 3.2.2

* Rephrase

* Incorporate defns by reference

* specify CN and SANs
2021-07-16 12:57:54 -04:00
Aaron Gable 2bed34d279
Use Subordinate instead of Intermediate (#128) 2021-07-16 12:57:18 -04:00
Aaron Gable fa50a6faf7
Clarify actions during issuance (#120)
* Clarify actions during issuance

* Rewrite
2021-07-16 12:43:02 -04:00
Aaron Gable c3a73c0ba7
Consolidate relying party revocation requirements (#119)
* Consolidate relying party revocation requirements

* s/must/should/

* Capitalization
2021-07-16 12:13:01 -04:00
Aaron Gable f0bc0b7056
Remove x365 from continuity statements (#122) 2021-07-15 14:05:24 -04:00
Aaron Gable 4a94dd7b97
Standardize on ISRG CA Private Keys (#118) 2021-07-15 14:04:17 -04:00
Josh Aas 447998baf5 CP: Add proper license attribution and get rid of front matter we don't use (and which causes a build error due to date formatting). 2021-07-15 10:17:34 -04:00
Aaron Gable 9b8bed7656
Clarify system development roles and controls (#117)
* Clarify system development roles

* s/platform/environment/
2021-07-14 14:30:11 -04:00
Aaron Gable 28fc04c71b
Update 4.9.10 to clarify OCSP behavior (#116) 2021-07-14 14:12:00 -04:00
Aaron Gable 1cb0ef2f88
Remove gendered version of MitM (#115) 2021-07-14 13:51:19 -04:00
Aaron Gable 9fdf52aaf6
Remove duplicated text from 1.3.1 (#114)
* Remove duplicated text from 1.3.1

* Copy up one sentence

* Separate paragraph

* Rephrase
2021-07-14 13:49:12 -04:00
Aaron Gable c9ae209282
Update CP/CPS from internal consistency review findings (#106)
* Update CP/CPS 1.3.2 to quote BRs

Fixes #55

* Update CP/CPS 2.3 to quote the BRs

Fixes #60

* Make CPS 4.4.2 cross-ref 2.2

Fixes #62

* Update CPS 3.2.1 to mention ACME

Fixes #65

* Have CPS 4.5.1, 6.1.1, 6.2.10 defer to Subscriber Agreement

Fixes #66

* Consolidate CAA info into CPS 4.2.1

Fixes #69

* Move high-risk domains to CPS 4.2.1

Fixes #70

* Mention validation reuse period in CPS 4.2.1

Fixes #71

* Update CPS 4.9.5 to also match CP 4.9.1

Fixes #72

* Reorder method summaries in CPS 3.2.2

Fixes #74

* Simplify CPS 4.9

Fixes #77

* Clarify OCSP scope in CPS 4.10.1

Fixes #78

* Clarify Certificate Repository in CPS 6.1.4

Fixes #80

* Update CPS 6.3.2 to reference Section 7

Fixes #82

* Simplify activation data protection into CPS 6.4.2

Fixes #89

* Clarify OCSP Responder profile in CPS 7.1

Fixes #52

* Fix typos in CP/CPS 8.2

Fixes #100

* Updates from review

* Additional update
2021-07-14 13:31:34 -04:00
Aaron Gable c54cfd8a06
Update CPS for Mozilla feedback (#101)
* Add pre-issuance linting to CPS 8.7

Fixes #48

* Clarify key compromise in CPS 4.9.12 and 4.9.3

Fixes #49

* Update CP/CPS 7.1.4 to be DV-specific

Fixes #50

* Remove specific reference to zlint
2021-07-14 12:51:30 -04:00
Jacob Hoffman-Andrews 26cf757d01
Fix grammar of public key quality check (#93)
This had some mixed plurals. Also break into a bullet list
for better clarity.
2021-07-14 12:45:19 -04:00
Jacob Hoffman-Andrews cbeb1b87d0
Remove info RFC ref in "Rules for .. name forms" (#92)
Remove "RFC 2253 and RFC 2616 provide more information." These aren't exhaustive references for Distinguished Names and are more likely to be confusing than helpful.
2021-07-14 12:43:44 -04:00
Jacob Hoffman-Andrews a0d7770087
Fix tense agreement for 4.4.2 (#61)
Change "will attempt" to "attempts" to agree with surrounding text.
2021-07-14 12:42:49 -04:00
Aaron Gable 8a366df668
Update CP for BRs v1.7.8 (#112) 2021-07-13 22:41:00 -04:00
Josh Aas 9b8de5dc90
CP v2.8 (#111) 2021-07-12 16:55:32 -04:00
Josh Aas bb375b56a8 Add instructions for generating a new ISRG CP by patching the BRs. 2021-07-09 10:52:50 -04:00
Josh Aas ec1b64201a Update Section 1.3 in patch against BRs. 2021-07-09 10:37:53 -04:00
Josh Aas 23a577f8e4 Add patch for creating ISRG CP from BRs v1.7.6 2021-07-08 17:18:57 -04:00
Samantha 6e0172cfea
no-stipulations: Adding first version (#109)
* no-stipulations: Adding first version

- Add `tools/no_stipulations/no_stipulations.py` with unit tests
- Add github actions to `flake8` and `unittest`

* no-stipulations: Bug fix (#5)

- Fix insertion of extra newlines
- Add output flag
2021-07-08 17:01:29 -04:00
Josh Aas b0864b82ab Add CP and CPS release dates. 2021-06-08 22:06:22 -04:00
Josh Aas fb1d66a40a Move 4.2.4 discussing CAA records to CPS. 2021-06-08 22:01:10 -04:00
Josh Aas dbc0a97c0c Various minor edits from PMA review. 2021-06-08 21:45:02 -04:00
Josh Aas 2568d0d80c Simple white space fix 2021-06-08 21:25:09 -04:00
Josh Aas a1ed0bd260 State in Section 6.7 that the CA complies with the CA/Browser Forum’s Network and Certificate System Security Requirements. 2021-06-08 21:23:41 -04:00
Josh Aas 1f300cdaa6 Update Section 4.9.1.1 regarding revocation to match the BRs. 2021-06-08 21:12:46 -04:00
Josh Aas 00402e3290 Define Internal Names. 2021-06-08 18:05:20 -04:00
Josh Aas 7ed8bb303f Get rid of unnecessary language in Section 7.1.4.2.1. 2021-06-08 18:00:36 -04:00
Josh Aas bc6294cfda Update Section 4.2.2 to match BRs. Add a Section 4.2.4 to reference CAA record processing. 2021-06-08 17:55:37 -04:00
Josh Aas dc29fdf274 Update Sections 4.2.1 and 6.3.2 to match BRs v1.7.6. 2021-06-08 17:44:04 -04:00
Josh Aas ec86e99dbd Start change log for CP 2.7 and fix indentation mistake later in the document. 2021-06-08 17:26:41 -04:00
Phil Porada 562075c146
Update text for CP 7.1.4.2.1 (#44) 2021-06-08 17:24:46 -04:00
Josh Aas f8f839688f Update bullet point names to match BR methods. 2021-06-08 17:09:21 -04:00
Josh Aas b3fcce3d74 Update BR references in Section 3.2.2. 2021-06-08 17:02:58 -04:00
Josh Aas 0fe644700b Section 7.1 end entity certificate lifetime specification updated to match Section 6.3.2. 2021-06-08 16:55:36 -04:00
Josh Aas ab2ee6128b Release information for CPS v3.2. 2021-04-20 14:06:39 -04:00
Josh Aas 1b7674dc91
OCSP availability clarification. Also, no need to duplicate uptime information available in 4.10.2. (#42) 2021-04-19 11:29:03 -04:00
Josh Aas 0f9c2e2b70
CPS: Refer to Section 4.9.3 from 4.9.12. Make it clear that anyone can use the API and refer specifically to RFC 8555. (#43) 2021-04-19 11:28:31 -04:00
I-CAT ced5000aeb
Fix: CP.md (#41)
>> [note] odd letsencrypt is pointing to inscure urls 
>> Best practices is to use secure urls https://   
Fix: CP.md
Signed off by -- I-Cat <the_kat690@hotmail.com>
2021-04-16 15:30:57 -04:00
Andrew Gabbitas 33f578486a
Add publish dates for CP v2.6 and CPS v3.1 (#40)
* Update CP/CPS versions
2021-04-02 14:10:49 -06:00
Aaron Gable da82c93f56
Update CPS for RN intermediates and ECDSA hierarchy (#34)
* Update CPS tables for RN/EN intermediates

* Make intermediate OCSP URL optional

* Further updates for ECDSA
2021-04-01 15:25:52 -06:00
James Renken e4224ce4d7
Update ISRG physical address (#35) 2021-04-01 15:22:24 -06:00
James Renken ad7d51fffb
Tweak language to improve inclusivity (#38) 2021-04-01 15:22:13 -06:00
Josh Aas 2ea050dcf6 Add publish dates for CP v2.5 and CPS v3.0 2020-10-27 10:31:55 -04:00
Josh Aas 59bb05828b Add ISRG Root X2 to CPS as well. 2020-10-27 10:23:18 -04:00
Josh Aas 31abdf57d7 Add markdown compiler program which is just markdown-it modified to use the markdown-it-anchors extension. 2020-10-27 10:16:04 -04:00
Josh Aas 14d2b50058 Fix invalid reference to an appendix 2020-10-23 16:36:38 -04:00
Josh Aas bf4c05307b Get rid of references to Baseline Requirements. 2020-10-23 16:33:57 -04:00
Josh Aas ed3e4d5a37 Change reference to our CP. 2020-10-23 16:21:15 -04:00
Josh Aas 8df3a51000 Update CP Section 3.2.2.8 to BR version 1.7.3. 2020-10-23 16:19:45 -04:00
Josh Aas 4eae00f34a Use full name of new root in change notes. 2020-09-30 16:53:49 -04:00
Josh Aas b42ba70388
Merge pull request #31 from letsencrypt/root-x2
Add Root X2 to table in Section 1.1
2020-09-30 16:53:12 -04:00
Aaron Gable 4297ade265 Comments 2020-09-30 13:03:51 -07:00
Aaron Gable 7235b0db66 Add Root X2 to table in Section 1.1
The certificate fingerprint is computed as:
> `sha256sum isrg-root-x2.der`
2020-09-30 11:25:20 -07:00
Josh Aas 51212652e6 Remove self-referential paragraph from CP 4.2.1 2020-09-30 11:20:55 -04:00
Josh Aas 4e46140e2a Update CP Sections 3.2.2.4, 3.2.2.5, 3.2.2.6, and 4.2.1 to match BRs v1.7.2. 2020-09-30 11:04:50 -04:00
Josh Aas 6380ef8f37 Fix issue #2, no need to include text about agreements with third party RAs as we do not allow them. 2020-09-30 09:45:57 -04:00
Josh Aas a6bac4bb82 Fix issue #20, we never perform domain validation manually. 2020-09-30 09:34:31 -04:00
Josh Aas 53bae50fa9 Update sections 4.9.10, 7.1.2, and 7.1.3 regarding OCSP, certificate profiles, and cryptographic algorithms, to comply with Baseline Requirements v1.7.2. 2020-09-29 16:18:28 -04:00
Josh Aas 2a1555cc52 Remove definition for Secure PKI Facilities from CP since it isn't used there. 2020-09-29 15:25:21 -04:00
Josh Aas 1ecf28fc4f Add changelog entry for CPS v2.9. 2020-07-14 15:31:12 -04:00
Josh Aas dbf2535114
Merge pull request #27 from letsencrypt/keycompromise-wording-update
Change revocation wording regarding keyCompromise.
2020-07-09 09:29:59 -06:00
Andrew Gabbitas d5e62b1343
Change revocation wording regarding keyCompromise.
The wording reads like "all other" excludes keyCompromise which
preceded that paragraph. This clarifies that we still accept
all revocation requests via our email address.
2020-07-08 12:08:38 -06:00
Josh Aas 10fd29946d Add CPS v2.8 release date 2020-05-28 15:52:18 -04:00
Josh Aas 65699e05bd Define Precertificate in our CPS 2020-05-28 15:20:14 -04:00
Josh Aas 35baae3333 More improvements to CT language. 2020-05-28 15:03:33 -04:00
Josh Aas 3abbc4cbe2
Merge pull request #23 from jsha/patch-1
Update language around Certificate Transparency
2020-05-28 13:44:42 -04:00
Jacob Hoffman-Andrews ac0a201591 Fix changelog. 2020-05-28 10:43:40 -07:00
Jacob Hoffman-Andrews 27b6b6a5fe Revise CT submission text. 2020-05-28 10:41:37 -07:00
Jacob Hoffman-Andrews c5235b54cb Merge branch 'master' into patch-1 2020-05-28 10:24:01 -07:00
Josh Aas 0ec8bac634
Merge pull request #26 from letsencrypt/key-comp1
Specify in Section 4.9.3 that revocations for key compromise will result in blocking of the public key for future issuance and revocation of other outstanding certificates with the key.
2020-05-28 13:20:07 -04:00
Josh Aas 6ad77d8070 Specify that key compromise revocation requests must be successful in order to result in blocking keys. 2020-05-28 10:24:54 -04:00
Josh Aas c02f964b89 Specify in Section 4.9.3 that revocations for key compromise will result in blocking of the public key for future issuance and revocation of other outstanding certificates with the key. 2020-05-27 20:58:58 -04:00
Jacob Hoffman-Andrews 3f855d13c0
Update CPS.md 2020-01-08 11:17:18 -08:00
17 changed files with 5345 additions and 2279 deletions

19
.github/workflows/lint.yml vendored Normal file
View File

@ -0,0 +1,19 @@
name: Lint CP/CPS
on:
push:
branches:
- main
pull_request:
branches:
- '**'
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
- name: Run linter
working-directory: ./tools/lint
run: go run . ../../CP-CPS.md

38
.github/workflows/pr_tools.yml vendored Normal file
View File

@ -0,0 +1,38 @@
name: Test Tools
on:
push:
branches:
- main
pull_request:
branches:
- '**'
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [3.8, 3.12.3]
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install flake8
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
- name: Lint with flake8
run: |
# stop the build if there are Python syntax errors or undefined names
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
# exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
- name: Test no-stipulations
working-directory: ./tools/no-stipulations/
run: |
python3 -m unittest *_test.py

4
.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
__pycache__
.vscode
*.pyc
.DS_Store

1
CODEOWNERS Normal file
View File

@ -0,0 +1 @@
* @letsencrypt/pma

1417
CP-CPS.md Normal file

File diff suppressed because it is too large Load Diff

1935
CP.md

File diff suppressed because it is too large Load Diff

View File

@ -1,25 +0,0 @@
# This document contains some guidelines for editing ISRG CP and CPS documents.
## CP
Our CP is a copy of the Baseline Requirements (BRs) with the following changes:
1. Change anything that is obviously necessary, including much of the content in Sections 1.1 and 1.2.
2. Stucture should follow the structure suggested in RFC 3647 Section 6. Casing of section labels should match RFC 3647 casing. Where there is a difference between the BR structure and RFC 3647 suggested structures, use RFC 3647.
Note that any RFC 3647 section is allowed to contain sub-sections that are not defined in RFC 3647, so additional sub-sections in the BRs should be copied.
An example of a conflict between RFC 3647 and the BR structure is the title of Section 3.2.2. The BRs call it "Authentication of Organization and Domain Identity" but RFC 3647 calls it "Authentication of organization identity". We must use the RFC 3647 section name.
3. Section names for any validation methods we don't use under Sections 3.2.2.4 and 3.2.2.5 should be [Reserved] with "No stipulation." as the content. We do not include information for validation methods we don't use so as to not introduce confusion.
4. No sections can be left blank. If there is a blank section in the BRs say "No stipulation." to indicate that our CP will not impose additional requirements.
5. Section 9, legal, is designed and reviewed by ISRG attorneys.
## CPS
The CPS should have the same structure at the CP, but contain more detailed information.
Section 9, legal, is designed and reviewed by ISRG attorneys.

View File

@ -1,7 +1,7 @@
# ISRG CP and CPS Documents (DRAFT)
# ISRG CP and CPS Document (DRAFT)
This repository contains Certificate Policy (CP) and Certification Practice Statement (CPS) documents for ISRG / Let's Encrypt.
This repository contains the combined Certificate Policy (CP) and Certification Practice Statement (CPS) document for ISRG / Let's Encrypt.
This is where we work on our CP and CPS documents, but no revision becomes official until it's posted here:
This is where we work on our CP/CPS document, but no revision becomes official until it's posted here:
[https://letsencrypt.org/repository/](https://letsencrypt.org/repository/)
<https://letsencrypt.org/repository/>

2787
archive/CP.md Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

117
markdown-it-w-anchors.js Executable file
View File

@ -0,0 +1,117 @@
#!/usr/bin/env node
/*eslint no-console:0*/
// This is a copy of the markdown-it program modified to use the
// markdown-it-anchor extension.
'use strict';
var fs = require('fs');
var argparse = require('argparse');
////////////////////////////////////////////////////////////////////////////////
var cli = new argparse.ArgumentParser({
prog: 'markdown-it',
add_help: true
});
cli.add_argument('--no-html', {
help: 'Disable embedded HTML',
action: 'store_true'
});
cli.add_argument('-l', '--linkify', {
help: 'Autolink text',
action: 'store_true'
});
cli.add_argument('-t', '--typographer', {
help: 'Enable smartquotes and other typographic replacements',
action: 'store_true'
});
cli.add_argument('--trace', {
help: 'Show stack trace on error',
action: 'store_true'
});
cli.add_argument('file', {
help: 'File to read',
nargs: '?',
default: '-'
});
cli.add_argument('-o', '--output', {
help: 'File to write',
default: '-'
});
var options = cli.parse_args();
function readFile(filename, encoding, callback) {
if (options.file === '-') {
// read from stdin
var chunks = [];
process.stdin.on('data', function (chunk) { chunks.push(chunk); });
process.stdin.on('end', function () {
return callback(null, Buffer.concat(chunks).toString(encoding));
});
} else {
fs.readFile(filename, encoding, callback);
}
}
////////////////////////////////////////////////////////////////////////////////
readFile(options.file, 'utf8', function (err, input) {
var output, md;
if (err) {
if (err.code === 'ENOENT') {
console.error('File not found: ' + options.file);
process.exit(2);
}
console.error(
options.trace && err.stack ||
err.message ||
String(err));
process.exit(1);
}
md = require('markdown-it')({
html: !options.no_html,
xhtmlOut: false,
typographer: options.typographer,
linkify: options.linkify
});
md.use(require('markdown-it-anchor'));
try {
output = md.render(input);
} catch (e) {
console.error(
options.trace && e.stack ||
e.message ||
String(e));
process.exit(1);
}
if (options.output === '-') {
// write to stdout
process.stdout.write(output);
} else {
fs.writeFileSync(options.output, output);
}
});

61
tools/lint/README.md Normal file
View File

@ -0,0 +1,61 @@
# CP/CPS Linter
This tool performs a variety of simple checks on the CP/CPS to ensure that it
is in compliance with the Baseline Requirements. It is superficial: a clean
lint check is a necessary but not sufficient condition for full compliance.
Usage:
```sh
$ go run . /path/to/cps.md
heading "### 3.1.3 Anonymity or pseudonymity of subscribers" found out-of-order on line 199
heading "### 4.4.2 Publication of the certificate by the CA" not found
empty section found at line 71
empty section found at line 272
exit status 1
```
This tool is used by GitHub Actions to check every PR against this repo.
## Checks
The linter looks for compliance with Ballot SC-074, which added the following
text to the Baseline Requirements, Section 2.2:
> the Certificate Policy and/or Certification Practice Statement MUST be structured in accordance with section 6 of RFC 3647 and MUST:
>
> * include at least every section and subsection defined in section 6 of RFC 3647;
> * only use the words "No Stipulation" to mean that the particular document imposes no requirements related to that section; and
> * contain no sections that are blank and have no subsections.
### RFC 3647 Outline
A significant portion of this linter's work is confirming that the structure of
the CP/CPS matches the outline laid out in [RFC 3647, Section
6](https://datatracker.ietf.org/doc/html/rfc3647#section-6). This outline is
reproduced in [outline.txt](outline.txt), which was produced using the following
procedure:
1. Copy-paste the whole of Section 6 into a plaintext document.
2. Remove the leading text, and the page headers and footers.
3. Unwrap all section titles which were broken onto multiple lines.
4. Replace all sequences of more than one space (` `) with a single space.
5. Remove the `(11)` footnote indicator which follows some entries.
6. Prepend each line with a number of `#` equal to its section depth.
The lint tool then ensures that every line in this file appears in the CP/CPS,
exactly as written, in order.
### No Empty Sections
The linter also looks for any places where two section header lines separated
only by whitespace have the same or decreasing section depth (e.g. "1.2.3"
followed by "1.3"), indicating that the first of the two sections has no
content.
### Use of "No Stipulation"
This linter does **not** check whether the phrase "No Stipulation" has been used
to mean anything other than that "that the particular document imposes no
requirements related to that section", since doing so is a semantic (not
syntactic) matter.

3
tools/lint/go.mod Normal file
View File

@ -0,0 +1,3 @@
module github.com/letsencrypt/cp-cps/tools/lint
go 1.22.2

115
tools/lint/main.go Normal file
View File

@ -0,0 +1,115 @@
package main
import (
"bufio"
_ "embed"
"fmt"
"os"
"slices"
"strings"
)
//go:embed outline.txt
var outline string
func main() {
if len(os.Args) < 2 {
fmt.Fprintln(os.Stderr, "must provide path to document to check")
os.Exit(1)
}
file, err := os.Open(os.Args[1])
if err != nil {
fmt.Fprintln(os.Stderr, "opening document:", err)
os.Exit(1)
}
defer file.Close()
scanner := bufio.NewScanner(file)
var lines []string
for scanner.Scan() {
lines = append(lines, scanner.Text())
}
if err := scanner.Err(); err != nil {
fmt.Fprintln(os.Stderr, "reading document:", err)
os.Exit(1)
}
anyErr := false
errs := make(chan error)
go func() {
lintHeadings(lines, errs)
close(errs)
}()
for err = range errs {
anyErr = true
fmt.Fprintln(os.Stderr, err)
}
errs = make(chan error)
go func() {
lintEmptySections(lines, errs)
close(errs)
}()
for err = range errs {
anyErr = true
fmt.Fprintln(os.Stderr, err)
}
if anyErr {
os.Exit(1)
}
fmt.Println("lint checks complete; no findings")
}
// lintHeadings tries to locate every heading that we expect to exist, and
// checks that they appear in the correct order.
func lintHeadings(lines []string, errs chan<- error) {
outline = strings.TrimSpace(outline)
headings := strings.Split(outline, "\n")
headingLines := make([]int, len(headings))
for i, heading := range headings {
headingLines[i] = slices.Index(lines, heading)
}
for i, lineNo := range headingLines {
if lineNo == -1 {
errs <- fmt.Errorf("heading %q not found", headings[i])
continue
}
if i > 0 && lineNo <= headingLines[i-1] {
errs <- fmt.Errorf("heading %q found out-of-order on line %d", headings[i], lineNo)
continue
}
}
}
// lintEmptySections looks for places where two section headings occur with
// nothing other than empty lines between them, and the second section is of
// equal or lesser depth (being of greater depth is fine, that's a subsection).
func lintEmptySections(lines []string, errs chan<- error) {
lastHeadingDepth := 0
sectionBodySeen := false
for i, line := range lines {
if line == "" {
continue
}
if strings.HasPrefix(line, "#") {
currHeadingDepth := len(line) - len(strings.TrimLeft(line, "#"))
if currHeadingDepth <= lastHeadingDepth && !sectionBodySeen {
errs <- fmt.Errorf("empty section found at line %d", i)
}
lastHeadingDepth = currHeadingDepth
sectionBodySeen = false
continue
}
sectionBodySeen = true
}
}

270
tools/lint/outline.txt Normal file
View File

@ -0,0 +1,270 @@
# 1. INTRODUCTION
## 1.1 Overview
## 1.2 Document name and identification
## 1.3 PKI participants
### 1.3.1 Certification authorities
### 1.3.2 Registration authorities
### 1.3.3 Subscribers
### 1.3.4 Relying parties
### 1.3.5 Other participants
## 1.4 Certificate usage
### 1.4.1 Appropriate certificate uses
### 1.4.2 Prohibited certificate uses
## 1.5 Policy administration
### 1.5.1 Organization administering the document
### 1.5.2 Contact person
### 1.5.3 Person determining CPS suitability for the policy
### 1.5.4 CPS approval procedures
## 1.6 Definitions and acronyms
# 2. PUBLICATION AND REPOSITORY RESPONSIBILITIES
## 2.1 Repositories
## 2.2 Publication of certification information
## 2.3 Time or frequency of publication
## 2.4 Access controls on repositories
# 3. IDENTIFICATION AND AUTHENTICATION
## 3.1 Naming
### 3.1.1 Types of names
### 3.1.2 Need for names to be meaningful
### 3.1.3 Anonymity or pseudonymity of subscribers
### 3.1.4 Rules for interpreting various name forms
### 3.1.5 Uniqueness of names
### 3.1.6 Recognition, authentication, and role of trademarks
## 3.2 Initial identity validation
### 3.2.1 Method to prove possession of private key
### 3.2.2 Authentication of organization identity
### 3.2.3 Authentication of individual identity
### 3.2.4 Non-verified subscriber information
### 3.2.5 Validation of authority
### 3.2.6 Criteria for interoperation
## 3.3 Identification and authentication for re-key requests
### 3.3.1 Identification and authentication for routine re-key
### 3.3.2 Identification and authentication for re-key after revocation
## 3.4 Identification and authentication for revocation request
# 4. CERTIFICATE LIFE-CYCLE OPERATIONAL REQUIREMENTS
## 4.1 Certificate Application
### 4.1.1 Who can submit a certificate application
### 4.1.2 Enrollment process and responsibilities
## 4.2 Certificate application processing
### 4.2.1 Performing identification and authentication functions
### 4.2.2 Approval or rejection of certificate applications
### 4.2.3 Time to process certificate applications
## 4.3 Certificate issuance
### 4.3.1 CA actions during certificate issuance
### 4.3.2 Notification to subscriber by the CA of issuance of certificate
## 4.4 Certificate acceptance
### 4.4.1 Conduct constituting certificate acceptance
### 4.4.2 Publication of the certificate by the CA
### 4.4.3 Notification of certificate issuance by the CA to other entities
## 4.5 Key pair and certificate usage
### 4.5.1 Subscriber private key and certificate usage
### 4.5.2 Relying party public key and certificate usage
## 4.6 Certificate renewal
### 4.6.1 Circumstance for certificate renewal
### 4.6.2 Who may request renewal
### 4.6.3 Processing certificate renewal requests
### 4.6.4 Notification of new certificate issuance to subscriber
### 4.6.5 Conduct constituting acceptance of a renewal certificate
### 4.6.6 Publication of the renewal certificate by the CA
### 4.6.7 Notification of certificate issuance by the CA to other entities
## 4.7 Certificate re-key
### 4.7.1 Circumstance for certificate re-key
### 4.7.2 Who may request certification of a new public key
### 4.7.3 Processing certificate re-keying requests
### 4.7.4 Notification of new certificate issuance to subscriber
### 4.7.5 Conduct constituting acceptance of a re-keyed certificate
### 4.7.6 Publication of the re-keyed certificate by the CA
### 4.7.7 Notification of certificate issuance by the CA to other entities
## 4.8 Certificate modification
### 4.8.1 Circumstance for certificate modification
### 4.8.2 Who may request certificate modification
### 4.8.3 Processing certificate modification requests
### 4.8.4 Notification of new certificate issuance to subscriber
### 4.8.5 Conduct constituting acceptance of modified certificate
### 4.8.6 Publication of the modified certificate by the CA
### 4.8.7 Notification of certificate issuance by the CA to other entities
## 4.9 Certificate revocation and suspension
### 4.9.1 Circumstances for revocation
### 4.9.2 Who can request revocation
### 4.9.3 Procedure for revocation request
### 4.9.4 Revocation request grace period
### 4.9.5 Time within which CA must process the revocation request
### 4.9.6 Revocation checking requirement for relying parties
### 4.9.7 CRL issuance frequency (if applicable)
### 4.9.8 Maximum latency for CRLs (if applicable)
### 4.9.9 On-line revocation/status checking availability
### 4.9.10 On-line revocation checking requirements
### 4.9.11 Other forms of revocation advertisements available
### 4.9.12 Special requirements re key compromise
### 4.9.13 Circumstances for suspension
### 4.9.14 Who can request suspension
### 4.9.15 Procedure for suspension request
### 4.9.16 Limits on suspension period
## 4.10 Certificate status services
### 4.10.1 Operational characteristics
### 4.10.2 Service availability
### 4.10.3 Optional features
## 4.11 End of subscription
## 4.12 Key escrow and recovery
### 4.12.1 Key escrow and recovery policy and practices
### 4.12.2 Session key encapsulation and recovery policy and practices
# 5. FACILITY, MANAGEMENT, AND OPERATIONAL CONTROLS
## 5.1 Physical controls
### 5.1.1 Site location and construction
### 5.1.2 Physical access
### 5.1.3 Power and air conditioning
### 5.1.4 Water exposures
### 5.1.5 Fire prevention and protection
### 5.1.6 Media storage
### 5.1.7 Waste disposal
### 5.1.8 Off-site backup
## 5.2 Procedural controls
### 5.2.1 Trusted roles
### 5.2.2 Number of persons required per task
### 5.2.3 Identification and authentication for each role
### 5.2.4 Roles requiring separation of duties
## 5.3 Personnel controls
### 5.3.1 Qualifications, experience, and clearance requirements
### 5.3.2 Background check procedures
### 5.3.3 Training requirements
### 5.3.4 Retraining frequency and requirements
### 5.3.5 Job rotation frequency and sequence
### 5.3.6 Sanctions for unauthorized actions
### 5.3.7 Independent contractor requirements
### 5.3.8 Documentation supplied to personnel
## 5.4 Audit logging procedures
### 5.4.1 Types of events recorded
### 5.4.2 Frequency of processing log
### 5.4.3 Retention period for audit log
### 5.4.4 Protection of audit log
### 5.4.5 Audit log backup procedures
### 5.4.6 Audit collection system (internal vs. external)
### 5.4.7 Notification to event-causing subject
### 5.4.8 Vulnerability assessments
## 5.5 Records archival
### 5.5.1 Types of records archived
### 5.5.2 Retention period for archive
### 5.5.3 Protection of archive
### 5.5.4 Archive backup procedures
### 5.5.5 Requirements for time-stamping of records
### 5.5.6 Archive collection system (internal or external)
### 5.5.7 Procedures to obtain and verify archive information
## 5.6 Key changeover
## 5.7 Compromise and disaster recovery
### 5.7.1 Incident and compromise handling procedures
### 5.7.2 Computing resources, software, and/or data are corrupted
### 5.7.3 Entity private key compromise procedures
### 5.7.4 Business continuity capabilities after a disaster
## 5.8 CA or RA termination
# 6. TECHNICAL SECURITY CONTROLS
## 6.1 Key pair generation and installation
### 6.1.1 Key pair generation
### 6.1.2 Private key delivery to subscriber
### 6.1.3 Public key delivery to certificate issuer
### 6.1.4 CA public key delivery to relying parties
### 6.1.5 Key sizes
### 6.1.6 Public key parameters generation and quality checking
### 6.1.7 Key usage purposes (as per X.509 v3 key usage field)
## 6.2 Private Key Protection and Cryptographic Module Engineering Controls
### 6.2.1 Cryptographic module standards and controls
### 6.2.2 Private key (n out of m) multi-person control
### 6.2.3 Private key escrow
### 6.2.4 Private key backup
### 6.2.5 Private key archival
### 6.2.6 Private key transfer into or from a cryptographic module
### 6.2.7 Private key storage on cryptographic module
### 6.2.8 Method of activating private key
### 6.2.9 Method of deactivating private key
### 6.2.10 Method of destroying private key
### 6.2.11 Cryptographic Module Rating
## 6.3 Other aspects of key pair management
### 6.3.1 Public key archival
### 6.3.2 Certificate operational periods and key pair usage periods
## 6.4 Activation data
### 6.4.1 Activation data generation and installation
### 6.4.2 Activation data protection
### 6.4.3 Other aspects of activation data
## 6.5 Computer security controls
### 6.5.1 Specific computer security technical requirements
### 6.5.2 Computer security rating
## 6.6 Life cycle technical controls
### 6.6.1 System development controls
### 6.6.2 Security management controls
### 6.6.3 Life cycle security controls
## 6.7 Network security controls
## 6.8 Time-stamping
# 7. CERTIFICATE, CRL, AND OCSP PROFILES
## 7.1 Certificate profile
### 7.1.1 Version number(s)
### 7.1.2 Certificate extensions
### 7.1.3 Algorithm object identifiers
### 7.1.4 Name forms
### 7.1.5 Name constraints
### 7.1.6 Certificate policy object identifier
### 7.1.7 Usage of Policy Constraints extension
### 7.1.8 Policy qualifiers syntax and semantics
### 7.1.9 Processing semantics for the critical Certificate Policies extension
## 7.2 CRL profile
### 7.2.1 Version number(s)
### 7.2.2 CRL and CRL entry extensions
## 7.3 OCSP profile
### 7.3.1 Version number(s)
### 7.3.2 OCSP extensions
# 8. COMPLIANCE AUDIT AND OTHER ASSESSMENTS
## 8.1 Frequency or circumstances of assessment
## 8.2 Identity/qualifications of assessor
## 8.3 Assessor's relationship to assessed entity
## 8.4 Topics covered by assessment
## 8.5 Actions taken as a result of deficiency
## 8.6 Communication of results
# 9. OTHER BUSINESS AND LEGAL MATTERS
## 9.1 Fees
### 9.1.1 Certificate issuance or renewal fees
### 9.1.2 Certificate access fees
### 9.1.3 Revocation or status information access fees
### 9.1.4 Fees for other services
### 9.1.5 Refund policy
## 9.2 Financial responsibility
### 9.2.1 Insurance coverage
### 9.2.2 Other assets
### 9.2.3 Insurance or warranty coverage for end-entities
## 9.3 Confidentiality of business information
### 9.3.1 Scope of confidential information
### 9.3.2 Information not within the scope of confidential information
### 9.3.3 Responsibility to protect confidential information
## 9.4 Privacy of personal information
### 9.4.1 Privacy plan
### 9.4.2 Information treated as private
### 9.4.3 Information not deemed private
### 9.4.4 Responsibility to protect private information
### 9.4.5 Notice and consent to use private information
### 9.4.6 Disclosure pursuant to judicial or administrative process
### 9.4.7 Other information disclosure circumstances
## 9.5 Intellectual property rights
## 9.6 Representations and warranties
### 9.6.1 CA representations and warranties
### 9.6.2 RA representations and warranties
### 9.6.3 Subscriber representations and warranties
### 9.6.4 Relying party representations and warranties
### 9.6.5 Representations and warranties of other participants
## 9.7 Disclaimers of warranties
## 9.8 Limitations of liability
## 9.9 Indemnities
## 9.10 Term and termination
### 9.10.1 Term
### 9.10.2 Termination
### 9.10.3 Effect of termination and survival
## 9.11 Individual notices and communications with participants
## 9.12 Amendments
### 9.12.1 Procedure for amendment
### 9.12.2 Notification mechanism and period
### 9.12.3 Circumstances under which OID must be changed
## 9.13 Dispute resolution provisions
## 9.14 Governing law
## 9.15 Compliance with applicable law
## 9.16 Miscellaneous provisions
### 9.16.1 Entire agreement
### 9.16.2 Assignment
### 9.16.3 Severability
### 9.16.4 Enforcement (attorneys' fees and waiver of rights)
### 9.16.5 Force Majeure
## 9.17 Other provisions

View File

@ -0,0 +1,63 @@
#!/usr/bin/env python3
import argparse
def make_no_stipulations(old_content: list) -> str:
new_content = []
for i in range(len(old_content)):
curr_line = old_content[i]
# Unconditionally append the first line to avoid index wrap-around.
if i == 0:
new_content.append(curr_line)
continue
prev_line = old_content[i - 1]
if curr_line == "\n":
if prev_line[0] == "#":
if i < len(old_content) - 1:
next_line = old_content[i + 1]
if next_line[0] == "#" and len(prev_line.split("#")) >= len(next_line.split("#")):
new_content.append(curr_line + "No stipulation.\n\n")
else:
new_content.append(curr_line)
else:
new_content.append(curr_line + "No stipulation.\n\n")
else:
new_content.append(curr_line)
else:
new_content.append(curr_line)
return "".join(new_content)
def main():
parser = argparse.ArgumentParser(
description="Replaces empty policy sections with 'No stipulation.'"
)
parser.add_argument(
"-d",
"--document",
metavar="PATH",
type=argparse.FileType("r"),
required=True,
help="path to the policy document to edit you wish to edit",
)
parser.add_argument(
"-o",
"--output",
metavar="PATH",
type=argparse.FileType("w"),
required=True,
help="path to output the edited policy document",
)
args = parser.parse_args()
contents = args.document.readlines()
args.document.close()
new_content = make_no_stipulations(contents)
args.output.write(new_content)
args.output.close()
if __name__ == "__main__":
main()

View File

@ -0,0 +1,143 @@
import io
import unittest
from no_stipulation import make_no_stipulations
document_input = io.StringIO(
"""---
title: Testament of Tester Testington
subtitle: Version 1.0
author:
- Tester Testington
date: 3 June, 2021
copyright: |
Copyright 2021 Tester Testington of Test Town
This work is licensed under the Conspicuous Attribution 4.0 NT for Workgroups Testing license.
---
# 1. LOREM
## 1.1 Ipsum
### 1.1.1 Dolor
### 1.1.2 Sit
### 1.1.3 Amet
Some content.
### 1.1.4 Consectetur
### 1.1.5 Adipiscing
### 1.1.6 Elit
## 1.2 Sed
### 1.2.1 Do
Some multi-line
Content just to be
Safe
### 1.2.2 Eiusmod
Some more content, finally!
# 2. Tempor
## 2.1 Incididunt
### 2.1.1 Ut
Some multi-paragraph
Content just to be
Safe
## 2.2 Labore
Something else.
""").readlines()
document_output = """---
title: Testament of Tester Testington
subtitle: Version 1.0
author:
- Tester Testington
date: 3 June, 2021
copyright: |
Copyright 2021 Tester Testington of Test Town
This work is licensed under the Conspicuous Attribution 4.0 NT for Workgroups Testing license.
---
# 1. LOREM
## 1.1 Ipsum
### 1.1.1 Dolor
No stipulation.
### 1.1.2 Sit
No stipulation.
### 1.1.3 Amet
Some content.
### 1.1.4 Consectetur
No stipulation.
### 1.1.5 Adipiscing
No stipulation.
### 1.1.6 Elit
No stipulation.
## 1.2 Sed
### 1.2.1 Do
Some multi-line
Content just to be
Safe
### 1.2.2 Eiusmod
Some more content, finally!
# 2. Tempor
## 2.1 Incididunt
### 2.1.1 Ut
Some multi-paragraph
Content just to be
Safe
## 2.2 Labore
Something else.
"""
class TestMakeNoStipulations(unittest.TestCase):
def test_make_no_stipulations_empty(self):
self.assertEqual(make_no_stipulations(""), "")
def test_make_no_stipulations_happy_path(self):
self.maxDiff = None
self.assertEqual(make_no_stipulations(document_input), document_output)