Commit Graph

146 Commits

Author SHA1 Message Date
Jacob Hoffman-Andrews 7d00d9fbcf
Use go1.18 in CI, and fix up Docker image (#6002)
- Remove GOPATH-style path structure, which isn't needed with Go
modules.
- Remove check for existing of docker buildx builder instance, since it
was unreliable.
2022-03-21 12:24:13 -07:00
Aaron Gable 3f26ac0768
Remove false positive in go version comment (#5995) 2022-03-15 10:41:28 -07:00
alexzorin 73ed095f0d
docker: re-export OCSP ports (#5994) 2022-03-14 22:56:59 -07:00
Jacob Hoffman-Andrews edcf4ac18b
Unexport some ports in docker-compose.yml (#5990) 2022-03-14 11:54:02 -07:00
Samantha 21416b4d72
Post Debian package on release tag cut (#5977)
- Add a CI workflow which publishes a GitHub Release containing a Debian package
  when a release tag is pushed
- Add a script, called by the CI host, that installs all of the dependencies
  necessary to `make` a Debian package
- Remove the, now defunct, goreleaser config file

Fixes #5970
2022-03-10 16:00:39 -08:00
Jacob Hoffman-Andrews 6395701244
Update CI to test go1.18beta2 (#5982)
This requires using GODEBUG to enable a couple of thing turned off by go1.18 (TLS 1.0/1.1, SHA-1 CSRs).

Also add help for a failure mode of cross builds.
2022-03-09 13:42:15 -08:00
Andrew Gabbitas 3bb3421631
Remove go 1.17.5 from test matrix (#5940) 2022-02-12 12:03:23 -07:00
Aaron Gable ad0e56ec4a
Remove test coverage on go1.17 (#5882) 2022-01-14 16:22:24 -08:00
Samantha 7d4facc403
test: Install arm64 protobuf for arm64 docker images (#5880) 2022-01-13 13:45:38 -08:00
Samantha 8a1b51f81b
Use go install for dep binaries when building docker (#5858)
Update the way our docker build script installs the binaries we rely on
at runtime to avoid "go get" deprecation warnings.

Fixes #5744
2021-12-16 19:02:46 -08:00
Aaron Gable c88640c816
Run tests on Go 1.17.5 (#5845)
Build a new docker container for the new Go 1.17.5 security release,
which includes a fix for the `net/http` package. Update our CI to run
tests on both our current and the new go versions.
2021-12-10 14:44:23 -08:00
Aaron Gable 5c02deabfb
Remove wfe1 integration tests (#5840)
These tests are testing functionality that is no longer in use in
production deployments of Boulder. As we go about removing wfe1
functionality, these tests will break, so let's just remove them
wholesale right now. I have verified that all of the tests removed in
this PR are duplicated against wfe2.

One of the changes in this PR is to cease starting up the wfe1 process
in the integration tests at all. However, that component was serving
requests for the AIA Issuer URL, which gets queried by various OCSP and
revocation tests. In order to keep those tests working, this change also
adds an integration-test-only handler to wfe2, and updates the CA
configuration to point at the new handler.

Part of #5681
2021-12-10 12:40:22 -08:00
Samantha 65ed9c7974
test: Add support for multi-arch docker images (#5837) 2021-12-08 10:51:01 -08:00
Jacob Hoffman-Andrews 6b1ad1ce21
Enumerate bredis_N containers explicitly (#5774)
Previously we were using the `deploy:` config field, but that's not
supported in some cases. Splitting things out also allows us to
explicitly assign IP addresses rather than relying on their most-likely
assignment to containers.
2021-11-03 17:16:19 -07:00
Jacob Hoffman-Andrews 7fab32a000
Add rocsp-tool to manually store OCSP responses in Redis (#5758)
This is a sort of proof of concept of the Redis interaction, which will
evolve into a tool for inspection and manual repair of missing entries,
if we find ourselves needing to do that.

The important bits here are rocsp/rocsp.go and
cmd/rocsp-tool/main.go. Also, the newly-vendored Redis client.
2021-11-02 11:04:03 -07:00
Jacob Hoffman-Andrews c1d221abe6
Add Redis to Boulder's docker-compose (#5747)
This gets us ready to add writing to Redis from ocsp-updater. The Go
redis client requires different configuration for cluster operation
than non-cluster, so we need to simulate a cluster in our integration
environment. Cluster operation requires a manual initialization step,
which you can do like so:

```
docker-compose up -d bredis docker-compose exec bredis bash
/test/redis-create.sh
```

I still need to figure out how to make that happen automatically during
integration tests and when you run docker-compose up.

The hex values in redis.config are randomly generated passwords for the
different users.

Fixes #5723
2021-10-28 10:36:11 -07:00
Aaron Gable eb5d0e9ba9
Update golangci-lint from v1.29.0 to v1.42.1 (#5745)
Update the version of golangci-lint we use in our docker image,
and update the version of the docker image we use in our tests.
Fix a couple places where we were violating lints (ineffective assign
and calling `t.Fatal` from outside the main test goroutine), and add
one lint (using math/rand) to the ignore list.

Fixes #5710
2021-10-22 16:26:59 -07:00
Jacob Hoffman-Andrews ba0ea090b2
integration: save hierarchy across runs (#5729)
This allows repeated runs using the same hiearchy, and avoids spurious
errors from ocsp-updater saying "This CA doesn't have an issuer cert
with ID XXX"

Fixes #5721
2021-10-20 17:06:33 -07:00
Jacob Hoffman-Andrews 1309da6275
Consolidate name resolution in sd-test-srv. (#5709)
Previously we relied on aliases in Docker's DNS for some names, and
sd-test-srv for some other names. This moves them all into sd-test-srv.
2021-10-13 18:38:38 -07:00
Andrew Gabbitas 258e0cf7c1
Remove go 1.16.6 from testing (#5636)
Fixes: #5585
2021-09-07 15:34:54 -06:00
Aaron Gable 4c581436a3
Add go1.17beta1 to CI (#5483)
Add go1.17beta1 docker images to the set of things we build,
and integrate go1.17beta1 into the set of environments CI runs.
Fix one test which breaks due to an underlying refactoring in
the `crypto/x509` stdlib package. Fix one other test which breaks
due to new guarantees in the stdlib's TLS ALPN implementation.

Also removes go1.16.5 from CI so we're only running 2 versions.

Fixes #5480
2021-07-13 10:00:04 -07:00
Andrew Gabbitas fc9ac77a69
Add testing for go1.16.6 (#5524) 2021-07-12 23:41:06 -06:00
Aaron Gable 923aef5839
Update to go1.16.5 (#5482)
Includes a number of updates to packages we use: math/big,
net, net/http/httputil, and archive/zip. See release notes at
https://golang.org/doc/devel/release#go1.16.minor

Fixes #5464
2021-06-15 11:42:04 -07:00
Andrew Gabbitas 401df1c48a
Remove go1.16.2 from ci matrix (#5417)
Fixes #5416
2021-05-14 11:04:25 -07:00
Aaron Gable a19ebfa0e9
VA: Query SRV to preload/cache DNS resolver addrs (#5360)
Abstract out the way that the bdns library keeps track of the
resolvers it uses to do DNS lookups. Create one implementation,
the `StaticProvider`, which behaves exactly the same as the old
mechanism (providing whatever names or addresses were given
in the config). Create another implementation, `DynamicProvider`,
which re-resolves the provided name on a regular basis.

The dynamic provider consumes a single name, does a lookup
on that name for any SRV records suggesting that it is running a
DNS service, and then looks up A records to get the address of
all the names returned by the SRV query. It exports its successes
and failures as a prometheus metric.

Finally, update the tests and config-next configs to work with
this new mechanism. Give sd-test-srv the capability to respond
to SRV queries, and put the names it provides into docker's
default DNS resolver.

Fixes #5306
2021-04-20 10:11:53 -07:00
Jacob Hoffman-Andrews 795348483e
Fix boulder-tools tag in docker-compose.yml. (#5379) 2021-04-01 17:54:45 -07:00
Jacob Hoffman-Andrews 7194624191
Update grpc and protobuf to latest. (#5369)
protoc now generates grpc code in a separate file from protobuf code.
Also, grpc servers are now required to embed an "unimplemented"
interface from the generated .pb.go file, which provides forward
compatibility.

Update the generate.go files since the invocation for protoc has changed
with the split into .pb.org and _grpc.pb.go.

Fixes #5368
2021-04-01 17:18:15 -07:00
Andrew Gabbitas 3d9d5e2306
Cleanup go1.15.7 (#5374)
Remove code that is no longer needed after migrating to go1.16.x.
Remove testing with go1.15.7 in the test matrix.

Fixes #5321
2021-04-01 10:50:18 -07:00
Jacob Hoffman-Andrews b5471f36f0
Switch to OS-provided SoftHSM2. (#5365)
The OS-provided packages used to be too old for us, but now they are
not!
2021-03-30 17:37:58 -07:00
Samantha 1e5d89e6c8
Remove Coveralls (#5363)
- Remove `goveralls`, `gover`, and `cover` from `build.sh`.
- Remove `--coverage` option from `test.sh`.
- Update Docker image in `docker-compose.yml` and
  `.github/workflows/boulder-ci.yml`

Fixes #5357
2021-03-29 11:56:52 -07:00
Andrew Gabbitas 8315393eb1
Update tests to go1.16.2 (#5342)
* Update to go1.16.2

Fixes #5333
2021-03-16 14:56:20 -06:00
Samantha e5bff38c93
Cleanup docker-compose configuration (#5335)
- Remove environment variables no longer referenced in CI
- Standardize `environment` mapping to use key + value
- Standardize on two space indent
- Alias `image` to make version updates easier

Fixes #5334
2021-03-11 17:33:13 -08:00
Samantha fc53482cac
Run db-next migrations with config-next configuration (#5320)
Docker container should load the appropriate schema (`sa/_db` or
`sa/_db-next`) for the given configuration.

- Add `docker-compose.next.yml` docker-compose overrides
- Detect when to apply `sa/_db-next/migrations`
- Detect mismatch between `goose dbversion` and the latest migration
- Symlink `promoted` schema back to `sa/_db-next/migrations`
- Add tooling to consistently promote/demote schema migrations

Fixes #5300
2021-03-11 14:45:32 -08:00
Andrew Gabbitas ceffe18dfc
Add testing for golang 1.16 (#5313)
- Add 1.16.1 to the GitHub CI test matrix
- Fix tlsalpn tests for go 1.16.1 but maintain compatibility with 1.15.x
- Fix integration tests.

Fix: #5301
Fix: #5316
2021-03-11 11:47:41 -08:00
Andrew Gabbitas 066ed3427e
Add GitHub actions workflow for Boulder CI tests (#5308)
- Add GitHub actions workflow for Boulder CI tests in parity with Travis
  CI except the coverage test.
- Change boulder-tools docker image to push to a static docker repo
  instead of creating a new one each time. Use docker version tags and git
  hash to identify go versions in the repo.
- Change docker-compose to pull from the static boulder-tools repo. This
  breaks using the TRAVIS_GO_VERSION env variable to pull the docker image, but
  the default will still work with intent of decommissioning Travis-CI for
  GitHub CI.

Fix: #5289
2021-02-26 12:59:47 -08:00
Samantha 7cbfe94f30
Switch docker base image from buster-scm to focal-scm (#5287)
- Switch docker base image from`buster-scm` to `focal-scm`
- Add `dockerfile` lines to correct `/etc/rsyslog.conf` settings

Fixes #5295
2021-02-22 10:33:50 -08:00
Andrew Gabbitas e8a6eabbd5
Update to go1.15.7 (#5241)
Go version 1.15.7 is a security release.

Fixes: #5237
2021-01-20 11:38:38 -08:00
Samantha e8ca1987cd
Python upgrade os upgrades and travis config cleanup (#5186)
Modified the Dockerfile to build using Debian Buster, an upgrade from
Debian Stretch. The default Python 3 version for Stretch is 3.5.x which
is soon to de deprecated by Python-cryptography a dependency we rely on
for our integration test suite. The default Python 3 version for Debian
Buster is 3.7.x

In the .travis.yml file we are instructing travis to provision Xenial
instances and install two versions of Go. This change bumps Xenial
(16.04) -> Focal (20.04) and removes the installation of the two Go
versions; all of our testing happens inside of a docker container so
having Go installed on the Docker parent isn't necessary.

In the docker-compose.yml file we configure which docker image to pull
from Dockerhub, I've updated these to reflect the Debian Buster images
already built and pushed.

Modified build.sh to install mariadb-client-core 10.3, there is no 10.1
install candidate for Debian Buster and release notes for 10.2 and 10.3
indicate that these were both security releases.

Modified test.sh to use python3 instead of system python (usually 2.7)
for test/grafana/lints.py

Fixes #5180
2020-11-23 18:12:04 -08:00
Aaron Gable ad89e0b658
Update to go1.15.5 (#5179)
Go version 1.15.5 is a security release which introduces fixes
both to the big.Int package (which we use) and the go compiler
itself (which we use).

Release notes: https://golang.org/doc/go1.15

This change builds go1.15.5 versions of our docker containers,
adds tests on the new version to our travis config, and sets the
default to be the new version.

Fixes #5173
2020-11-12 13:31:23 -08:00
Phil Porada f0b54a8968
Upgrade mariadb from 10.3 to 10.5 (#5088) 2020-09-14 11:27:15 -07:00
Aaron Gable d1d9269530
Switch to testing only on go1.15 (#5022)
Now that our prod deployment has updated to using go1.15,
it is no longer be necessary to duplicate our tests across two
different go versions.
2020-08-24 13:47:50 -07:00
Aaron Gable 316ffd6241
Update to stable go1.15 (#5021)
This updates our test infrastructure from using go1.15rc2 to the
newly-released go1.15 stable version.
2020-08-17 12:32:20 -07:00
Aaron Gable d873e01fa8
Update to go1.15rc2 for tests (#5013)
Go 1.15rc2 was released today. The diff from rc1 only includes one
change to the crypto/ package, but worth upgrading just to be ready
for the official 1.15 stable release.
2020-08-10 11:24:32 -07:00
Roland Bracewell Shoemaker 75b034637b
Update travis go versions (remove 1.14.1, add 1.15rc1) (#5002)
Fixes #4919.
2020-08-04 12:13:09 -07:00
Aaron Gable 09917baf47
Add gosec linter to golangci-lint (#4990)
This enables the gosec linter. It also disables a number of
warnings which it emits on the current codebase. Some of these
(e.g. G104: Errors unhandled) we expect to leave disabled
permanently; others (e.g. G601: Implicit memory aliasing in for loop)
we expect to fix and then enable to prevent regressions.

Part of #4948
2020-07-28 16:42:17 -07:00
Aaron Gable 8923fa29a7
Remove infinite memlock rlimit from docker config (#4967)
This was necessary to work around a poor interaction between
Go 1.4.x and unpatched linux kernels. Although we are still using
the same version of Go, and the Linux project only released the
fix in kernel 5.4.2 and later, Ubuntu has backported the fix into
Focal Fossa 20.04's 5.4.0 kernel. Therefore this workaround is
no longer needed.
https://github.com/golang/go/issues/37436#issuecomment-657436406

This also removes one need for elevated permissions, making it
easier to use docker rootless for development.
2020-07-20 14:12:45 -07:00
Aaron Gable 696fc4e122
Enable testing on go1.14.5 (#4953)
New go version 1.14.5 was released today:
https://groups.google.com/g/golang-announce/c/XZNfaiwgt2w/m/E6gHDs32AQAJ
It includes a security fix for X.509 verification
(CVE-2020-14039, https://golang.org/issue/39360).
2020-07-14 11:28:39 -07:00
Jacob Hoffman-Andrews 18e7a57e24
Improve integration tests. (#4847)
Add passthrough for certain environment variables to
docker-compose.yml, making it easier to set them:

    RUN=unit docker-compose run --use-aliases boulder ./test.sh

Use 4001 instead of 4443 to monitor boulder-wfe2's health. This avoids
a spurious error log about a failed TLS handshake.

Remove unused code around running Certbot in integation tests.
2020-06-04 19:43:28 -07:00
Roland Bracewell Shoemaker 7673f02803
Use cmd/ceremony in integration tests (#4832)
This ended up taking a lot more work than I expected. In order to make the implementation more robust a bunch of stuff we previously relied on has been ripped out in order to reduce unnecessary complexity (I think I insisted on a bunch of this in the first place, so glad I can kill it now).

In particular this change:

* Removes bhsm and pkcs11-proxy: softhsm and pkcs11-proxy don't play well together, and any softhsm manipulation would need to happen on bhsm, then require a restart of pkcs11-proxy to pull in the on-disk changes. This makes manipulating softhsm from the boulder container extremely difficult, and because of the need to initialize new on each run (described below) we need direct access to the softhsm2 tools since pkcs11-tool cannot do slot initialization operations over the wire. I originally argued for bhsm as a way to mimic a network attached HSM, mainly so that we could do network level fault testing. In reality we've never actually done this, and the extra complexity is not really realistic for a handful of reasons. It seems better to just rip it out and operate directly on a local softhsm instance (the other option would be to use pkcs11-proxy locally, but this still would require manually restarting the proxy whenever softhsm2-util was used, and wouldn't really offer any realistic benefit).
* Initializes the softhsm slots on each integration test run, rather than when creating the docker image (this is necessary to prevent churn in test/cert-ceremonies/generate.go, which would need to be updated to reflect the new slot IDs each time a new boulder-tools image was created since slot IDs are randomly generated)
* Installs softhsm from source so that we can use a more up to date version (2.5.0 vs. 2.2.0 which is in the debian repo)
* Generates the root and intermediate private keys in softhsm and writes out the root and intermediate public keys to /tmp for use in integration tests (the existing test-{ca,root} certs are kept in test/ because they are used in a whole bunch of unit tests. At some point these should probably be renamed/moved to be more representative of what they are used for, but that is left for a follow-up in order to keep the churn in this PR as related to the ceremony work as possible)
Another follow-up item here is that we should really be zeroing out the database at the start of each integration test run, since certain things like certificates and ocsp responses will be signed by a key/issuer that is no longer is use/doesn't match the current key/issuer.

Fixes #4832.
2020-06-03 15:20:23 -07:00
Roland Bracewell Shoemaker 348b13f693
Set docker volumes to cache consistency mode (#4838)
(Only applies to OS X)

boulder is, typically, not a long lived docker container, and we don't
really care about synchronous consistency between the host fs and
container fs. cached provides the best performance for read-heavy
workloads, which is what is typically slowest on container startup
(at least from my experience).

This change provides a 30-40% speedup on OS X.
2020-06-02 15:00:57 -07:00