Commit Graph

4885 Commits

Author SHA1 Message Date
Daniel McCarney 8d3a246adb
cert-checker: allow ignoring lints by name. (#4272)
This updates the `cert-checker` utility configuration with a new allow list of
ignored lints so we can exclude known false-positives/accepted info results by
name instead of result level. To start only the `n_subject_common_name_included`
lint is excluded in `test/config-next/cert-checker.json`. Once this lands we can
treat info/warning lint results as errors as a follow-up to not break
deployability guarantees.

Resolves https://github.com/letsencrypt/boulder/issues/4271
2019-06-20 13:09:10 -04:00
Daniel McCarney de8baa4215 gRPC: allow nil ValidationRecords in FinalizeAuthz2 (#4270)
The SA `FinalizeAuthorization2` RPC is used with
`FinalizeAuthorizationRequest` objects that may have a nil
`ValidationRecords` field (notably for DNS-01 challenges that
failed). The RPC wrapper should not reject such messages as incomplete.

We don't typically unit test gRPC wrappers, and adding
an integration test for this will likely conflict with
https://github.com/letsencrypt/boulder/issues/4241 so I tested this
fix manually using Certbot and a local Boulder instance configured
with the authz2 feature flag.

Before applying the fix, failing a DNS-01 challenge left the
authorization stuck in pending state and Certbot would poll until
it gave up. On the server-side a 500 error matching what we observed
in staging is logged: > boulder-ra [AUDIT] Could not record updated
validation: err=[rpc error: code = Unknown desc = Incomplete gRPC
request message] regID=[xxx] authzID=[xxxx]

After applying the fix failing a DNS-01 challenge caused the associated
authorization to be marked invalid immediately. No 500 errors are
logged.

Resolves https://github.com/letsencrypt/boulder/issues/4269
2019-06-19 14:36:30 -07:00
Roland Bracewell Shoemaker 1fc22cff49 SA: wrap getAllOrderAuthorizationStatuses selects in transaction (#4266)
Wrapping the two table queries in a single transaction causes blocking 
behavior that prevents the existing race.

Fixes #4265.
2019-06-19 10:06:38 -04:00
Roland Bracewell Shoemaker 4e10063ceb
Fix challenge up Link relation header (#4264)
and adds a test to check the relation is what we expect.

Fixes #4262.
2019-06-18 15:20:51 -07:00
Jacob Hoffman-Andrews 18a3c78d6f Refactor test_caa and twenty-days-ago setup (#4261)
As part of #4241, I need to introduce some twenty-days-ago setup. So I refactored the
only current instance (test_caa) to use a style where setup functions can be registered right
next to the test cases they affect. The @register_twenty_days_ago is Python for
"call register_twenty_days_ago with the thing on the next line as an argument."

I also cleaned up a bunch of related stuff:
* Removed the ACCOUNT_URI environment variable and associated function params.
This was introduced in in #3736 to pass a URI to challtestsrv before we refactored for
more dynamic updates. It's not used any more.
* Removed a try / except from startChallSrv that needlessly hid errors.
* Move setting of DNS fixtures for caa_test into the test case itself.
2019-06-18 14:58:06 -07:00
Daniel McCarney 3918714bc1
README: Update "Working with Certbot" instructions. (#4247)
The `tests/integration/_common.sh` script that provided the
`certbot_test` alias we describe in the README's "Working with Certbot"
section is being replaced by a first class command installed via `pip`
in the virtualenv. This commit updates the README instructions
accordingly.
2019-06-13 08:16:10 -04:00
Daniel McCarney daf311f41b RA: fix suberror identifier bug in CAA recheck. (#4259)
In the RA's recheckCAA function we loop through a list of *core.Authorizations, dispatching each to a Go routine that checks CAA for the authz and writes an error to a results channel.

Later, we iterate the same *core.Authorization list and read errors from the channel. If we get a non-nil error, then the current iteration's *core.Authorization is used as the identifier for the suberror created with the non-nil error.

This is a flawed approach and relies on the scheduling of recheck goroutines matching the iteration of the authorizations. When the goroutines write error results to the channel in an order that doesn't match the loop over the authorizations the RA will construct a suberror with the wrong identifier. This manifests as making the TestRecheckCAAFail unit test appear flaky, because it specifically checks the expected identifiers in the returned subproblems.

The fix involves writing both the checked authorization and the error result to the results channel. Later instead of iterating the authorizations we just read the correct number of results from the channel and use the attached authorization from the result when constructing a suberror.

Resolves #4248

Take away lessons:

Write unit tests and always verify expected values!
Always investigate flaky unit tests! Sometimes there's a real bug and not just a subpar test :-)
2019-06-12 09:13:47 -07:00
Roland Bracewell Shoemaker 098a761c02 ocsp-updater: Remove integrated akamai purger (#4258)
This is now an external service.

Also bumps up the deadline in the integration test helper which checks for
purging because using the remote service from the ocsp-updater takes a little
longer. Once we remove ocsp-updater revocation support that can probably be
cranked back down to a more reasonable timeframe.
2019-06-12 09:36:53 -04:00
Roland Bracewell Shoemaker 3532dce246 Excise grpc maxConcurrentStreams configuration (#4257) 2019-06-12 09:35:24 -04:00
Daniel McCarney 3de2831c32
deps: update github.com/zmap/zlint to tip of master. (#4254)
* tld data updates
* new lints:
  * .arpa reverse DNS subjects lint
  * QcStatements lint
  * Onion subject linting
  * Informational embedded SCT policy lint
  * RFC 4055 RSA algorithm identifier parameter linting
2019-06-10 12:58:11 -04:00
Daniel McCarney fea7106927
WFE2: Add feature flag for Mandatory POST-As-GET. (#4251)
In November 2019 we will be removing support for legacy pre RFC-8555
unauthenticated GET requests for accessing ACME resources. A new
`MandatoryPOSTAsGET` feature flag is added to the WFE2 to allow
enforcing this change. Once this feature flag has been activated in Nov
we can remove both it and the WFE2 code supporting GET requests.
2019-06-07 08:36:13 -04:00
Daniel McCarney 584702bdce
WFE2: Implement badRevocationReason problem type. (#4252)
Previously we were returning a Malformed problem type where RFC 8555
mandates the use of badRevocationReason and encourages including the
allowed reasons in the problem detail.
2019-06-06 17:08:41 -04:00
Jacob Hoffman-Andrews 65086c6976 ocsp-updater: Remove stale TODO (#4253)
The query referenced in the comment has already been updated to use the
isExpired field.
2019-06-06 15:02:22 -04:00
Roland Bracewell Shoemaker 4ca01b5de3
Implement standalone nonce service (#4228)
Fixes #3976.
2019-06-05 10:41:19 -07:00
Daniel McCarney 82e96ce60e
ra: fix checkOrderNames comment. (#4245)
Based on feedback from jsha on 4234.
2019-06-03 16:30:10 -04:00
Roland Bracewell Shoemaker f57f9a6c55 Return specific error on duplicate key usage (#4232)
Also fixes a minor bug where `sa.UpdateRegistration` didn't properly check a
returned error. If a `errors.Duplicate` type error is returned in either `KeyRollover`/
`Newaccount` in wfe2 or `NewRegistration` in wfe during the update/insert step
the account info/pointer will be returned instead of an internal server error.

Fixes #3000.
2019-05-31 16:38:23 -07:00
Daniel McCarney caf655353e RA: Use suberrors when rechecking CAA. (#4240)
When Boulder's RA rechecks CAA for a set of authorization identifiers it
should use suberrors to make it easy to identify which of a possible 100
identifiers had a CAA issue at order finalization time.

Updates #4193
Resolves #4235
2019-05-31 15:36:47 -07:00
Daniel McCarney 7dd176e9a4 Implement suberrors for policy blocked names. (#4234)
When validating a CSR's identifiers, or a new order's identifiers there may be more than one identifier that is blocked by policy. We should return an error that has suberrors identifying each bad identifier individually in this case.

Updates https://github.com/letsencrypt/boulder/issues/4193
Resolves https://github.com/letsencrypt/boulder/issues/3727
2019-05-31 15:00:17 -07:00
Roland Bracewell Shoemaker 11d16df3a6
Add authz2 expired-authz-purger tool (#4226)
Fixes #4188.
2019-05-30 14:01:01 -07:00
Daniel McCarney 3c66732bd8
publisher: disable HTTP/2 support. (#4239)
In Boulder Issue 3821[0] we found that HTTP/2 support was causing hard
to diagnose intermittent freezes in CT submission. Disabling HTTP/2 with
an environment variable resolved the freezes but is not a stable fix.

Per the Go `http` package docs we can make this change persistent by
changing the `http.Transport` config:

  Programs that must disable HTTP/2 can do so by setting
  Transport.TLSNextProto (for clients) or Server.TLSNextProto (for
  servers) to a non-nil, empty map"

[0]: https://github.com/letsencrypt/boulder/issues/3821
2019-05-30 14:17:18 -04:00
Roland Bracewell Shoemaker dc11681faa load-generator: Add revocation-by-account support (#4237)
Adds RFC 8555 revocation authorized using the issuing account.
2019-05-30 11:18:19 -04:00
Daniel McCarney c0246b3d97 load-generator: remove pebble config file (#4238)
I think this file was accidentally included in the Boulder tree when I was working on updating the load-generator's RFC 8555 compliance.

The Pebble repo has its own load-generator config . It does not need to be stored in the Boulder test/load-generator/config directory.
2019-05-29 09:44:32 -07:00
Roland Bracewell Shoemaker 6f93942a04 Consistently used stdlib context package (#4229) 2019-05-28 14:36:16 -04:00
Roland Bracewell Shoemaker e839042bae dns: Remove Authorities field from ValidationRecord (#4230) 2019-05-28 14:11:32 -04:00
Roland Bracewell Shoemaker 824d0c4ab0 Include email address in parsing error (#4231)
* Include email address in parsing error
* limit address length in error to 254 chars
2019-05-28 14:09:52 -04:00
Daniel McCarney 6f50b2424c
web: support converting suberrors to subproblems. (#4233) 2019-05-28 14:09:02 -04:00
Daniel McCarney ecd1ea6c61 Implement suberrors & subproblems (#4227)
Updates #4193

Updating relevant Boulder locations to use WithSubErrors and WithSubProblems will be done in a separate follow-up PR.
2019-05-23 19:41:55 -07:00
Roland Bracewell Shoemaker 4d40cf58e4
Enable integration tests for authz2 and fix a few bugs (#4221)
Enables integration tests for authz2 and fixes a few bugs that were flagged up during the process. Disables expired-authorization-purger integration tests if config-next is being used as expired-authz-purger expects to purge some stuff but doesn't know about authz2 authorizations, a new test will be added with #4188.

Fixes #4079.
2019-05-23 15:06:50 -07:00
Jacob Hoffman-Andrews 1014a81606 Switch to modules (#4211)
Because the package versions in go.mod match what we use in Godeps.json,
there are no substantive code diffs. However, there are some tiny
differences resulting from how go mod vendors things differently than
godep:

go mod does not preserve executable permissions on shell scripts
Some packages have import lines like:
package ocsp // import "golang.org/x/crypto/ocsp"

godep used to remove the comment from these lines, but go mod vendor does not.

This introduces several indirect dependencies that we didn't have
before. This is because godep used to operate at a package level, but
go mod operates at a module (~= repository) level. So if we used a
given repository, but didn't use all of its packages, we wouldn't
previously care about the transitive dependencies of the packages we
weren't using. However, in the go mod world, once we care about the
repository, we care about all of that repository's transitive
dependencies. AFAICT this doesn't affect vendoring.

Fixes #4116
2019-05-23 14:14:00 -07:00
Daniel McCarney ea9871de1e core: split identifier types into separate package. (#4225)
This will allow implementing sub-problems without creating a cyclic
dependency between `core` and `problems`.

The `identifier` package is somewhat small/single-purpose and in the
future we may want to move more "ACME" bits beyond the `identifier`
types into a dedicated package outside of `core`.
2019-05-23 13:24:41 -07:00
Daniel McCarney 1d9de1cae0
va: fix flaky test_http2_http01_challenge int. test. (#4222)
In some rare conditions the malformed HTTP response error message that
we match in the VA for HTTP-01 connections to HTTP/2 servers will be
returned as a raw `http.badStringError` that doesn't have a transport
connection broken prefix. In these cases the existing
`test_http2_http01_challenge` integration tests fails because the
`h2SettingsFrameErrRegex` doesn't match the returned error.

To accommodate this we make the `h2SettingsFrameErrRegex` optionally
match the transport connection broken prefix.
2019-05-23 12:42:58 -04:00
Daniel McCarney e627f58f97
publisher: remove HTTP GET log probing. (#4223)
We adding this diagnostic probing while debugging an issue that has
since been resolved.
2019-05-23 12:42:26 -04:00
Daniel McCarney 696d2df180
tests: add int. test for highrisk blocklist. (#4224) 2019-05-22 19:16:45 -04:00
Jacob Hoffman-Andrews 76beffe074 Clean up must staple and precert options in CA (#4201)
Precertificate issuance has been the only supported mode for a while now. This
cleans up the remaining flags in the CA code. The same is true of must staple.

This also removes the IssueCertificate RPC call and its corresponding wrappers,
and removes a lot of plumbing in the CA unittests that was used to test the
situation where precertificate issuance was not enabled.
2019-05-21 15:34:28 -04:00
Daniel McCarney ecc111c34d
deps: bump weppos/publicsuffix-go to 7c1d5dc. (#4220)
Update `github.com/weppos/publicsuffix-go` dependency to
7c1d5dc, the tip of master at the time of writing.

Unit tests are confirmed to pass:

```
$> git log --pretty=format:%h -n 1
7c1d5dc

$> go test ./...
?     github.com/weppos/publicsuffix-go/cmd/load  [no test files]
ok    github.com/weppos/publicsuffix-go/net/publicsuffix  0.004s
ok    github.com/weppos/publicsuffix-go/publicsuffix  0.005s
```

Fingers-crossed this is the last Godeps.json update before the modules
switch.
2019-05-21 14:08:17 -04:00
alexzorin 105fe3b8e1 va: case-insensitivity of suffixes in http redirs (#4218)
An URI host is supposed to be case-insensitive.
2019-05-16 10:52:05 -04:00
Daniel McCarney 4229a29142
va: fix validationTime metric w/ multi-va full results no enforce. (#4217) 2019-05-15 12:59:46 -04:00
Jacob Hoffman-Andrews 0d2e41fdc8 Bring back errcheck, accidentally removed from tests. (#4212) 2019-05-14 17:07:03 -04:00
Daniel McCarney 443c949180
tidy: cleanup JSON hostname policy support. (#4214)
We transitioned this data to YAML to have support for comments and can
remove the legacy JSON support/test data.
2019-05-14 17:06:36 -04:00
Roland Bracewell Shoemaker 6e06f36309 Use new SA authorization methods in RA (#4184)
Fixes #4177.
2019-05-13 12:40:13 -04:00
Jacob Hoffman-Andrews 09ba859366 SA: Deprecate FasterRateLimit feature flag (#4210)
This makes the behavior behind that flag the default.
2019-05-09 15:06:21 -04:00
Daniel McCarney 276ce30adf
wfe2: fix typo in err msg (#4208) 2019-05-08 13:34:43 -04:00
Roland Bracewell Shoemaker 233b0d667f Check EC field lengths in WFE2 (#4195)
Updates #3964 and #4070.
2019-05-07 17:27:45 -07:00
Daniel McCarney 62b3e5b750 Makefile: remove clean/install/archive targets. (#4204)
They are bit-rotten and Let's Encrypt doesn't use them.

This leaves the Makefile with two jobs: building the project and
building an RPM.
2019-05-07 17:26:05 -07:00
Daniel McCarney 6090ca0a6b RA: track names per cert in prom. Histogram. (#4206)
The RA now updates a `names_per_cert` Prometheus histogram, sliced by
a "type" label. NewOrder requests will observe the number of identifiers
in the new order with the type label == "requested". Successful order
finalization will observe the number of names in the issued certificate
with the type label == "issued".
2019-05-07 17:25:42 -07:00
Daniel McCarney ff69225a62
docs: update acme-divergences for rfc 8555. (#4203)
We can remove some divergences since in the V2 API:
* We use the correct error namespace.
* We use the correct `Content-Type` for Certificate requests.
* We use the correct `url` field in Challenge objects.
* We use the correct HTTP status code for Challenge POST requests.
2019-05-06 13:15:12 -04:00
Jacob Hoffman-Andrews 0759d2d440 cmd: Split out config structs (#4200)
This follows up on some refactoring we had done previously but not
completed. This removes various binary-specific config structs from the
common cmd package, and moves them into their appropriate packages. In
the case of CT configs, they had to be moved into their own package to
avoid a dependency loop between RA and ctpolicy.
2019-05-06 11:11:08 -04:00
Jacob Hoffman-Andrews 4c420e2bc2 bdns: Remove LookupMX. (#4202)
We used to use this for checking email domains on registration, but not
anymore.
2019-05-06 09:29:44 -04:00
Jacob Hoffman-Andrews 825277f62e tests: Remove global SupportedChallenges in ra_test.go (#4198)
In general the RA test has an anti-pattern of too much global state. This piece
in particular got a little outdated over time, and there were some incorrect
comments littered around the code about what SupportedChallenges did or did not
contain. This change removes most cases where it was overridden, and moves the
main definition into initAuthorities.
2019-05-06 09:18:35 -04:00
Jacob Hoffman-Andrews 3ba8a50255 RA: Remove re-fetch of authorizations. (#4196)
Previously we'd have to look up authorizations by name, then re-fetch
them by ID for return to the WFE, because some SA calls did not include
challenge objects in the authorizations they return. However, now all SA
calls do include challenge objects, so we can delete this code and save
some lookups.
2019-05-06 09:14:29 -04:00