aboutsummaryrefslogtreecommitdiff
path: root/middleware
diff options
context:
space:
mode:
authorGravatar Miek Gieben <miek@miek.nl> 2017-09-01 08:52:13 +0200
committerGravatar GitHub <noreply@github.com> 2017-09-01 08:52:13 +0200
commita08a4beec453c9c65f3b2be31859e33a973c436c (patch)
treec7f9d4d6305e06034f70456cb650d0c7a0b10075 /middleware
parent5eccfa2d1e4b76ac0320dc4123413cb0300a39b9 (diff)
downloadcoredns-a08a4beec453c9c65f3b2be31859e33a973c436c.tar.gz
coredns-a08a4beec453c9c65f3b2be31859e33a973c436c.tar.zst
coredns-a08a4beec453c9c65f3b2be31859e33a973c436c.zip
mw/dnssec: warn when keys don't sign zones (#1011)
fail startup when dnssec middleware has keys configured that can't be used to sign any of the responses it should sign. More tests added, including ones that actually trigger setup failures.
Diffstat (limited to 'middleware')
-rw-r--r--middleware/dnssec/setup.go21
-rw-r--r--middleware/dnssec/setup_test.go62
2 files changed, 78 insertions, 5 deletions
diff --git a/middleware/dnssec/setup.go b/middleware/dnssec/setup.go
index 28dff4432..90425b711 100644
--- a/middleware/dnssec/setup.go
+++ b/middleware/dnssec/setup.go
@@ -1,6 +1,7 @@
package dnssec
import (
+ "fmt"
"strconv"
"strings"
@@ -75,6 +76,22 @@ func dnssecParse(c *caddy.Controller) ([]string, []*DNSKEY, int, error) {
for i := range zones {
zones[i] = middleware.Host(zones[i]).Normalize()
}
+
+ // Check if each keys owner name can actually sign the zones we want them to sign
+ for _, k := range keys {
+ kname := middleware.Name(k.K.Header().Name)
+ ok := false
+ for i := range zones {
+ if kname.Matches(zones[i]) {
+ ok = true
+ break
+ }
+ }
+ if !ok {
+ return zones, keys, capacity, fmt.Errorf("key %s (keyid: %d) can not sign any of the zones", string(kname), k.keytag)
+ }
+ }
+
return zones, keys, capacity, nil
}
@@ -87,6 +104,10 @@ func keyParse(c *caddy.Controller) ([]*DNSKEY, error) {
value := c.Val()
if value == "file" {
ks := c.RemainingArgs()
+ if len(ks) == 0 {
+ return nil, c.ArgErr()
+ }
+
for _, k := range ks {
base := k
// Kmiek.nl.+013+26205.key, handle .private or without extension: Kmiek.nl.+013+26205
diff --git a/middleware/dnssec/setup_test.go b/middleware/dnssec/setup_test.go
index 663633c88..99a71279d 100644
--- a/middleware/dnssec/setup_test.go
+++ b/middleware/dnssec/setup_test.go
@@ -1,6 +1,8 @@
package dnssec
import (
+ "io/ioutil"
+ "os"
"strings"
"testing"
@@ -8,6 +10,15 @@ import (
)
func TestSetupDnssec(t *testing.T) {
+ if err := ioutil.WriteFile("Kcluster.local.key", []byte(keypub), 0644); err != nil {
+ t.Fatalf("Failed to write pub key file: %s", err)
+ }
+ defer func() { os.Remove("Kcluster.local.key") }()
+ if err := ioutil.WriteFile("Kcluster.local.private", []byte(keypriv), 0644); err != nil {
+ t.Fatalf("Failed to write private key file: %s", err)
+ }
+ defer func() { os.Remove("Kcluster.local.private") }()
+
tests := []struct {
input string
shouldErr bool
@@ -16,19 +27,39 @@ func TestSetupDnssec(t *testing.T) {
expectedCapacity int
expectedErrContent string
}{
+ {`dnssec`, false, nil, nil, defaultCap, ""},
+ {`dnssec example.org`, false, []string{"example.org."}, nil, defaultCap, ""},
+ {`dnssec 10.0.0.0/8`, false, []string{"10.in-addr.arpa."}, nil, defaultCap, ""},
{
- `dnssec`, false, nil, nil, defaultCap, "",
+ `dnssec example.org {
+ cache_capacity 100
+ }`, false, []string{"example.org."}, nil, 100, "",
},
{
- `dnssec example.org`, false, []string{"example.org."}, nil, defaultCap, "",
+ `dnssec cluster.local {
+ key file Kcluster.local
+ }`, false, []string{"cluster.local."}, nil, defaultCap, "",
},
{
- `dnssec 10.0.0.0/8`, false, []string{"10.in-addr.arpa."}, nil, defaultCap, "",
+ `dnssec example.org cluster.local {
+ key file Kcluster.local
+ }`, false, []string{"example.org.", "cluster.local."}, nil, defaultCap, "",
},
+ // fails
{
`dnssec example.org {
- cache_capacity 100
- }`, false, []string{"example.org."}, nil, 100, "",
+ key file Kcluster.local
+ }`, true, []string{"example.org."}, nil, defaultCap, "can not sign any",
+ },
+ {
+ `dnssec example.org {
+ key
+ }`, true, []string{"example.org."}, nil, defaultCap, "argument count",
+ },
+ {
+ `dnssec example.org {
+ key file
+ }`, true, []string{"example.org."}, nil, defaultCap, "argument count",
},
}
@@ -66,3 +97,24 @@ func TestSetupDnssec(t *testing.T) {
}
}
}
+
+const keypub = `; This is a zone-signing key, keyid 45330, for cluster.local.
+; Created: 20170901060531 (Fri Sep 1 08:05:31 2017)
+; Publish: 20170901060531 (Fri Sep 1 08:05:31 2017)
+; Activate: 20170901060531 (Fri Sep 1 08:05:31 2017)
+cluster.local. IN DNSKEY 256 3 5 AwEAAcFpDv+Cb23kFJowu+VU++b2N1uEHi6Ll9H0BzLasFOdJjEEclCO q/KlD4682vOMXxJNN8ZwOyiCa7Y0TEYqSwWvhHyn3bHCwuy4I6fss4Wd 7Y9dU+6QTgJ8LimGG40Iizjc9zqoU8Q+q81vIukpYWOHioHoY7hsWBvS RSlzDJk3`
+
+const keypriv = `Private-key-format: v1.3
+Algorithm: 5 (RSASHA1)
+Modulus: wWkO/4JvbeQUmjC75VT75vY3W4QeLouX0fQHMtqwU50mMQRyUI6r8qUPjrza84xfEk03xnA7KIJrtjRMRipLBa+EfKfdscLC7Lgjp+yzhZ3tj11T7pBOAnwuKYYbjQiLONz3OqhTxD6rzW8i6SlhY4eKgehjuGxYG9JFKXMMmTc=
+PublicExponent: AQAB
+PrivateExponent: K5XyZFBPrjMVFX5gCZlyPyVDamNGrfSVXSIiMSqpS96BSdCXtmHAjCj4bZFPwkzi6+vs4tJN8p4ZifEVM0a6qwPZyENBrc2qbsweOXE6l8BaPVWFX30xvVRzGXuNtXxlBXE17zoHty5r5mRyRou1bc2HUS5otdkEjE30RiocQVk=
+Prime1: 7RRFUxaZkVNVH1DaT/SV5Sb8kABB389qLwU++argeDCVf+Wm9BBlTrsz2U6bKlfpaUmYZKtCCd+CVxqzMyuu0w==
+Prime2: 0NiY3d7Fa08IGY9L4TaFc02A721YcDNBBf95BP31qGvwnYsLFM/1xZwaEsIjohg8g+m/GpyIlvNMbK6pywIVjQ==
+Exponent1: XjXO8pype9mMmvwrNNix9DTQ6nxfsQugW30PMHGZ78kGr6NX++bEC0xS50jYWjRDGcbYGzD+9iNujSScD3qNZw==
+Exponent2: wkoOhLIfhUIj7etikyUup2Ld5WAbW15DSrotstg0NrgcQ+Q7reP96BXeJ79WeREFE09cyvv/EjdLzPv81/CbbQ==
+Coefficient: ah4LL0KLTO8kSKHK+X9Ud8grYi94QSNdbX11ge/eFcS/41QhDuZRTAFv4y0+IG+VWd+XzojLsQs+jzLe5GzINg==
+Created: 20170901060531
+Publish: 20170901060531
+Activate: 20170901060531
+`
roxy-connect-tests&id=461ae27d314561038a41982c77cb804ef7faffd7&follow=1'>Rewrite Developer Docs, Improve DX for new users, moving away from Devcontain...Gravatar dave caruso 11-149/+218 2023-04-07Fix `node:` prefix when `--platform=node`Gravatar Jarred Sumner 1-1/+9 2023-04-07Fix sortGravatar Jarred Sumner 1-6/+3 2023-04-07Workaround crashGravatar Jarred Sumner 1-3/+5 2023-04-07Bun gets a new bundler (#2312)Gravatar Jarred Sumner 113-15962/+48745 2023-04-07Fix trailing slash bug in upload scriptGravatar Ashcon Partovi 1-1/+1 2023-04-07Fix environment variables in workflowGravatar Ashcon Partovi 2-4/+4 2023-04-07Upload releases to S3Gravatar Ashcon Partovi 5-1/+171 2023-04-07Add TSConfig object type to TranspilerOptions interface (#2545)Gravatar Jake Boone 1-1/+21 2023-04-07chore: simplify prettier command and cache (#2589)Gravatar hiroki osame 1-1/+1 2023-04-07`FileBlob` -> `BunFile`, add `BunFile.lastModified` (#2581)Gravatar Colin McDonnell 4-77/+119 2023-04-07feat(tls.Server) basic support (cert, key, rejectUnauthorized, requestCert, c...Gravatar Ciro Spaciari 23-10346/+13923 2023-04-06Proactively add these to the listGravatar Jarred Sumner 1-0/+2 2023-04-06BumpGravatar Jarred Sumner 1-1/+1 2023-04-06fix: export `constants` from `fs/promises` (#2567)Gravatar dave caruso 6-6/+14 2023-04-06docs: add a section on uninstalling bun (#2560)Gravatar dave caruso 1-0/+8 2023-04-06docs(cli/bunx): add notice (#2574)Gravatar Jozef Steinhübl 1-0/+4 2023-04-06Fix `toEqual` when the second array has extra array holes (#2580)Gravatar Dylan Conway 3-18/+76 2023-04-06Add last modify field "mtime" for FileBlob (#1431) (#2491)Gravatar Zhongwei Yao 6-33/+128 2023-04-06bun-types: infer strict `Subprocess` from `Bun.spawn()` options, part 2 (#2573)Gravatar dave caruso 9-67/+165 2023-04-06cache needs to update, move to another process (#2578)Gravatar Dylan Conway 2-156/+171 2023-04-06fix(ws): export Server (#2575)Gravatar hiroki osame 1-13/+30 2023-04-06docs(CONTRIBUTING): referece development guide (#2576)Gravatar hiroki osame 1-1/+5 2023-04-05rebase (#1501)Gravatar dave caruso 2-144/+305 2023-04-05Update `typecheck` (#2572)Gravatar Colin McDonnell 3-4/+8 2023-04-05prependGravatar Jarred Sumner 1-7/+3 2023-04-05Add tests for `bun test` with preload scripts (#2566)Gravatar Jake Boone 2-1/+107 2023-04-05Disable buffering when we clear terminalGravatar Jarred Sumner 1-0/+2 2023-04-05PrettierGravatar Jarred Sumner 3-4/+4 2023-04-05fix(fetch.proxy) fix proxy authentication (#2554)Gravatar Ciro Spaciari 3-31/+186 2023-04-05fix: build warnings (#2562)Gravatar hiroki osame 4-4/+1 2023-04-05In Documentation, move --watch before the script name (#2569)Gravatar Lawlzer 1-4/+5 2023-04-05fix `deepEquals` with array holes and accessors (#2557)Gravatar Dylan Conway 2-10/+249 2023-04-05fix: modules to have null prototype (#2561)Gravatar hiroki osame 2-2/+9 2023-04-04:clock1: :clock2: :clock3:Gravatar Jarred Sumner 1-1/+1 2023-04-04Implement `import.meta.main` (#2556)Gravatar Jarred Sumner 10-8/+89 2023-04-04Dylan/fix some failing tests (#2544)Gravatar Jarred Sumner 10-29/+72 2023-04-04Add npm benchmark (#2555)Gravatar Colin McDonnell 13-1/+271 2023-04-03Use absolute paths morebun-v0.5.9Gravatar Jarred Sumner 2-6/+11 2023-04-03Fix test failureGravatar Jarred Sumner 1-15/+18