Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

v0.101.5 preparation #170

Merged
merged 28 commits into from
Sep 12, 2023
Merged

v0.101.5 preparation #170

merged 28 commits into from
Sep 12, 2023

Commits on Sep 6, 2023

  1. Pin specific rcgen commit

    ctz authored and cpu committed Sep 6, 2023
    Configuration menu
    Copy the full SHA
    f475596 View commit details
    Browse the repository at this point in the history
  2. misc: clippy fixes

    cpu committed Sep 6, 2023
    Configuration menu
    Copy the full SHA
    b9ec1f1 View commit details
    Browse the repository at this point in the history
  3. Fix expect_fun_call clippy lints

    This wasn't an actual issue, but the fix is equivalent.
    ctz authored and cpu committed Sep 6, 2023
    Configuration menu
    Copy the full SHA
    a65cc14 View commit details
    Browse the repository at this point in the history
  4. Track signature limit using Budget type

    ctz authored and cpu committed Sep 6, 2023
    Configuration menu
    Copy the full SHA
    72b07cc View commit details
    Browse the repository at this point in the history
  5. Configuration menu
    Copy the full SHA
    387afe2 View commit details
    Browse the repository at this point in the history
  6. Configuration menu
    Copy the full SHA
    cece639 View commit details
    Browse the repository at this point in the history
  7. Make error ranks more sparse

    This allows new errors to have minimal diffs.
    ctz authored and cpu committed Sep 6, 2023
    Configuration menu
    Copy the full SHA
    575ab1f View commit details
    Browse the repository at this point in the history
  8. Introduce and test for MaximumPathDepthExceeded error

    This is executing a TODO when the chain length exceeds 6 issuers deep.
    ctz authored and cpu committed Sep 6, 2023
    Configuration menu
    Copy the full SHA
    2b2d5d6 View commit details
    Browse the repository at this point in the history
  9. Import Default trait

    djc authored and cpu committed Sep 6, 2023
    Configuration menu
    Copy the full SHA
    92ad878 View commit details
    Browse the repository at this point in the history
  10. Configuration menu
    Copy the full SHA
    667370a View commit details
    Browse the repository at this point in the history
  11. Improve readability of build chain calls budget

    djc authored and cpu committed Sep 6, 2023
    Configuration menu
    Copy the full SHA
    f50e54a View commit details
    Browse the repository at this point in the history
  12. Configuration menu
    Copy the full SHA
    e0729cf View commit details
    Browse the repository at this point in the history
  13. verify_cert: check_signatures -> check_signed_chain

    This commit renames the `check_signatures` fn, as it is doing more than
    simply verifying signatures. It also checks revocation status w/ CRLs
    when appropriate.
    cpu committed Sep 6, 2023
    Configuration menu
    Copy the full SHA
    3a07985 View commit details
    Browse the repository at this point in the history
  14. error: alpha sort

    cpu committed Sep 6, 2023
    Configuration menu
    Copy the full SHA
    0ccf679 View commit details
    Browse the repository at this point in the history
  15. Configuration menu
    Copy the full SHA
    2c555d9 View commit details
    Browse the repository at this point in the history
  16. Configuration menu
    Copy the full SHA
    315d816 View commit details
    Browse the repository at this point in the history

Commits on Sep 8, 2023

  1. Configuration menu
    Copy the full SHA
    e1423de View commit details
    Browse the repository at this point in the history
  2. verify_cert: budget for name constraint comparisons

    This commit updates the name constraint validation done during path
    building to apply a budget for the maximum allowed number of name
    constraint checks.
    
    We use the same limit that golang crypto/x509 applies by default:
    250,000 comparisons.
    
    Note: this commit applies the budget during path building in a manner
    that means certificates _not_ part of the built path can consume
    comparisons from the budget even though they will not be present in the
    complete validated path. Similarly name constraints are evaluated before
    signatures, meaning a certificate that doesn't verify to a trusted root
    still has its constraints parsed and evaluated. A subsequent commit
    will adjust these shortcomings.
    cpu committed Sep 8, 2023
    Configuration menu
    Copy the full SHA
    3401dd1 View commit details
    Browse the repository at this point in the history
  3. verify_cert: name constraint checking on verified chain

    This commit updates the path building process such that name constraints
    are only evaluated against a complete path where signatures on the chain
    have been checked successfully to a trust anchor. This avoids:
    
    * Parsing name constraints before signatures are validated.
    * Evaluating name constraints and consuming name constraint comparison
      budget for certificates that are not part of the
      built path.
    
    In the future it could be possible to interleave the name constraint
    checking with the signature checking, however the logic for this is more
    complicated. For an initial fix let's prefer a simpler solution that
    walks the built + validated path to check name constraints from the
    trust anchor to the end entity certificate.
    cpu committed Sep 8, 2023
    Configuration menu
    Copy the full SHA
    caa516f View commit details
    Browse the repository at this point in the history
  4. Add tests for PrintableString, empty SEQUENCE CNs

    This commit adds a pair of tests reproducing issue rustls#167,
    where the `EndEntityCert::dns_names()` method returns an error
    incorrectly on some certificate DER encodings. In particular,
    `dns_names` fails if the CN is a `PrintableString`, or if it's an empty
    `SEQUENCE`, rather than a `SEQUENCE` containing an empty `SET`.
    
    The test for the `PrintableString` common name uses an end-entity
    certificate generated using `rcgen`, while the test for empty `SEQUENCE`
    CN required a hand-crafted DER using `ascii2der`. The text file that
    generated the `ascii2der` cert is also included.
    hawkw authored and cpu committed Sep 8, 2023
    Configuration menu
    Copy the full SHA
    0e100e2 View commit details
    Browse the repository at this point in the history
  5. Remove tests for common name handling

    As suggested by @ctz in this comment:
    rustls#167 (comment).
    hawkw authored and cpu committed Sep 8, 2023
    Configuration menu
    Copy the full SHA
    9fe852e View commit details
    Browse the repository at this point in the history
  6. Remove common name parsing from NameIterator

    This commit removes parsing of the subject common name field from
    `NameIterator`, since `rustls-webpki` does not actually verify subject
    common names except when enforcing name constraints. This fixes issues
    with common names in formats that `rustls-webpki` doesn't currently
    support, by removing this code entirely.
    
    Fixes rustls-webpki/webpki#167
    hawkw authored and cpu committed Sep 8, 2023
    Configuration menu
    Copy the full SHA
    65eb6a0 View commit details
    Browse the repository at this point in the history
  7. verify_cert: take references in verify_chain helper

    This commit adjusts the arguments to the `verify_chain` test helper to
    take references instead of moving the arguments. This makes it easier to
    use the same inputs for multiple `verify_chain` invocations.
    cpu committed Sep 8, 2023
    Configuration menu
    Copy the full SHA
    6d86211 View commit details
    Browse the repository at this point in the history
  8. verify_cert: optional Budget arg for verify_chain helper

    This commit updates the `verify_chain` helper to allow providing an
    optional `Budget` argument (using the default if not provided). This
    makes it easier to write tests that need to customize the path building
    budget (e.g. `name_constraint_budget`).
    cpu committed Sep 8, 2023
    Configuration menu
    Copy the full SHA
    7ba21bf View commit details
    Browse the repository at this point in the history
  9. error: add is_fatal helper, use in verify_cert

    This commit adds a method to `Error` for testing whether an error should
    be considered fatal, e.g. should stop any further path building
    progress. The existing consideration of fatal errors in
    `loop_while_non_fatal_error` is updated to use the `is_fatal` fn.
    
    Having this in a central place means we can avoid duplicating the match
    arms in multiple places, where they are likely to fall out-of-sync.
    cpu committed Sep 8, 2023
    Configuration menu
    Copy the full SHA
    b86d82e View commit details
    Browse the repository at this point in the history
  10. verify_cert: correct handling of fatal errors

    Previously the handling of fatal path building errors (e.g. those that
    should halt all further exploration of the path space) was mishandled
    such that we could hit the maximum signature budget and still pursue
    additional path building. This was demonstrated by the
    `test_too_many_path_calls` unit test which was hitting
    a `MaximumSignatureChecksExceeded` error, but yet proceeding until
    hitting a `MaximumPathBuildCallsExceeded` error.
    
    This commit updates the error handling between the first and second
    `loop_while_non_fatal_error` calls to properly terminate the search when
    a fatal error is encountered, instead of proceeding with further search.
    
    The existing `test_too_many_path_calls` test is updated to use an
    artificially large signature check budget so that we can focus on testing
    the limit we care about for that test without needing to invest in
    more complicated test case generation. This avoids hitting
    a `MaximumSignatureChecksExceeded` error early in the test (which now
    terminates further path building), instead allowing execution to
    continue until the maximum path building call budget is expended
    (matching the previous behaviour and intent of the original test).
    cpu committed Sep 8, 2023
    Configuration menu
    Copy the full SHA
    1bb7ce0 View commit details
    Browse the repository at this point in the history
  11. verify_cert: use enum for build chain error

    The `loop_while_non_fatal_error` helper can return one of three things:
    
    * success, when a validated chain to a trust anchor was built.
    * a fatal error, e.g. when a `Budget` has been exceeded and no further
      path building should occur because we've exhausted a budget.
    * a non-fatal error, when a candidate chain results in an error
      condition, but other paths could be considered if the options are not
      exhausted.
    
    This commit attempts to express this in the type system, centralizing
    a check for what is/isn't a fatal error and ensuring that downstream
    callers to `loop_while_non_fatal_error` handle the fatal case
    appropriately.
    cpu committed Sep 8, 2023
    Configuration menu
    Copy the full SHA
    4969bf6 View commit details
    Browse the repository at this point in the history
  12. Configuration menu
    Copy the full SHA
    702d57f View commit details
    Browse the repository at this point in the history