Testsuite: Automation for TLDA regen
authorJeremy Harris <jgh146exb@wizmail.org>
Wed, 26 Oct 2022 13:42:03 +0000 (14:42 +0100)
committerJeremy Harris <jgh146exb@wizmail.org>
Thu, 3 Nov 2022 22:33:03 +0000 (22:33 +0000)
test/aux-fixed/exim-ca/README.regenerate
test/aux-fixed/exim-ca/tlsa_regenerate [new file with mode: 0755]
test/aux-fixed/exim-ca/tlsa_regenerate.awk [new file with mode: 0644]
test/dnszones-src/db.example.com
test/dnszones-src/db.test.ex

index a4d7ff9c0adaa12d28efeda3db2150ad9bbec7e7..7a1ef2936acf3335d8f9cb43b80ab5c9660b85cf 100755 (executable)
@@ -2,3 +2,4 @@ WARNING for Exim Testsuite:
 
 If you change these certificates you will also need to update the TLSA records in dnszone-src/db.test.ex
 and dnszones-src/db.example.com  (the commands are next to each one).
+The script "tlsa_regenerate" automates this.
diff --git a/test/aux-fixed/exim-ca/tlsa_regenerate b/test/aux-fixed/exim-ca/tlsa_regenerate
new file mode 100755 (executable)
index 0000000..e3cc2f4
--- /dev/null
@@ -0,0 +1,8 @@
+
+cd `git rev-parse --show-toplevel`/test
+
+for f in dnszones-src/db.test.ex dnszones-src/db.example.com
+do
+  awk -f aux-fixed/exim-ca/tlsa_regenerate.awk $f >new
+  mv new $f
+done
diff --git a/test/aux-fixed/exim-ca/tlsa_regenerate.awk b/test/aux-fixed/exim-ca/tlsa_regenerate.awk
new file mode 100644 (file)
index 0000000..17802f0
--- /dev/null
@@ -0,0 +1,31 @@
+# The commands beaing read-out and run assume CWD is the test/ directory
+#
+# start collecting a command to run
+/^; TLSA_AUTOGEN$/ { active = 1; print; next; }
+#
+# keep appending to the command while there is a continuation-line marker (trailing backslash)
+active==1 && /^;/ { print;
+                   if (NF > 1)
+                     {
+                     cmdstr = cmdstr " " substr($0, 2);
+                     if (cmdstr ~ /\\$/)
+                       cmdstr = substr(cmdstr, 1, length(cmdstr)-1);
+                     else
+                       active = 2;
+                     }
+                   next;
+                 }
+#
+# apply the command to the next TLSA linem and go quiescent
+active==2 && /TLSA/ { cmdstr | getline cmdres;
+                     if (NF == 7)
+                       { printf("%s %s %s %s %s %s %s\n", $1, $2, $3, $4, $5, $6, cmdres); }
+                     else
+                       { printf("%s %s %s %s %s %s\n",    $1, $2, $3, $4, $5, cmdres); }
+                     cmdstr = "";
+                     active = 0;
+                     next;
+                   }
+#
+# just copy other lines
+{ print; }
index 4997d4d7c5d9ac0ac6a6177743fb0787263dd9a0..4c33dc180f2b1284230199d7c2552e37c84ca5f3 100644 (file)
@@ -47,6 +47,7 @@ alternatename.server1 CNAME server1
 ; a broken dane config where the name does not match in the cert, TA-mode, dane-requested
 ; NOTE: the server uses the example.net cert hence the mismatch
 ;
+; TLSA_AUTOGEN
 ; openssl x509 -in aux-fixed/exim-ca/example.net/CA/CA.pem -fingerprint -sha256 -noout \
 ;  | awk -F= '{print $2}' | tr -d : | tr '[A-F]' '[a-f]'
 ;
@@ -56,6 +57,7 @@ DNSSEC _1225._tcp.danebroken7 TLSA 2 0 1 7b7f27746dafe59e5b419ee4c5ea97f04fcf100
 
 ; the same, EE-mode
 ;
+; TLSA_AUTOGEN
 ; openssl x509 -in aux-fixed/exim-ca/example.net/server1.example.net/server1.example.net.pem -noout -pubkey \
 ; | openssl pkey -pubin -outform DER | openssl dgst -sha256 | awk '{print $2}'
 ;
index 5c7c5a5ae532ccc9fe8dfe0692216f6aef21b8a1..c2a8eeb4714fd6eb0ecadc004a4e70d17bb5c8e3 100644 (file)
@@ -435,6 +435,7 @@ AA a-aa        A V4NET.0.0.100
 
 ; full suite dns chain, sha512
 ;
+; TLSA_AUTOGEN
 ; openssl x509 -in aux-fixed/exim-ca/example.com/server1.example.com/server1.example.com.pem -noout -pubkey \
 ; | openssl pkey -pubin -outform DER \
 ; | openssl dgst -sha512 \
@@ -464,6 +465,7 @@ daneinsecchain              CNAME  dane512ee
 
 ; A-only, sha256
 ;
+; TLSA_AUTOGEN
 ; openssl x509 -in aux-fixed/exim-ca/example.com/server1.example.com/server1.example.com.pem -noout -pubkey \
 ; | openssl pkey -pubin -outform DER \
 ; | openssl dgst -sha256 \
@@ -474,6 +476,7 @@ DNSSEC _1225._tcp.dane256ee TLSA  3 1 1 9177e577d294f52da8eb206eb53e7963fb8d354b
 
 ; full MX, sha256, TA-mode
 ;
+; TLSA_AUTOGEN
 ; openssl x509 -in aux-fixed/exim-ca/example.com/CA/CA.pem -fingerprint -sha256 -noout \
 ; | awk -F= '{print $2}' | tr -d : | tr '[A-F]' '[a-f]'
 ;
@@ -489,6 +492,7 @@ DNSSEC _1225._tcp.dane256ta TLSA 2 0 1 0d41f0b28cf41f19f6f5fe116300e2cc8c6076454
 ; As it happens it is also an intermediate cert in the CA-rooted chain, as this
 ; was initially thought to be a factor.
 ;
+; TLSA_AUTOGEN
 ; openssl x509 -in aux-fixed/exim-ca/example.com/CA/Signer.pem -noout -pubkey \
 ; | openssl pkey -pubin -outform DER \
 ; | openssl dgst -sha256 \
@@ -526,17 +530,37 @@ DNSSEC _1225._tcp.danebroken2 TLSA 2 0 1 cb0fa6000000000000000000000000000000000
 
 ; a broken dane config (or under attack) where the TLSA record is correct but not DNSSEC-assured
 ; (record copied from dane256ee above)
+; TLSA_AUTOGEN
+; openssl x509 -in aux-fixed/exim-ca/example.com/server1.example.com/server1.example.com.pem -noout -pubkey \
+; | openssl pkey -pubin -outform DER \
+; | openssl dgst -sha256 \
+; | awk '{print $2}'
 ; 3 for dane-requested, 4 for dane-required
 DNSSEC danebroken3          A       127.0.0.1
 _1225._tcp.danebroken3 TLSA 2 0 1 9177e577d294f52da8eb206eb53e7963fb8d354bb4a1a62aa8318101dbc11e46
+; TLSA_AUTOGEN
+; openssl x509 -in aux-fixed/exim-ca/example.com/server1.example.com/server1.example.com.pem -noout -pubkey \
+; | openssl pkey -pubin -outform DER \
+; | openssl dgst -sha256 \
+; | awk '{print $2}'
 DNSSEC danebroken4          A       HOSTIPV4
 _1225._tcp.danebroken4 TLSA 2 0 1 9177e577d294f52da8eb206eb53e7963fb8d354bb4a1a62aa8318101dbc11e46
 
 ; a broken dane config (or under attack) where the address record is correct but not DNSSEC-assured
 ; (TLSA record copied from dane256ee above)
 ; 5 for dane-requested, 6 for dane-required
+; TLSA_AUTOGEN
+; openssl x509 -in aux-fixed/exim-ca/example.com/server1.example.com/server1.example.com.pem -noout -pubkey \
+; | openssl pkey -pubin -outform DER \
+; | openssl dgst -sha256 \
+; | awk '{print $2}'
 danebroken5          A       127.0.0.1
 DNSSEC _1225._tcp.danebroken5 TLSA 2 0 1 9177e577d294f52da8eb206eb53e7963fb8d354bb4a1a62aa8318101dbc11e46
+; TLSA_AUTOGEN
+; openssl x509 -in aux-fixed/exim-ca/example.com/server1.example.com/server1.example.com.pem -noout -pubkey \
+; | openssl pkey -pubin -outform DER \
+; | openssl dgst -sha256 \
+; | awk '{print $2}'
 danebroken6          A       HOSTIPV4
 DNSSEC _1225._tcp.danebroken6 TLSA 2 0 1 9177e577d294f52da8eb206eb53e7963fb8d354bb4a1a62aa8318101dbc11e46