Commit Graph

6262 Commits

Author SHA1 Message Date
Aaron Gable 2ecd3700df
Revert "Install v2.20.0 of docker-compose-plugin" (#7019)
Reverts https://github.com/letsencrypt/boulder/pull/6997, which manually
installed a specific version of the docker compose cli plugin to work
around a bug in the version installed by default. The images now ship
the fixed version by default
(https://github.com/actions/runner-images/issues/7916#issuecomment-1649361508),
so we can remove the workaround.

Fixes https://github.com/letsencrypt/boulder/issues/6998
2023-08-02 16:24:50 -04:00
Samantha 686b2aa684
CI: Add GitHub workflow for detecting configuration changes (#7024)
(https://github.com/beautifulentropy/boulder/pull/33 to see it in
action)

Fixes #7021
2023-08-02 13:41:33 -04:00
Samantha 33109ce384
test: Fix naming of integration test config structs (#7020)
Significantly differentiate configuration struct naming in the
integration package.
2023-08-01 16:24:42 -07:00
Samantha e7cb74b5f8
grpc: Allow for some SRV resolution failures (#7014)
Allow gRPC SRV resolver to succeed even when some names are not resolved
successfully. Cross-DC services (e.g. nonce) will fail to resolve when
the link between DCs is severed or one DC is taken offline, this should
not result in hard gRPC service failures.

Fixes #6974
2023-08-01 12:55:05 -04:00
dependabot[bot] 0a3ce04d38
build(deps): bump docker/login-action from 2.1.0 to 2.2.0 (#7017)
Bumps docker/login-action from 2.1.0 to 2.2.0.
- Release notes: https://github.com/docker/login-action/releases/tag/v2.2.0
- Diff: https://github.com/docker/login-action/compare/v2.1.0...v2.2.0
2023-08-01 09:39:40 -07:00
Jacob Hoffman-Andrews 8d7b87c9ca
cert-checker: check for precertificate correspondence (#7015)
This adds a lookup in cert-checker to find the linting precertificate
with the same serial number as a given final certificate, and checks
precertificate correspondence between the two.

Fixes #6959
2023-07-28 12:45:47 -04:00
Samantha b141fa7c78
WFE: Correct Error Handling for Nonce Redemption RPCs with Unknown Prefixes (#7004)
Fix an issue related to the custom gRPC Picker implementation introduced
in #6618. When a nonce contained a prefix not associated with a known
backend, the Picker would continuously rebuild, re-resolve DNS, and
eventually throw a 500 "Server Error" at RPC timeout. The Picker now
promptly returns a 400 "Bad Nonce" error as expected, in response the
requesting client should retry their request with a fresh nonce.

Additionally:
- WFE unit tests use derived nonces when `"BOULDER_CONFIG_DIR" ==
"test/config-next"`.
- `Balancer.Build()` in "noncebalancer" forces a rebuild until non-zero
backends are available. This matches the
[balancer/roundrobin](d524b40946/balancer/roundrobin/roundrobin.go (L49-L53))
implementation.
- Nonces with no matching backend increment "jose_errors" with label
`"type": "JWSInvalidNonce"` and "nonce_no_backend_found".
- Nonces of incorrect length are now rejected at the WFE and increment
"jose_errors" with label `"type": "JWSMalformedNonce"` instead of
`"type": "JWSInvalidNonce"`.
- Nonces not encoded as base64url are now rejected at the WFE and
increment "jose_errors" with label `"type": "JWSMalformedNonce"` instead
of `"type": "JWSInvalidNonce"`.

Fixes #6969
Part of #6974
2023-07-28 12:07:52 -04:00
dependabot[bot] 4da9853c9d
build(deps): bump google.golang.org/protobuf from 1.30.0 to 1.31.0 (#7012)
Bumps google.golang.org/protobuf from 1.30.0 to 1.31.0.

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-27 11:14:24 -04:00
Aaron Gable 63319d8cd0
crl-updater: duplicate shard 0 as shard NumShards (#7008)
When crl-updater produces a CRL with shard index 0, have it also produce
an identical CRL with shard index NumShards (e.g. 128). This is the
first step towards having it only produce shards numbered 1 through
NumShards, i.e. transition from using 0-indexing to 1-indexing.

We want to do this because various aspects of Golang and gRPC cannot
tell the difference between "this struct/message has no shard index set"
and "this struct/message has shard index 0 set".

Part of https://github.com/letsencrypt/boulder/issues/7007
2023-07-26 15:32:20 -07:00
dependabot[bot] 75acd40df1
build(deps): bump github.com/google/certificate-transparency-go from 1.1.4 to 1.1.6 (#6975)
Update google/certificate-transparency-go from 1.1.4 to 1.1.6
Release notes: https://github.com/google/certificate-transparency-go/releases/tag/v1.1.6
Changelog: https://github.com/google/certificate-transparency-go/compare/v1.1.4...v1.1.6

Update prometheus/client_golang from v1.14.0 to v1.15.1
Release notes: https://github.com/prometheus/client_golang/releases/tag/v1.15.1
Changelog: https://github.com/prometheus/client_golang/compare/v1.14.0...v1.15.1

Update prometheus/client_model from v0.3.0 to v0.4.0
Release notes: https://github.com/prometheus/client_model/releases/tag/v0.4.0
Changelog: https://github.com/prometheus/client_model/compare/v0.3.0...v0.4.0

Update x/sync from v0.1.0 to v0.2.0
Changelog: https://github.com/golang/sync/compare/v0.1.0...v0.2.0

Minor updates to various indirect dependencies as well.

The prometheus/client_golang update changes the type of
`prometheus.Desc.variableLabels` from `[]string` to
`prometheus.ConstrainedLabels`, which changes the string representation
of that field, necessitating a minor test expectations update in
//rocsp/metrics_test.

Fixes https://github.com/letsencrypt/boulder/issues/4548
2023-07-21 11:28:56 -07:00
Samantha 055f620c4b
Initial implementation of key-value rate limits (#6947)
This design seeks to reduce read-pressure on our DB by moving rate limit
tabulation to a key-value datastore. This PR provides the following:

- (README.md) a short guide to the schemas, formats, and concepts
introduced in this PR
- (source.go) an interface for storing, retrieving, and resetting a
subscriber bucket
- (name.go) an enumeration of all defined rate limits
- (limit.go) a schema for defining default limits and per-subscriber
overrides
- (limiter.go) a high-level API for interacting with key-value rate
limits
- (gcra.go) an implementation of the Generic Cell Rate Algorithm, a
leaky bucket-style scheduling algorithm, used to calculate the present
or future capacity of a subscriber bucket using spend and refund
operations

Note: the included source implementation is test-only and currently
accomplished using a simple in-memory map protected by a mutex,
implementations using Redis and potentially other data stores will
follow.

Part of #5545
2023-07-21 12:57:18 -04:00
Jacob Hoffman-Andrews e955494955
Revert "Update go-sql-driver/mysql to v1.7.1" (#7006)
This reverts commit 0051277c71,
which was introduced by https://github.com/letsencrypt/boulder/pull/6976
2023-07-20 12:28:20 -07:00
Jacob Hoffman-Andrews 04a4805042
tests: add explicit versions to Python dependencies (#6993)
This avoids a situation where building a fresh boulder-tools image
accidentally brings in a new version of codespell, which flags new
misspellings.
2023-07-20 11:20:26 -07:00
Aaron Gable 908421bb98
crl-updater: lease CRL shards to prevent races (#6941)
Add a new feature flag, LeaseCRLShards, which controls certain aspects
of crl-updater's behavior.

When this flag is enabled, crl-updater calls the new SA.LeaseCRLShard
method before beginning work on a shard. This prevents it from stepping
on the toes of another crl-updater instance which may be working on the
same shard. This is important to prevent two competing instances from
accidentally updating a CRL's Number (which is an integer representation
of its thisUpdate timestamp) *backwards*, which would be a compliance
violation.

When this flag is enabled, crl-updater also calls the new
SA.UpdateCRLShard method after finishing work on a shard.

In the future, additional work will be done to make crl-updater use the
"give me the oldest available shard" mode of the LeaseCRLShard method.

Fixes https://github.com/letsencrypt/boulder/issues/6897
2023-07-19 15:11:16 -07:00
Aaron Gable 2bf5b26397
Remove ability to configure policy OIDs (#6992)
Completely remove the ability to configure Certificate Policy OIDs in
the Boulder CA. Instead, hard-code the Baseline Requirements Domain
Validated Reserved Policy Identifier. Boulder will never perform OV or
EV validation, so this is the only identifier that will be necessary.

In the ceremony tool, introduce additional checks that assert that Root
certificates do not have policies, and Intermediate certificates have
exactly the one Baseline Requirements Domain Validated Reserved Policy
Identifier.
2023-07-19 10:38:59 -04:00
Jacob Hoffman-Andrews 7d66d67054
It's borpin' time! (#6982)
This change replaces [gorp] with [borp].

The changes consist of a mass renaming of the import and comments / doc
fixups, plus modifications of many call sites to provide a
context.Context everywhere, since gorp newly requires this (this was one
of the motivating factors for the borp fork).

This also refactors `github.com/letsencrypt/boulder/db.WrappedMap` and
`github.com/letsencrypt/boulder/db.Transaction` to not embed their
underlying gorp/borp objects, but to have them as plain fields. This
ensures that we can only call methods on them that are specifically
implemented in `github.com/letsencrypt/boulder/db`, so we don't miss
wrapping any. This required introducing a `NewWrappedMap` method along
with accessors `SQLDb()` and `BorpDB()` to get at the internal fields
during metrics and logging setup.

Fixes #6944
2023-07-17 14:38:29 -07:00
Aaron Gable 0981768793
Extract cmd/ceremony into a separate binary (#6999)
Fixes https://github.com/letsencrypt/boulder/issues/6936
2023-07-14 15:34:23 -04:00
Aaron Gable e09c5faf5e
Deprecate CAA AccountURI and ValidationMethods feature flags (#7000)
These flags are set to true in all environments.
2023-07-14 14:54:39 -04:00
Aaron Gable 8d8fd3731b
Remove VA.DNSResolver (#7001)
I have confirmed that this config field is not set in any deployment
environment.

Fixes https://github.com/letsencrypt/boulder/issues/6868
2023-07-13 17:56:41 -07:00
Aaron Gable 944a865f0d
Install v2.20.0 of docker-compose-plugin (#6997)
Work around the bug[1] in docker-compose-plugin v2.19.1, which is
included in the current github actions ubuntu 20.04 runner image[2].

[1] https://github.com/docker/compose/issues/10777
[2] https://github.com/actions/runner-images/issues/7916

Part of https://github.com/letsencrypt/boulder/issues/6998
2023-07-13 17:33:38 -04:00
Aaron Gable f7b79d07e5
Generate self-signed lint certs when linting roots (#6994)
Our linting system uses a throwaway key to sign an untrusted version of
the to-be-signed cert, then runs the lints over that. But this means
that, when linting a self-signed cert, the signature no longer matches
the embedded public key. This in turn causes a bunch of zlint's checks
to think they're linting a Subordinate CA cert, rather than a Root CA
cert.

Change our linting system to make the lint cert appear self-signed when
the input cert is intended to be self-signed.
2023-07-13 12:29:12 -07:00
Aaron Gable 158f62bd0c
Remove policy qualifiers from all issuance paths (#6980)
The inclusion of Policy Qualifiers inside Policy Information elements of
a Certificate Policies extension is now NOT RECOMMENDED by the Baseline
Requirements. We have already removed these fields from all of our
Boulder configuration, and ceased issuing certificates with Policy
Qualifiers.

Remove all support for configuring and including Policy Qualifiers in
our certificates, both in Boulder's main issuance path and in our
ceremony tool. Switch from using the policyasn1 library to manually
encode these extensions, to using the crypto/x509's
Certificate.PolicyIdentifiers field. Delete the policyasn1 package as it
is no longer necessary.

Fixes https://github.com/letsencrypt/boulder/issues/6880
2023-07-13 10:37:05 -07:00
Aaron Gable 92d75a9445
Improve core.PublicKeysEqual (#6996)
Rather than marshalling and comparing the bytes of each key, simply use
the .Equal() method provided by all go stdlib types that implement the
crypto.PublicKey interface.
2023-07-13 10:01:42 -07:00
Samantha d916809445
docker-compose: Update ProxySQL container to v2.5.3 (#6990)
Updates ProxySQL container from v2.5.2 -> v2.5.3 to match production.
2023-07-12 15:22:44 -07:00
Phil Porada 4ea8362e90
Update default docker compose BOULDER_TOOLS_TAG (#6995)
This is a follow-up fix to
https://github.com/letsencrypt/boulder/pull/6987 which mistakenly did
not update the docker compose default BOULDER_TOOLS_TAG variable from
go1.20.5 to go1.20.6. This would only manifest on developer machines
manually running unit/integration tests rather than CI which explicitly
tests against a matrix of BOULDER_TOOLS_TAG versions.
```
Error response from daemon: manifest for letsencrypt/boulder-tools:go1.20.5_2023-07-11 not found: manifest unknown: manifest unknown
```
2023-07-12 16:18:25 -04:00
Aaron Gable b090ffbd2e
Use zlint to check our CRLs (#6972)
Update zlint to v3.5.0, which introduces scaffolding for running lints
over CRLs.

Convert all of our existing CRL checks to structs which match the zlint
interface, and add them to the registry. Then change our linter's
CheckCRL function, and crl-checker's Validate function, to run all lints
in the zlint registry.

Finally, update the ceremony tool to run these lints as well.

This change touches a lot of files, but involves almost no logic
changes. It's all just infrastructure, changing the way our lints and
their tests are shaped, and moving test files into new homes.

Fixes https://github.com/letsencrypt/boulder/issues/6934
Fixes https://github.com/letsencrypt/boulder/issues/6979
2023-07-11 15:39:05 -07:00
Aaron Gable 0051277c71
Update go-sql-driver/mysql to v1.7.1 (#6976)
This update pulls in changes that we contributed upstream, which should
smooth interactions between Boulder and ProxySQL.

Release notes:
https://github.com/go-sql-driver/mysql/releases/tag/v1.7.1
Changelog:
https://github.com/go-sql-driver/mysql/compare/v1.5.0...v1.7.1
Relevant change: https://github.com/go-sql-driver/mysql/pull/1402
2023-07-11 12:51:44 -07:00
Phil Porada c7dc3a8d72
Test against go1.20.6 (#6987)
This version includes a fix that seems relevant to us:

> The HTTP/1 client did not fully validate the contents of the Host
header. A maliciously crafted Host header could inject additional
headers or entire requests. The HTTP/1 client now refuses to send
requests containing an invalid Request.Host or Request.URL.Host value.
> 
> Thanks to Bartek Nowotarski for reporting this issue.
> 
> Includes security fixes for CVE-2023-29406 and Go issue
https://go.dev/issue/60374
2023-07-11 12:50:42 -07:00
Jacob Hoffman-Andrews d7ccffa32e
wfe: remove special "multiple certificates" error (#6983)
This was introduced early in Boulder development when we had the concept
of a "short serial" (monotonically increasing) which would be prepended
to random bytes to form the full serial. We wanted to specially report
the case that there were duplicates of a given short serial since it
meant a problem with our monotonicity.

We've long since abandoned that idea, and also this code can't be
exercised because sa.SelectCertificate does a LIMIT 1 anyhow.
2023-07-11 09:53:16 -04:00
Phil Porada 947e199016
Add govulncheck to CI (#6963)
Fixes https://github.com/letsencrypt/boulder/issues/6354

Runs
[govulncheck](https://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck) in
a one-shot container so that PR creation, updates to a PR, and merges
to main can contact the govuln API and check for known vulnerabilities.

Lastly, upgrades the version of golangci-lint to the [latest available
(v1.53.3)](https://github.com/golangci/golangci-lint/releases).

---------

Co-authored-by: Aaron Gable <aaron@letsencrypt.org>
2023-07-11 09:51:20 -04:00
cui fliter 45fa658086
fix function name in comment (#6984)
Signed-off-by: cui fliter <imcusg@gmail.com>
2023-07-07 13:12:39 -04:00
Aaron Gable cf770dfdef
Update zlint to v3.5.0 (#6977)
This brings in infrastructure to support linting CRLs.

Release notes: https://github.com/zmap/zlint/releases/tag/v3.5.0
Changelog: https://github.com/zmap/zlint/compare/v3.4.0...v3.5.0

Part of https://github.com/letsencrypt/boulder/issues/6934
2023-07-06 14:09:44 -04:00
Aaron Gable c46f19faed
Simplify custom lint directory structure (#6971)
The upstream zlint lints are organized not by what kind of certificate
they apply to, but what source they are from. This change rearranges
(and slightly renames) our custom lints to match the same structure.
This will make it easier for us to temporarily add lints (e.g. for our
CRLs) which we intend to upstream to zlint later.

Part of https://github.com/letsencrypt/boulder/issues/6934
2023-07-05 13:29:30 -07:00
Jacob Hoffman-Andrews cd24b9db20
ca: deprecate StoreLintingCertificateInsteadOfPrecertificate (#6970)
And turn off the orphan queue in config-next.
2023-07-05 10:44:08 -07:00
dependabot[bot] 0337fb81e6
build(deps): bump docker/login-action from 2.1.0 to 2.2.0 (#6973)
Bumps https://github.com/docker/login-action from 2.1.0 to 2.2.0.

- Release notes: https://github.com/docker/login-action/releases/tag/v2.2.0
- Commits: https://github.com/docker/login-action/compare/v2.1.0...v2.2.0
2023-07-05 10:43:00 -07:00
Aaron Gable bd29cc430f
Allow reading incident rows with NULL columns (#6961)
Fixes https://github.com/letsencrypt/boulder/issues/6960
2023-06-30 08:29:16 -07:00
dependabot[bot] 08017e436e
build(deps): bump github.com/aws/aws-sdk-go-v2 from 1.18.0 to 1.18.1 (#6962)
Bumps
[github.com/aws/aws-sdk-go-v2](https://github.com/aws/aws-sdk-go-v2)
from 1.18.0 to 1.18.1.
2023-06-28 14:58:51 -04:00
Aaron Gable cc596bd4eb
Begin testing on go1.21rc2 with loopvar experiment (#6952)
Add go1.21rc2 to the matrix of go versions we test against.

Add a new step to our CI workflows (boulder-ci, try-release, and
release) which sets the "GOEXPERIMENT=loopvar" environment variable if
we're running go1.21. This experiment makes it so that loop variables
are scoped only to their single loop iteration, rather than to the whole
loop. This prevents bugs such as our CAA Rechecking incident
(https://bugzilla.mozilla.org/show_bug.cgi?id=1619047). Also add a line
to our docker setup to propagate this environment variable into the
container, where it can affect builds.

Finally, fix one TLS-ALPN-01 test to have the fake subscriber server
actually willing to negotiate the acme-tls/1 protocol, so that the ACME
server's tls client actually waits to (fail to) get the certificate,
instead of dying immediately. This fix is related to the upgrade to
go1.21, not the loopvar experiment.

Fixes https://github.com/letsencrypt/boulder/issues/6950
2023-06-26 16:35:29 -07:00
Aaron Gable 3d80d8505e
SA: gRPC methods for leasing CRL shards (#6940)
Add two new methods, LeaseCRLShard and UpdateCRLShard, to the SA gRPC
interface. These methods work in concert both to prevent multiple
instances of crl-updater from stepping on each others toes, and to lay
the groundwork for a less bursty version of crl-updater in the future.

Introduce a new database table, crlShards, which tracks the thisUpdate
and nextUpdate timestamps of each CRL shard for each issuer. It also has
a column "leasedUntil", which is also a timestamp. Grant the SA user
read-write access to this table.

LeaseCRLShard updates the leasedUntil column of the identified shard to
the given time. It returns an error if the identified shard's
leasedUntil timestamp is already in the future. This provides a
mechanism for crl-updater instances to "lick the cookie", so to speak,
marking CRL shards as "taken" so that multiple crl-updater instances
don't attempt to work on the same shard at the same time. Using a
timestamp has the added benefit that leases are guaranteed to expire,
ensuring that we don't accidentally fail to work on a shard forever.

LeaseCRLShard has a second mode of operation, when a range of potential
shards is given in the request, rather than a single shard. In this
mode, it returns the shard (within the given range) whose thisUpdate
timestamp is oldest. (Shards with no thisUpdate timestamp, including
because the requested range includes shard indices the database doesn't
yet know about, count as older than any shard with any thisUpdate
timestamp.) This allows crl-updater instances which don't care which
shard they're working on to do the most urgent work first.

UpdateCRLShard updates the thisUpdate and nextUpdate timestamps of the
identified shard. This closes the loop with the second mode of
LeaseCRLShard above: by updating the thisUpdate timestamp, the method
marks the shard as no longer urgently needing to be worked on.

IN-9220 tracks creating this table in staging and production
Part of #6897
2023-06-26 15:39:13 -07:00
Jacob Hoffman-Andrews f6a005bc25
ca: check correspondence between precertificate and final linting certificate (#6953)
This introduces a small new package, `precert`, with one function
`Correspond` that checks a precertificate against a final certificate to
see if they correspond in the relationship described in RFC 6962.

This also modifies the `issuance` package so that RequestFromPrecert
generates an IssuanceRequest that keeps a reference to the
precertificate's bytes. The allows `issuance.Prepare` to do a
correspondence check when preparing to sign the final certificate. Note
in particular that the correspondence check is done against the
_linting_ version of the final certificate. This allows us to catch
correspondence problems before the real, trusted signature is actually
made.

Fixes #6945
2023-06-26 15:35:06 -07:00
Jacob Hoffman-Andrews 8dcbc4c92f
Add must.Do utility function (#6955)
This can take two values (typically the return values of a two-value
function) and panic if the error is non-nil, returning the interesting
value. This is particularly useful for cases where we statically know
the call will succeed.

Thanks to @mcpherrinm for the idea!
2023-06-26 14:43:30 -07:00
Aaron Gable 620699216f
Remove the TLS-ALPN-01 tlsDial helper (#6954)
This minor cleanup was found in the process of fixing tests in
https://github.com/letsencrypt/boulder/pull/6952, and resolves a TODO
from 2018.
2023-06-26 10:56:52 -07:00
Matthew McPherrin 66cfad1892
Update Public Suffix List (#6957)
Over on the community forum, there's been requests for the new .vn
domains.  weppos/publicsuffix-go hasn't had a release tagged in a little
while, so this is the result of:

    go get github.com/weppos/publicsuffix-go@latest
    go mod tidy
    go mod vendor
2023-06-26 11:19:06 -04:00
dependabot[bot] 11fe943577
update golang.org/x/crypto, net, term, and text (#6949)
Updates:
- https://github.com/golang/crypto from 0.8.0 to 0.10.0.
- https://github.com/golang/net from 0.9.0 to 0.11.0.
- https://github.com/golang/term from 0.7.0 to 0.9.0.
- https://github.com/golang/text from 0.9.0 to 0.10.0.
2023-06-21 13:26:26 -04:00
Aaron Gable 9e3b4bec18
Remove contact addresses from WFE logs (#6939)
The contacts field of an account can be very verbose, and is irrelevant
to the vast majority -- e.g. creating orders, validating challenges, and
downloading certificates -- of requests made by an account. To reduce
the length of our WFE log lines, remove the Contacts field from all
logs. When we actually need it, we can get it from the database.

Also remove the RequestEvent.TLS field, which is unused.
2023-06-20 14:56:27 -07:00
Aaron Gable 3c1476d79b
Remove last math/rand.Seed() call (#6948)
The use of math/rand.Seed() is deprecated as of go1.20, as the package
now seeds itself: https://tip.golang.org/doc/go1.20#minor_library_changes
2023-06-20 14:56:03 -07:00
Aaron Gable 8224fad20b
Update to go1.20.5 (#6946)
We are already running go1.20.5 in production.
2023-06-20 14:55:37 -07:00
Jacob Hoffman-Andrews cde4b9c90f
wfe: return proper error for goodkey timeout (#6938)
In WFE, we do a goodkey check when validating a self-authenticated POST
(i.e. when creating an account). For a while, that was a purely local
check, looking at a list of bad keys or bad moduluses, or checking for
factorability. At some point we also added a backend check, querying the
SA to see if a key was blocked. However, we did not update this one code
path to distinguish "bad key" from "timeout querying SA." That meant
that sometimes we would give a badPublicKey Problem Document when we
should have given an internalServerError.

Related:
https://github.com/letsencrypt/boulder/issues/6795#issuecomment-1574217398
2023-06-20 12:42:21 -07:00
Jacob Hoffman-Andrews a2b2e53045
cmd: fail without panic (#6935)
For "ordinary" errors like "file not found" for some part of the config,
we would prefer to log an error and exit without logging about a panic
and printing a stack trace.

To achieve that, we want to call `defer AuditPanic()` once, at the top
of `cmd/boulder`'s main. That's so early that we haven't yet parsed the
config, which means we haven't yet initialized a logger. We compromise:
`AuditPanic` now calls `log.Get()`, which will retrieve the configured
logger if one has been set up, or will create a default one (which logs
to stderr/stdout).

AuditPanic and Fail/FailOnError now cooperate: Fail/FailOnError panic
with a special type, and AuditPanic checks for that type and prints a
simple message before exiting when it's present.

This PR also coincidentally fixes a bug: panicking didn't previously
cause the program to exit with nonzero status, because it recovered the
panic but then did not explicitly exit nonzero.

Fixes #6933
2023-06-20 12:29:02 -07:00
Preston Locke 4cff3a2543
Fix doc comment typo: NewSRVBuilder -> NewNonceSRVBuilder (#6942)
Fixes several doc comment typos and grammar.
2023-06-20 12:28:50 -07:00