Commit Graph

5705 Commits

Author SHA1 Message Date
nathannaveen d40edc1933
Set permissions for GitHub actions (#6044)
Explicitly restrict the permissions used by the boulder-ci workflow jobs.
2022-05-10 13:24:30 -07:00
Jacob Hoffman-Andrews 5451e79643
Clean up expiration mailer test (#6093)
There was a lot of copy-paste code, and in particular one of
the most important pieces of setup information (the value of the
`lastExpirationNagSent` field) we often hidden off to the right of the
screen. This extracts out common logic into helper functions and replaces
manual INSERTs with gorp inserts.
2022-05-10 11:44:36 -07:00
Aaron Gable f29f63a317
Don't write "null" to DB for missing contacts (#6090)
Instead write `[]`, a better representation of an empty contact set,
and avoid having literal JSON `null`s in our database.

As part of doing so, add some extra code to //sa/model.go that
bypasses the need for //sa/type-converter.go to do any magic
JSON-to-string-slice conversions for us.

Fixes #6074
2022-05-10 09:25:41 -07:00
Aaron Gable f6978f396f
Improve github release artifacts (#6092)
Generate .deb packages for all currently configured Go versions
(usually the current and upcoming versions that we use in prod), rather
than just the one default version. Also ensure that the uploaded
artifacts have 8-character short hashes in their names.

Unfortunately this does require updating Go versions in one additional
place (the release.yml file), since we are no longer parsing it out of the
docker-compose.yml. This is unavoidable without hacks that I consider
to be even uglier than the repetition.

Fixes #6075
Fixes #6084
2022-05-09 16:41:26 -07:00
Jacob Hoffman-Andrews 507c0d1ab3
expiration-mailer: add stats (#6091) 2022-05-09 16:41:10 -07:00
Jacob Hoffman-Andrews e0605aadab
issuance: improve error message when load chain fails (#6087) 2022-05-05 15:41:07 -07:00
Aaron Gable b3c56a5d05
Reorganize docs and bring in release docs (#6077)
Bring in the release docs from the boulder-release-process repo,
so that they're adjacent to all of our other docs. This allows us to
delete that repo. Also update references to that repo to instead point
to the new doc here.

Also make minor organization updates to other docs to keep the root
of this repository clean.
2022-05-04 12:21:37 -07:00
Aaron Gable 2b23d3c1fc
Register OCSP responder metrics (#6083)
These metrics were never registered, so although they are
being incremented, they are not being exported or collected.
2022-05-04 11:22:34 -07:00
Aaron Gable 7b6b914697
Use go1.18.1 by default (#6081)
This also updates the version built by the build and release action.
2022-05-03 13:19:02 -07:00
Aaron Gable 7ef6913e71
Revert "Allow expiration mailer to work in parallel" (#6080)
When deployed, the newly-parallel expiration-mailer encountered
unexpected difficulties and dropped to apparently sending nearly zero
emails despite not throwing any real errors. Reverting the parallelism
change until we understand and can fix the root cause.

This reverts two commits:
- Allow expiration mailer to work in parallel (#6057)
- Fix data race in expiration-mailer test mocks (#6072) 

It also modifies the revert to leave the new `ParallelSends` config key
in place (albeit completely ignored), so that the binary containing this
revert can be safely deployed regardless of config status.

Part of #5682
2022-05-03 13:18:40 -07:00
Daniel Jeffery a2ff222fda
cert-checker: use config log level and handle nil mariadb response (#6066)
- Fix cert-checker to use the syslog and stdout logging facilities it
reads from the config file instead of having them hard-coded to zero.
- Fix cert-checker to handle a nil response from mariadb if no records
are found.
- Fix comment in log.go to correctly describe when the initialize function
and therefore default values would be used.

Fixes #6067
2022-05-02 13:29:53 -07:00
Aaron Gable 8ec10c4848
Fix data race in expiration-mailer test mocks (#6072)
Although each goroutine gets its own `mocks.mockMailerConn`, each one
of those is racing with the others whenever they try to update the list
of sent messages in their parent `mocks.Mailer`. This leads to data races
in the unit tests (but, thankfully, not in the production code).

Introduce a mutex around the slice of sent messages to prevent the race.

Fixes #6070
2022-05-02 13:16:27 -07:00
Aaron Gable 802acc510f
Use Redis 6.2.7 because Redis 7.0.0 breaks go-redis (#6073)
Redis recently released version 7.0.0, which has several breaking
changes. The go-redis library that we rely on does not yet support
communicating with a Redis 7.0.0 cluster.

Pin ourselves to the latest non-7.0.0 version, 6.2.7, until such time
as go-redis releases a version with support for 7.0.0.

Fixes #6071
2022-05-02 11:42:02 -07:00
dependabot[bot] 0243b54e5b
Bump github.com/eggsampler/acme/v3 from 3.2.1 to 3.3.0 (#6060)
Bumps github.com/eggsampler/acme/v3 from 3.2.1 to 3.3.0.
- Release notes: https://github.com/eggsampler/acme/releases
- Diff: https://github.com/eggsampler/acme/compare/v3.2.1...v3.3.0

Also updates github.com/miekg/dns from v1.1.45 to v1.1.48.
This does not affect any files we depend on.
2022-04-25 15:09:25 -07:00
Jacob Hoffman-Andrews e4c1cf2eb1
rocsp-tool: remove ServiceConfig from config (#6061)
ServiceConfig is only needed for components that act as gRPC services.
For rocsp-tool, which is a gRPC client but is long-running enough to
merit a debug port, we should provide DebugAddr in the config.
2022-04-25 14:57:18 -07:00
Jacob Hoffman-Andrews 29249b4aad
Add feature flag AllowUnrecognizedFeatures (#6056)
By default, Boulder's feature flag code verifies that the list of flags
being set (from a JSON file) maps to actually-existing flags.

However, this gets in the way of a deployment strategy where feature
flags are added to config templates during a staging deploy with "true"
or "false" filled in depending on production or staging status - for
instance, when rolling out a deprecation to staging ahead of production.
If those configs get rolled to prod before the corresponding Boulder
deploy, Boulder will refuse to start up, even though it would be fine to
start up with the unrecognized flag ignored.

The envisioned deployment behavior here is that prod will have
AllowUnrecognizedFeatures: true while staging will have it set to false,
to ensure that misspellings of feature flag names are caught during
staging deploy. As a correlary, this assumes that the list of flags in
configs will be the same between staging and prod, with only their
values changing.
2022-04-21 18:05:18 -07:00
Jacob Hoffman-Andrews 9629c88d66
Allow expiration mailer to work in parallel (#6057)
Previously, each accounts email would be sent in serial,
along with several reads from the database (to check for
certificate renewal) and several writes to the database (to update
`certificateStatus.lastExpirationNagSent`). This adds a config field
for the expiration mailer that sets the parallelism it will use.

That means making and using multiple SMTP connections as well. Previously,
`bmail.Mailer` was not safe for concurrent use. It also had a piece of
API awkwardness: after you created a Mailer, you had to call Connect on
it to change its state.

Instead of treating that as a state change on Mailer, I split out a
separate component: `bmail.Conn`. Now, when you call `Mailer.Connect()`,
you get a Conn. You can send mail on that Conn and Close it when you're
done. A single Mailer instance can produce multiple Conns, so Mailer is
now concurrency-safe (while Conn is not).

This involved a moderate amount of renaming and code movement, and
GitHub's move detector is not keeping up 100%, so an eye towards "is
this moved code?" may help. Also adding `?w=1` to the diff URL to ignore
whitespace diffs.
2022-04-21 18:04:55 -07:00
Jacob Hoffman-Andrews fe6fab8821
Remove fqdnsets_old workaround (#6054)
Fixes #5670
2022-04-21 16:39:35 -07:00
dependabot[bot] f1c7b038b1
Bump github.com/miekg/dns from 1.1.45 to 1.1.48 (#6059)
Bumps [github.com/miekg/dns](https://github.com/miekg/dns) from 1.1.45 to 1.1.48.
- [Release notes](https://github.com/miekg/dns/releases)
- [Changelog](https://github.com/miekg/dns/blob/master/Makefile.release)
- [Commits](https://github.com/miekg/dns/compare/v1.1.45...v1.1.48)

---
updated-dependencies:
- dependency-name: github.com/miekg/dns
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-21 16:37:12 -07:00
dependabot[bot] 4afb2f191f
Bump gopkg.in/square/go-jose.v2 from 2.4.1 to 2.6.0 (#6046)
Bumps [gopkg.in/square/go-jose.v2](https://github.com/square/go-jose) from 2.4.1 to 2.6.0.
- [Release notes](https://github.com/square/go-jose/releases)
- [Commits](https://github.com/square/go-jose/compare/v2.4.1...v2.6.0)

---
updated-dependencies:
- dependency-name: gopkg.in/square/go-jose.v2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-21 16:07:36 -07:00
Jacob Hoffman-Andrews 23fc3c907b
Split up build and release job (#6055)
This allows us to narrow permissions by only granting write privileges
to the upload portion of the job (which doesn't run any code from our
repo). It also allows us to verify that the release build works on every
commit, while only generating releases on actual release tags.
2022-04-19 21:42:23 -07:00
Jacob Hoffman-Andrews 4467cf27db
Update config from config-next (#6051)
This copies over settings from config-next that are now deployed in prod.

Also, I updated a comment in sd-test-srv to more accurately describe how SRV records work.
2022-04-19 12:10:26 -07:00
Jacob Hoffman-Andrews cf9df961ba
Add feature flags for upcoming deprecations (#6043)
This adds three features flags: SHA1CSRs, OldTLSOutbound, and
OldTLSInbound. Each controls the behavior of an upcoming deprecation
(except OldTLSInbound, which isn't yet scheduled for a deprecation
but will be soon). Note that these feature flags take advantage of
`features`' default values, so they can default to "true" (that is, each
of these features is enabled by default), and we set them to "false"
in the config JSON to turn them off when the time comes.

The unittest for OldTLSOutbound requires that `example.com` resolves
to 127.0.0.1. This is because there's logic in the VA that checks
that redirected-to hosts end in an IANA TLD. The unittest relies on
redirecting, and we can't use e.g. `localhost` in it because of that
TLD check, so we use example.com.

Fixes #6036 and #6037
2022-04-15 12:14:00 -07:00
Jacob Hoffman-Andrews fad74f772a
Document the errors package (#6050)
Also document that errors.ServerInternal is deprecated in favor of
returning plain errors.
2022-04-14 13:41:24 -07:00
Samantha e0de2f6610
SA: Add support for querying which serials are impacted by a given incident (#6034)
- Add protobuf types `SerialsForIncidentRequest` and `IncidentSerial`
- Rename `incidentCertModel` to `incidentSerialModel`
- Add new SA method `SerialsForIncident`
- Add streaming GRPC adapter to allow for unit testing `SerialsForIncident`
  
Fixes #5947
2022-04-14 12:47:36 -07:00
Jacob Hoffman-Andrews 42c6eacd0f
Remove old challModel code (#6048)
This is no longer needed since the move to authz2.
2022-04-13 16:26:17 -07:00
Jacob Hoffman-Andrews ca29b4b380
Install a specific version of fpm (#6049)
This prevents fpm from changing out from under us unexpectedly.
2022-04-13 16:26:09 -07:00
Samantha a9ba5e42a0
VA: Add IP address to detailed errors (#6039)
Prepend the IP address of the remote host where HTTP-01 or TLS-ALPN-01
validation was attempted in the detailed error response body.

Fixes #6016
2022-04-13 12:55:35 -07:00
Samantha bafe45f301
Update Go to 1.17.9 and 1.18.1 (#6047)
go1.17.9 (released 2022-04-12) includes security fixes to the crypto/elliptic and encoding/pem packages, as well as bug fixes to the linker and runtime. See the [Go 1.17.9 milestone](https://github.com/golang/go/issues?q=milestone%3AGo1.17.9+label%3ACherryPickApproved) on our issue tracker for details.

go1.18.1 (released 2022-04-12) includes security fixes to the crypto/elliptic, crypto/x509, and encoding/pem packages, as well as bug fixes to the compiler, linker, runtime, the go command, vet, and the bytes, crypto/x509, and go/types packages. See the [Go 1.18.1 milestone](https://github.com/golang/go/issues?q=milestone%3AGo1.18.1+label%3ACherryPickApproved) on our issue tracker for details.
2022-04-12 19:32:42 -07:00
dependabot[bot] 7aa8304c2f
Bump google.golang.org/protobuf from 1.27.1 to 1.28.0 (#6040)
Bumps [google.golang.org/protobuf](https://github.com/protocolbuffers/protobuf-go) from 1.27.1 to 1.28.0.
- [Release notes](https://github.com/protocolbuffers/protobuf-go/releases)
- [Changelog](https://github.com/protocolbuffers/protobuf-go/blob/master/release.bash)
- [Commits](https://github.com/protocolbuffers/protobuf-go/compare/v1.27.1...v1.28.0)

---
updated-dependencies:
- dependency-name: google.golang.org/protobuf
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-08 15:51:14 -07:00
Samantha cb5c10335d
akamai-purger: Make the purger queue a stack (#6042)
Avoid rejecting new purge requests by making the `akamai-purger` queue a stack
that pops entries off the bottom (oldest) to make room.

Fixes #5941
2022-04-08 12:47:02 -07:00
Samantha 82c20145c9
SA: Add support for querying which incidents impact a given serial (#6026)
First commit adding support for tooling to aid in the tracking and remediation
of incidents.

- Add new SA method `IncidentsForSerial`
- Add database models for `incident`s and `incidentCert`s
- Add protobuf type for `incident`
- Add database migrations for `incidents`, `incident_foo`, and `incident_bar`
- Give db user `sa` permissions to  `incidents`, `incident_foo`, and
  `incident_bar`
  
 Part Of #5947
2022-04-07 14:44:59 -07:00
dependabot[bot] aed1127ce3
Bump github.com/go-redis/redis/v8 from 8.11.4 to 8.11.5 (#6041)
Bumps [github.com/go-redis/redis/v8](https://github.com/go-redis/redis) from 8.11.4 to 8.11.5.
- [Release notes](https://github.com/go-redis/redis/releases)
- [Changelog](https://github.com/go-redis/redis/blob/master/CHANGELOG.md)
- [Commits](https://github.com/go-redis/redis/compare/v8.11.4...v8.11.5)

---
updated-dependencies:
- dependency-name: github.com/go-redis/redis/v8
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-06 14:31:42 -07:00
Jacob Hoffman-Andrews 8903cd9f2d
akamai-purger: show help for `manual` subcommand (#6019)
Fixes #5967
2022-04-06 11:10:40 -07:00
Aaron Gable e128685d7a
Update to latest version of golangci-lint (#6032)
Update from v1.42.1 to v1.45.2. This version has both
better support for go1.18, and better automatic detection
of which go version to use (based on our go.mod file,
it will currently use go1.17).
2022-04-04 16:59:35 -07:00
Andrew Gabbitas 87ef1b4934
Use OCSP NextUpdate to calculate Redis TTL (#6031) 2022-04-04 15:18:11 -06:00
Aaron Gable ed912c3aa5
Remove duplication from TLS-ALPN-01 error messages (#6028)
Slightly refactor `validateTLSALPN01` to use a common function
to format the error messages it returns. This reduces code duplication
and makes the important validation logic easier to follow.

Fixes #5922
2022-04-04 09:17:16 -07:00
Andrew Gabbitas e2b49dbe0a
Support writing OCSP to Redis on revocation (#6012)
If a Redis client is configured for the SA service, OCSP responses created
during a revocation event will be written to Redis on a best effort basis.

Use the OCSP response NextUpdate time as the expiration time for the
redis entry. Change the new issuance OCSP storage to do the same.

Fixes #5888
2022-04-01 13:59:56 -06:00
Carlos Tadeu Panato Junior b23ab96261
core: remove debug log statement (#6029)
Signed-off-by: cpanato <ctadeu@gmail.com>
2022-03-31 15:00:46 -07:00
Aaron Gable 9b7f292e12
Switch away from deprecated prometheus collectors (#6025)
As of the update from 1.7.1 to 1.12.1 (#5974), the
`prometheus.NewFooCollector` methods have been deprecated
and replaced by equivalent `collectors.NewFooCollector` methods.
2022-03-31 09:05:16 -07:00
dependabot[bot] f1e56cf6ef
Bump github.com/miekg/pkcs11 from 1.0.3 to 1.1.1 (#6027)
Bumps [github.com/miekg/pkcs11](https://github.com/miekg/pkcs11) from 1.0.3 to 1.1.1.
- [Release notes](https://github.com/miekg/pkcs11/releases)
- [Changelog](https://github.com/miekg/pkcs11/blob/master/Makefile.release)
- [Commits](https://github.com/miekg/pkcs11/compare/v1.0.3...v1.1.1)

---
updated-dependencies:
- dependency-name: github.com/miekg/pkcs11
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-03-30 17:17:15 -07:00
Aaron Gable 39a9360e6c
Update Public Suffix List (#6023)
Update the PSL from 7594db4f858a (Oct 2021) to 9a40b608a236
(March 2022). This adds approximately 165 new entries and removes
approximately 28 old entries.

Fixes #6022
2022-03-30 11:57:19 -07:00
dependabot[bot] 7bb573ca94
Bump github.com/prometheus/client_golang from 1.7.1 to 1.12.1 (#5974)
Diff: https://github.com/prometheus/client_golang/compare/v1.7.1...v1.12.1

Changes:
* 1.12.1 / 2022-01-29
  - [BUGFIX] Make the Go 1.17 collector concurrency-safe
  - Use simpler locking in the Go 1.17 collector
  - [BUGFIX] Reduce granularity of histogram buckets for Go 1.17 collector
  - [ENHANCEMENT] API client: make HTTP reads more efficient
* 1.12.0 / 2022-01-19
  - [CHANGE] example/random: Move flags and metrics into main()
  - [FEATURE] API client: Support wal replay status api
  - [FEATURE] Use the runtime/metrics package for the Go collector for 1.17+
  - [ENHANCEMENT] API client: Update /api/v1/status/tsdb to include headStats
  - [ENHANCEMENT] promhttp: Check validity of method and code label values
* 1.11.0 / 2021-06-07
  - [CHANGE] Add new collectors package.
  - [CHANGE] prometheus.NewExpvarCollector is deprecated, use collectors.NewExpvarCollector instead.
  - [CHANGE] prometheus.NewGoCollector is deprecated, use collectors.NewGoCollector instead.
  - [CHANGE] prometheus.NewBuildInfoCollector is deprecated, use collectors.NewBuildInfoCollector instead.
  - [FEATURE] Add new collector for database/sql#DBStats.
  - [FEATURE] API client: Add exemplars API support.
  - [ENHANCEMENT] API client: Add newer fields to Rules API.
  - [ENHANCEMENT] API client: Add missing fields to Targets API.
* 1.10.0 / 2021-03-18
  - [CHANGE] Minimum required Go version is now 1.13.
  - [CHANGE] API client: Add matchers to LabelNames and LabesValues.
  - [FEATURE] API client: Add buildinfo call.
  - [BUGFIX] Fix build on riscv64.
* 1.9.0 / 2020-12-17
  - [FEATURE] NewPidFileFn helper to create process collectors for processes whose PID is read from a file.
  - [BUGFIX] promhttp: Prevent endless loop in InstrumentHandler... middlewares with invalid metric or label names.
* 1.8.0 / 2020-10-15
  - [CHANGE] API client: Use time.Time rather than string for timestamps in RuntimeinfoResult.
  - [FEATURE] Export MetricVec to facilitate implementation of vectors of custom Metric types.
  - [FEATURE] API client: Support /status/tsdb endpoint.
  - [ENHANCEMENT] API client: Enable GET fallback on status code 501.
  - [ENHANCEMENT] Remove Metric references after reslicing to free up more memory.

Additional transitive dependency updates:
* https://github.com/prometheus/common/compare/v0.10.0...v0.32.1
* https://github.com/prometheus/procfs/compare/v0.1.3...v0.7.3
* https://github.com/golang/appengine/compare/v1.6.5...v1.6.6
* cb27e3aa20...8632dd7979
* 0f9fa26af8...5a964db013
2022-03-30 09:49:40 -07:00
Aaron Gable dab8a71b0e
Use new RA methods from WFE revocation path (#5983)
Simplify the WFE `RevokeCertificate` API method in three ways:
- Remove most of the logic checking if the requester is authorized to
  revoke the certificate in question (based on who is making the
  request, what authorizations they have, and what reason they're
  requesting). That checking is now done by the RA. Instead, simply
  verify that the JWS is authenticated.
- Remove the hard-to-read `authorizedToRevoke` callbacks, and make the
  `revokeCertBySubscriberKey` (nee `revokeCertByKeyID`) and
  `revokeCertByCertKey` (nee `revokeCertByJWK`) helpers much more
  straight-line in their execution logic.
- Call the RA's new `RevokeCertByApplicant` and `RevokeCertByKey` gRPC
  methods, rather than the deprecated `RevokeCertificateWithReg`.

This change, without any flag flips, should be invisible to the
end-user. It will slightly change some of our log message formats.
However, by now relying on the new RA gRPC revocation methods, this
change allows us to change our revocation policies by enabling the
`AllowDoubleRevocation` and `MozRevocationReasons` feature flags, which
affect the behavior of those new helpers.

Fixes #5936
2022-03-28 14:14:11 -07:00
Jacob Hoffman-Andrews 6271a88ba6
rocsp-tool: don't log every 10th insert (#6017)
Logging every 10 is quite noisy; instead adopt the same strategy we use
for errors, and log all of them at first, fading out to fewer of them as
we get to bigger numbers.
2022-03-25 11:43:26 -07:00
Samantha 7c22b99d63
akamai-purger: Improve throughput and configuration safety (#6006)
- Add new configuration key `throughput`, a mapping which contains all
  throughput related akamai-purger settings.
- Deprecate configuration key `purgeInterval` in favor of `purgeBatchInterval` in
  the new `throughput` configuration mapping.
- When no `throughput` or `purgeInterval` is provided, the purger uses optimized
  default settings which offer 1.9x the throughput of current production settings.
- At startup, all throughput related settings are modeled to ensure that we
  don't exceed the limits imposed on us by Akamai.
- Queue is now `[][]string`, instead of `[]string`.
  - When a given queue entry is purged we know all 3 of it's URLs were purged.
  - At startup we know the size of a theoretical request to purge based on the
    number of queue entries included
- Raises the queue size from ~333-thousand cached OCSP responses to
  1.25-million, which is roughly 6 hours of work using the optimized default
  settings
- Raise `purgeInterval` in test config from 1ms, which violates API limits, to 800ms

Fixes #5984
2022-03-23 17:23:07 -07:00
Jacob Hoffman-Andrews dd8be8d7b0
Add regID to signing log messages (#6014) 2022-03-22 10:32:23 -07:00
Andrew Gabbitas 79048cffba
Support writing initial OCSP response to redis (#5958)
Adds a rocsp redis client to the sa if cluster information is provided in the
sa config. If a redis cluster is configured, all new certificate OCSP
responses added with sa.AddPrecertificate will attempt to be written to
the redis cluster, but will not block or fail on errors.

Fixes: #5871
2022-03-21 20:33:12 -06:00
Samantha 3dfe4efe5c
CI: Update make-deb.sh path in release action (#6015) 2022-03-21 16:50:52 -07:00
Aaron Gable c57b12436d
Remove update-master github workflow (#6013)
We've had this disabled for a long time now, and nothing
relies on keeping `master` up to date anymore.
2022-03-21 14:58:06 -07:00