Commit Graph

4361 Commits

Author SHA1 Message Date
Roland Bracewell Shoemaker 2a8066b54b Refactor revocation integration tests (#3415)
Fixes #3330.
2018-01-31 17:22:07 -08:00
Daniel McCarney 200e31b9d5 Update CFSSL to tip of master (ed5223a). (#3408)
Update CFSSL to get upstream ocsp changes required to minimize log
volume.

Confirmed that unit tests pass:

```
$ git rev-parse HEAD
ed5223a490ece4d66899bbb292e3e46c0677cb86

$> go test ./...
ok      github.com/cloudflare/cfssl/api 0.009s
ok      github.com/cloudflare/cfssl/api/bundle  0.811s
ok      github.com/cloudflare/cfssl/api/certadd 6.735s
?       github.com/cloudflare/cfssl/api/certinfo        [no test files]
ok      github.com/cloudflare/cfssl/api/client  0.069s
ok      github.com/cloudflare/cfssl/api/crl     0.103s
ok      github.com/cloudflare/cfssl/api/gencrl  0.008s
ok      github.com/cloudflare/cfssl/api/generator       0.051s
ok      github.com/cloudflare/cfssl/api/info    0.027s
ok      github.com/cloudflare/cfssl/api/initca  0.022s
ok      github.com/cloudflare/cfssl/api/ocsp    0.026s
ok      github.com/cloudflare/cfssl/api/revoke  0.614s
ok      github.com/cloudflare/cfssl/api/scan    51.888s
ok      github.com/cloudflare/cfssl/api/sign    0.329s
ok      github.com/cloudflare/cfssl/api/signhandler     0.056s
ok      github.com/cloudflare/cfssl/auth        0.002s
ok      github.com/cloudflare/cfssl/bundler     7.864s
?       github.com/cloudflare/cfssl/certdb      [no test files]
ok      github.com/cloudflare/cfssl/certdb/dbconf       0.003s
ok      github.com/cloudflare/cfssl/certdb/ocspstapling 1.103s
ok      github.com/cloudflare/cfssl/certdb/sql  0.369s
?       github.com/cloudflare/cfssl/certdb/testdb       [no test files]
?       github.com/cloudflare/cfssl/certinfo    [no test files]
ok      github.com/cloudflare/cfssl/cli 0.003s
ok      github.com/cloudflare/cfssl/cli/bundle  0.003s [no tests to run]
?       github.com/cloudflare/cfssl/cli/certinfo        [no test files]
ok      github.com/cloudflare/cfssl/cli/crl     0.061s
ok      github.com/cloudflare/cfssl/cli/gencert 1.518s
ok      github.com/cloudflare/cfssl/cli/gencrl  0.011s
ok      github.com/cloudflare/cfssl/cli/gencsr  0.010s
ok      github.com/cloudflare/cfssl/cli/genkey  0.583s
?       github.com/cloudflare/cfssl/cli/info    [no test files]
?       github.com/cloudflare/cfssl/cli/ocspdump        [no test files]
ok      github.com/cloudflare/cfssl/cli/ocsprefresh     0.068s
?       github.com/cloudflare/cfssl/cli/ocspserve       [no test files]
?       github.com/cloudflare/cfssl/cli/ocspsign        [no test files]
?       github.com/cloudflare/cfssl/cli/printdefault    [no test files]
ok      github.com/cloudflare/cfssl/cli/revoke  0.092s
ok      github.com/cloudflare/cfssl/cli/scan    0.003s
ok      github.com/cloudflare/cfssl/cli/selfsign        0.648s
ok      github.com/cloudflare/cfssl/cli/serve   0.016s
ok      github.com/cloudflare/cfssl/cli/sign    0.041s
ok      github.com/cloudflare/cfssl/cli/version 0.003s
ok      github.com/cloudflare/cfssl/cmd/cfssl   0.005s [no tests to run]
?       github.com/cloudflare/cfssl/cmd/cfssl-bundle    [no test files]
?       github.com/cloudflare/cfssl/cmd/cfssl-certinfo  [no test files]
?       github.com/cloudflare/cfssl/cmd/cfssl-newkey    [no test files]
?       github.com/cloudflare/cfssl/cmd/cfssl-scan      [no test files]
ok      github.com/cloudflare/cfssl/cmd/cfssljson       0.012s
ok      github.com/cloudflare/cfssl/cmd/mkbundle        0.011s [no tests
to run]
?       github.com/cloudflare/cfssl/cmd/multirootca     [no test files]
ok      github.com/cloudflare/cfssl/config      0.004s
ok      github.com/cloudflare/cfssl/crl 0.013s
?       github.com/cloudflare/cfssl/crypto      [no test files]
?       github.com/cloudflare/cfssl/crypto/pkcs7        [no test files]
ok      github.com/cloudflare/cfssl/csr 4.836s
ok      github.com/cloudflare/cfssl/errors      0.004s
ok      github.com/cloudflare/cfssl/helpers     0.037s
?       github.com/cloudflare/cfssl/helpers/derhelpers  [no test files]
ok      github.com/cloudflare/cfssl/helpers/testsuite   4.830s
?       github.com/cloudflare/cfssl/info        [no test files]
ok      github.com/cloudflare/cfssl/initca      17.794s
ok      github.com/cloudflare/cfssl/log 0.002s
ok      github.com/cloudflare/cfssl/multiroot/config    0.022s
ok      github.com/cloudflare/cfssl/ocsp        0.119s
?       github.com/cloudflare/cfssl/ocsp/config [no test files]
?       github.com/cloudflare/cfssl/ocsp/universal      [no test files]
ok      github.com/cloudflare/cfssl/revoke      2.172s
ok      github.com/cloudflare/cfssl/scan        0.003s
?       github.com/cloudflare/cfssl/scan/vendor/crypto  [no test files]
?       github.com/cloudflare/cfssl/scan/vendor/crypto/md5      [no test
files]
?       github.com/cloudflare/cfssl/scan/vendor/crypto/rsa      [no test
files]
?       github.com/cloudflare/cfssl/scan/vendor/crypto/sha1     [no test
files]
?       github.com/cloudflare/cfssl/scan/vendor/crypto/sha256   [no test
files]
?       github.com/cloudflare/cfssl/scan/vendor/crypto/sha512   [no test
files]
?       github.com/cloudflare/cfssl/scan/vendor/crypto/tls      [no test
files]
ok      github.com/cloudflare/cfssl/selfsign    0.011s
ok      github.com/cloudflare/cfssl/signer      0.003s
ok      github.com/cloudflare/cfssl/signer/local        0.419s
ok      github.com/cloudflare/cfssl/signer/remote       0.341s
ok      github.com/cloudflare/cfssl/signer/universal    0.262s
ok      github.com/cloudflare/cfssl/transport   0.017s
?       github.com/cloudflare/cfssl/transport/ca        [no test files]
ok      github.com/cloudflare/cfssl/transport/ca/localca        0.020s
ok      github.com/cloudflare/cfssl/transport/core      0.021s
?       github.com/cloudflare/cfssl/transport/example/exlib     [no test
files]
?       github.com/cloudflare/cfssl/transport/example/maclient  [no test
files]
?       github.com/cloudflare/cfssl/transport/example/maserver  [no test
files]
ok      github.com/cloudflare/cfssl/transport/kp        0.021s
?       github.com/cloudflare/cfssl/transport/roots     [no test files]
?       github.com/cloudflare/cfssl/transport/roots/system      [no test
files]
ok      github.com/cloudflare/cfssl/ubiquity    0.012s
ok      github.com/cloudflare/cfssl/whitelist   0.086s
?       github.com/cloudflare/cfssl/whitelist/example   [no test files]

```
2018-01-31 12:50:33 -08:00
Roland Bracewell Shoemaker 9c6a1f2adc Move deactivated pending authorizations to the authorization table (#3389)
Fixes #3238.
2018-01-29 23:42:27 -08:00
Roland Bracewell Shoemaker 1231f577d0 Allow revocation of certificate by issuing account and add integration tests (#3390)
Fixes #3331 and #3330.
2018-01-29 13:23:20 -08:00
Roland Bracewell Shoemaker 2adf5a54ab Move CN to SAN in v2 API (#3394)
Fixes #3368.

Basically just adds a `csr.VerifyCSR` call in `ra.FinalizeOrder` that mirrors what we have in `ra.NewCertificate`, this moves the CN to SAN as expected if included.
2018-01-29 13:21:12 -08:00
Roland Bracewell Shoemaker 8f168b909e Omit empty fields in JSON representation of core.ValidationRecord struct (#3399) 2018-01-29 10:51:57 -08:00
Roland Bracewell Shoemaker 88aa44e43d Reject NotBefore and NotAfter if sent in NewOrder Request (#3397)
Fixes #3363.
2018-01-29 10:50:39 -08:00
Roland Bracewell Shoemaker d7a831b81b Enforce single AIA in signing profiles (#3396)
Fixes #3374.
2018-01-29 10:50:04 -08:00
Roland Bracewell Shoemaker cdab3a2ef8 Improve wildcard error (#3398) 2018-01-29 10:49:31 -08:00
Roland Bracewell Shoemaker d916ccc9ed Only return nonce for non-GET unless req is for new-nonce (#3400) 2018-01-29 10:03:52 -08:00
Roland Bracewell Shoemaker 3e33d56d03 Remove test/config-next gating from unittests (#3395)
The migrations are all applied and the tests can run unconditionally.
2018-01-25 09:08:07 -05:00
Roland Bracewell Shoemaker fc5c8f76b6 Remove unused features (#3393)
This removes a number of unused features (i.e. they are never checked anywhere).
2018-01-25 08:55:05 -05:00
Bouke van der Bijl 308a4f4d45 Upgrade publicsuffix-go to 7881288 (#3391)
HEAD is now at 7881288 autopull: 2018-01-24T06:00:45Z (#102)
?     github.com/weppos/publicsuffix-go/cmd/load  [no test files]
=== RUN   TestPublicSuffix
--- PASS: TestPublicSuffix (0.00s)
=== RUN   TestEffectiveTLDPlusOne
--- PASS: TestEffectiveTLDPlusOne (0.00s)
PASS
ok    github.com/weppos/publicsuffix-go/net/publicsuffix  0.020s
=== RUN   TestValid
--- PASS: TestValid (0.00s)
=== RUN   TestIncludePrivate
--- PASS: TestIncludePrivate (0.00s)
=== RUN   TestIDNA
--- PASS: TestIDNA (0.00s)
=== RUN   TestPsl
--- PASS: TestPsl (0.01s)
=== RUN   TestNewListFromString
--- PASS: TestNewListFromString (0.00s)
=== RUN   TestNewListFromString_IDNAInputIsUnicode
--- PASS: TestNewListFromString_IDNAInputIsUnicode (0.00s)
=== RUN   TestNewListFromString_IDNAInputIsAscii
--- PASS: TestNewListFromString_IDNAInputIsAscii (0.00s)
=== RUN   TestNewListFromFile
--- PASS: TestNewListFromFile (0.00s)
=== RUN   TestListAddRule
--- PASS: TestListAddRule (0.00s)
=== RUN   TestListFind
--- PASS: TestListFind (0.00s)
=== RUN   TestNewRule_Normal
--- PASS: TestNewRule_Normal (0.00s)
=== RUN   TestNewRule_Wildcard
--- PASS: TestNewRule_Wildcard (0.00s)
=== RUN   TestNewRule_Exception
--- PASS: TestNewRule_Exception (0.00s)
=== RUN   TestNewRule_FromASCII
--- PASS: TestNewRule_FromASCII (0.00s)
=== RUN   TestNewRule_FromUnicode
--- PASS: TestNewRule_FromUnicode (0.00s)
=== RUN   TestNewRuleUnicode_FromASCII
--- PASS: TestNewRuleUnicode_FromASCII (0.00s)
=== RUN   TestNewRuleUnicode_FromUnicode
--- PASS: TestNewRuleUnicode_FromUnicode (0.00s)
=== RUN   TestRuleMatch
--- PASS: TestRuleMatch (0.00s)
=== RUN   TestRuleDecompose
--- PASS: TestRuleDecompose (0.00s)
=== RUN   TestLabels
--- PASS: TestLabels (0.00s)
=== RUN   TestToASCII
--- PASS: TestToASCII (0.00s)
=== RUN   TestCookieJarList
--- PASS: TestCookieJarList (0.00s)
PASS
ok    github.com/weppos/publicsuffix-go/publicsuffix  0.039s
2018-01-24 15:09:56 -08:00
Roland Bracewell Shoemaker 2a04a85c49 Export max DB connections in boulder-sa and ocsp-responder (#3388)
Fixes #3387.
2018-01-24 09:11:01 -05:00
Daniel McCarney d6a33d1108 Return full cert chain for V2 cert GET. (#3366)
This commit implements a mapping from certificate AIA Issuer URL to PEM
encoded certificate chain. GET's to the V2 Certificate endpoint will
return a full PEM encoded certificate chain in addition to the leaf cert
using the AIA issuer URL of the leaf cert and the configured mapping.

The boulder-wfe2 command builds the chain mapping by reading the
"wfe" config section's 'certificateChains" field, specifying a list
of file paths to PEM certificates for each AIA issuer URL. At startup
the PEM file contents are ready, verified and separated by a newline.
The resulting populated AIA issuer URL -> PEM cert chain mapping is
given to the WFE for use with the Certificate endpoint.

Resolves #3291
2018-01-19 11:23:44 -08:00
Roland Bracewell Shoemaker 230b397403 Fix wfe2 key rollover (#3373)
Fixes #3340.

Required some monkeying around with the test keys used.
2018-01-18 14:31:48 -08:00
Roland Bracewell Shoemaker 7e4d44e172 Don't mask sa.GetValidAuthorization error in ra.NewAuthorization (#3381) 2018-01-18 15:53:14 -05:00
Jacob Hoffman-Andrews f6ff59c9ab Move db-next migrations into db. (#3379)
These have now all been applied in production.
2018-01-18 15:13:21 -05:00
Jacob Hoffman-Andrews 54ca6fe939 Use WillingToIssueWildcard in cert-checker. (#3372)
Fixes #3348 and #3369
2018-01-18 08:36:58 -05:00
Daniel McCarney ba264a5091 Remove unused WFE2 feature flags. (#3375)
The WFE2 doesn't check any of the feature flags that are configured in
the `test/config/wfe2.json` and `test/config-next/wfe2.json` config
files - we default to acting as if all new features are enabled for the
V2 work. This commit removes the flags from the config to avoid
confusion or expectations that changing the config will disable the
features.
2018-01-17 12:28:19 -08:00
Daniel McCarney c6d56b7a84 Match RA `authorizationLifetimeDays` to prod. (#3370) 2018-01-16 10:39:57 -08:00
Daniel McCarney f969847070 Delete unused WFE/WFE2 cache configuration params. (#3360)
This commit removes `CertCacheDuration`, `CertNoCacheExpirationWindow`,
`IndexCacheDuration` and `IssuerCacheDuration`. These were read from
config values that weren't set in config/config-next into WFE struct
fields that were never referenced in any code.
2018-01-12 15:54:02 -08:00
Jacob Hoffman-Andrews cfc7823cdd
Remove EnforceChallengeDisable check at issuance. (#3362)
Per
https://community.letsencrypt.org/t/2018-01-11-update-regarding-acme-tls-sni-and-shared-hosting-infrastructure/50188/3,
we are planning to treat prior issuance by an account as reason to whitelist
that account for reissuance via TLS-SNI. By extension, reusing validations that
occurred prior to disclosure of the TLS-SNI issue is reasonably safe, so this
change removes the issuance-time check for whether a challenge has been
disabled. This saves us significant complexity and database load in implementing
TLSSNIRevalidation (https://github.com/letsencrypt/boulder/pull/3361), since
ChallengeTypeEnabled returns false, so we'd have to plumb through data about
whether an issuance was based on a revalidation. Instead, we can safely delete
this code.

Note that "EnforceChallengeDisable" is implemented in three places: new-authz,
validation time, and issuance time. We're keeping it in place at new-authz for
now because it's intertwined with the account whitelisting code. We're keeping
it in place at validation time, because there's a small chance that someone
could have created a pending authz for a domain they don't control before the
TLS-SNI issue was announced, and that authz could still be pending, and they
could find out that that domain is hosted on a vulnerable provider, and use the
vulnerability now that they know about it. A tiny chance, but may as well be
careful.
2018-01-12 11:35:23 -08:00
Jacob Hoffman-Andrews 8153b919be
Implement TLSSNIRevalidation (#3361)
This change adds a feature flag, TLSSNIRevalidation. When it is enabled, Boulder
will create new authorization objects with TLS-SNI challenges if the requesting
account has issued a certificate with the relevant domain name, and was the most
recent account to do so*. This setting overrides the configured list of
challenges in the PolicyAuthority, so even if TLS-SNI is disabled in general, it
will be enabled for revalidation.

Note that this interacts with EnforceChallengeDisable. Because
EnforceChallengeDisable causes additional checked at validation time and at
issuance time, we need to update those two places as well. We'll send a
follow-up PR with that.

*We chose to make this work only for the most recent account to issue, even if
there were overlapping certificates, because it significantly simplifies the
database access patterns and should work for 95+% of cases.

Note that this change will let an account revalidate and reissue for a domain
even if the previous issuance on that account used http-01 or dns-01. This also
simplifies implementation, and fits within the intent of the mitigation plan: If
someone previously issued for a domain using http-01, we have high confidence
that they are actually the owner, and they are not going to "steal" the domain
from themselves using tls-sni-01.

Also note: This change also doesn't work properly with ReusePendingAuthz: true.
Specifically, if you attempted issuance in the last couple days and failed
because there was no tls-sni challenge, you'll still have an http-01 challenge
lying around, and we'll reuse that; then your client will fail due to lack of
tls-sni challenge again.

This change was joint work between @rolandshoemaker and @jsha.
2018-01-12 11:00:06 -08:00
Jacob Hoffman-Andrews 198fd1426a Bring config up-to-date with prod. (#3359)
This brings in some changes from config-next that are now live in production.
2018-01-11 16:29:41 -05:00
Andrew Gabbitas 50596ef386 Remove redundant semicolon. (#3355)
The redundant semicolon breaks the goose down
function for this migration
2018-01-10 16:26:53 -08:00
Maciej Dębski 44984cd84a Implement regID whitelist for allowed challenge types. (#3352)
This updates the PA component to allow authorization challenge types that are globally disabled if the account ID owning the authorization is on a configured whitelist for that challenge type.
2018-01-10 13:44:53 -05:00
Jacob Hoffman-Andrews cbcfce44ab
Disallow the use of disabled challenge types (#3351)
This patch does three things:
* Prevent the use of a authorization for issuance that was validated using a disabled challenge type
* Don't reuse a authorization that was validated using a disabled challenge type
* Don't allow validation using a disabled validation type

And adds tests for all three cases.

It also factors out the challenge-fetching code common to several SA functions into
a new getChallenges function, and adds a call to getChallenges as part of getAuthorizations.
2018-01-09 21:18:46 -08:00
Roland Shoemaker d07092baf5 Satisfy travis 2018-01-09 21:06:41 -08:00
Roland Shoemaker d92713826c remove debug statements 2018-01-09 20:58:53 -08:00
Roland Shoemaker 4d7f68de21 Properly flag gate SA authorization challenge population 2018-01-09 20:53:04 -08:00
Roland Shoemaker 400ffede3d More fixes 2018-01-09 20:48:16 -08:00
Roland Shoemaker 1a3a76438c Fix tests and GetOrderAuthorizations 2018-01-09 20:38:52 -08:00
Roland Shoemaker dcd2b438f4 Fix previous impl, add valid authz reuse fix and existing authz validation fix 2018-01-09 19:53:48 -08:00
Roland Shoemaker 5ca646c5dd Disallow the use of valid authorizations that used currently disabled challenges for issuance 2018-01-09 18:52:29 -08:00
Jacob Hoffman-Andrews b16e788c4b Make chisel2 more adaptable. (#3350)
This makes it easier to use in testing the staging server.
2018-01-09 19:39:41 -05:00
Jacob Hoffman-Andrews f6d9931ae2 Fix error message with extra "not". (#3345) 2018-01-09 15:22:24 -08:00
Jacob Hoffman-Andrews 990469e2cb
Re-enable v2 DNS tests. (#3349) 2018-01-09 15:08:09 -08:00
Jacob Hoffman-Andrews 827f7859f2 Fix issuerCert in test configs. (#3310)
Previously, there was a disagreement between WFE and CA as to what the correct
issuer certificate was. Consolidate on test-ca2.pem (h2ppy h2cker fake CA).
    
Also, the CA configs contained an outdated entry for "IssuerCert", which was not
being used: The CA configs now use an "Issuers" array to allow signing by
multiple issuer certificates at once (for instance when rolling intermediates).
Removed this outdated entry, and the config code for CA to load it. I've
confirmed these changes match what is currently in production.

Added an integration test to check for this problem in the future.

Fixes #3309, thanks to @icing for bringing the issue to our attention!

This also includes changes from #3321 to clarify certificates for WFE.
2018-01-09 07:56:39 -05:00
Daniel McCarney 191ad117dc Add "Location" to WFEv2 Access-Control-Expose-Headers. (#3337)
This updates CORS to allow in-browser JS clients to access the
Location response header.

Resolves #3334

Thanks to @tappie for reporting!
2018-01-08 10:51:39 -08:00
Daniel McCarney 4d7d2e5985 Clarify that you need config-next for ACMEv2 testing. (#3341) 2018-01-08 09:53:02 -08:00
Jonathan Rudenberg aae455da21 Add Location header to WFE2 finalize response (#3336) 2018-01-08 09:38:30 -08:00
Daniel McCarney 5ddfa25b56 Ensure calls to `wfe.sendError` send err param. (#3324)
In two places of the WFE2 we had a non-nil error and produced a server
internal problem but did not pass along the non-nil error to be logged.
This leaves only the non-descriptive server internal error to work with.
This commit updates the WFE2 to pass the err along too.
2018-01-05 13:46:51 -08:00
Jacob Hoffman-Andrews a98a206dd2 Remove references to test-ca.pem. (#3322)
shell_test.go and publisher_test.go had unnecessary references to
../test/test-ca.pem. This change makes them a little more self-contained.

Note: ca/ca_test.go still depends on test-ca.pem, but removing the dependency
turns out to be a little more complicated due to hardcoded expectations in some
of the test cases.
2018-01-05 12:07:12 -08:00
Jacob Hoffman-Andrews 4ba5205e81 Remove /terms redirect. (#3326)
Fixes #3325
2018-01-05 12:06:14 -08:00
Daniel McCarney b73d911f9d Return correct response to existing newAccount reqs. (#3329)
Prior to this commit the WFE2 returned a HTTP 409 status with
a malformed problem body when a newAccount request arrived signed with
the same key as is used with an existing account. Per draft-09 this
should be a HTTP 200 OK response. This is what Pebble implements as
well.

This commit updates the WFE2 and tests to match draft-09 behaviour in
this regard.

An outdated TODO is also removed. The case where an error other
than berrors.NotFound is returned is handled correctly.

Resolves #3327
2018-01-05 12:05:25 -08:00
Daniel McCarney 292b2a275d Add wildcard exact blacklist to PA. (#3318)
This commit adds a new wildcardExactBlacklist map to the PA's
AuthorityImpl that is used by WillingToIssueWildcard to decide if
a wildcard issuance would cover a high value domain.

This prevents getting a wildcard for "*.example.com" if
"highvalue.example.com" is on the exact blacklist since it would
circumvent the intention of the exact blacklist by minting a certificate
that could be used for "highvalue.example.com".

Resolves #3239
2018-01-04 12:50:39 -08:00
Jacob Hoffman-Andrews 91a3545d8f Return multiple TXT records from dns-test-srv (#3316)
With this change, each call to `/set-txt` adds a record, and `/clear-txt` deletes all records for a hostname.

Part of #3312
2018-01-04 14:00:45 -05:00
Daniel McCarney d92a7f56e8 Add integration test for wildcard authz reuse. (#3320)
This commit adds a small integration test that ensures that a valid
HTTP-01 authorization is not reused for a wildcard issuance.
2018-01-03 15:33:53 -08:00
Jacob Hoffman-Andrews 1fe8aa8128 Improve errors for DNS challenge (#3317)
Before this change, we would just log "Correct value not found for DNS challenge"
when we got a TXT record that didn't match what we expected. This was different
from the error when no TXT records were found at all, but viewing the error out of
context doesn't make that clear. This change improves the error to specifically say
that we found a TXT record, but it was the wrong one.

Also in this change: if we found multiple TXT records, we mention the number;
and we trim the length of the echoed TXT record.
2018-01-03 15:37:23 -05:00