mirror of
https://github.com/NLnetLabs/unbound.git
synced 2025-12-20 23:00:56 -05:00
rfc5011 and algorithm rollover
git-svn-id: file:///svn/unbound/trunk@1845 be551aaa-1e26-0410-a405-d3ace91eadb9
This commit is contained in:
parent
19ab8e1429
commit
9dc9f0a8e8
3 changed files with 347 additions and 24 deletions
|
|
@ -1,3 +1,7 @@
|
||||||
|
22 September 2009: Wouter
|
||||||
|
- autotrust test with algorithm rollover, new ordering of checks
|
||||||
|
assists in orderly rollover.
|
||||||
|
|
||||||
18 September 2009: Wouter
|
18 September 2009: Wouter
|
||||||
- autotrust tests, fix trustpoint timer deletion code.
|
- autotrust tests, fix trustpoint timer deletion code.
|
||||||
fix count of valid anchors during missing remove.
|
fix count of valid anchors during missing remove.
|
||||||
|
|
|
||||||
314
testdata/autotrust_rollalgo.rpl
vendored
Normal file
314
testdata/autotrust_rollalgo.rpl
vendored
Normal file
|
|
@ -0,0 +1,314 @@
|
||||||
|
; config options
|
||||||
|
server:
|
||||||
|
target-fetch-policy: "0 0 0 0 0"
|
||||||
|
log-time-ascii: yes
|
||||||
|
stub-zone:
|
||||||
|
name: "."
|
||||||
|
stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
|
||||||
|
; initial content (say from dig example.com DNSKEY > example.com.key)
|
||||||
|
AUTOTRUST_FILE example.com
|
||||||
|
example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b}
|
||||||
|
example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}
|
||||||
|
AUTOTRUST_END
|
||||||
|
CONFIG_END
|
||||||
|
|
||||||
|
SCENARIO_BEGIN Test autotrust with algorithm rollover
|
||||||
|
; from RSASHA1(5) to DSASHA1(3)
|
||||||
|
; Note, when both algorithms are present, the zone must be double-signed.
|
||||||
|
; with a ZSK for RSASHA1(5) and a ZSK for DSASHA1(3).
|
||||||
|
|
||||||
|
; K-ROOT
|
||||||
|
RANGE_BEGIN 0 100
|
||||||
|
ADDRESS 193.0.14.129
|
||||||
|
ENTRY_BEGIN
|
||||||
|
MATCH opcode qname qtype
|
||||||
|
ADJUST copy_id copy_query
|
||||||
|
REPLY QR AA
|
||||||
|
SECTION QUESTION
|
||||||
|
. IN NS
|
||||||
|
SECTION ANSWER
|
||||||
|
. IN NS k.root-servers.net.
|
||||||
|
SECTION ADDITIONAL
|
||||||
|
k.root-servers.net IN A 193.0.14.129
|
||||||
|
ENTRY_END
|
||||||
|
|
||||||
|
ENTRY_BEGIN
|
||||||
|
MATCH opcode subdomain
|
||||||
|
ADJUST copy_id copy_query
|
||||||
|
REPLY QR
|
||||||
|
SECTION QUESTION
|
||||||
|
com. IN NS
|
||||||
|
SECTION AUTHORITY
|
||||||
|
com. IN NS a.gtld-servers.net.
|
||||||
|
SECTION ADDITIONAL
|
||||||
|
a.gtld-servers.net. IN A 192.5.6.30
|
||||||
|
ENTRY_END
|
||||||
|
RANGE_END
|
||||||
|
|
||||||
|
; a.gtld-servers.net.
|
||||||
|
RANGE_BEGIN 0 100
|
||||||
|
ADDRESS 192.5.6.30
|
||||||
|
ENTRY_BEGIN
|
||||||
|
MATCH opcode subdomain
|
||||||
|
ADJUST copy_id copy_query
|
||||||
|
REPLY QR
|
||||||
|
SECTION QUESTION
|
||||||
|
example.com. IN NS
|
||||||
|
SECTION AUTHORITY
|
||||||
|
example.com. IN NS ns.example.com.
|
||||||
|
SECTION ADDITIONAL
|
||||||
|
ns.example.com. IN A 1.2.3.4
|
||||||
|
ENTRY_END
|
||||||
|
RANGE_END
|
||||||
|
|
||||||
|
; ns.example.com. KSK 55582
|
||||||
|
RANGE_BEGIN 0 10
|
||||||
|
ADDRESS 1.2.3.4
|
||||||
|
ENTRY_BEGIN
|
||||||
|
MATCH opcode qname qtype
|
||||||
|
ADJUST copy_id
|
||||||
|
REPLY QR AA
|
||||||
|
SECTION QUESTION
|
||||||
|
www.example.com. IN A
|
||||||
|
SECTION ANSWER
|
||||||
|
www.example.com. 3600 IN A 10.20.30.40
|
||||||
|
www.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. pYGxVLsWUvOp1wSf0iwPap+JnECfC5GAm1lRqy3YEqecNGld7U7x/5Imo3CerbdZrVptUQs2oH0lcjwYJXMnsw== ;{id = 30899}
|
||||||
|
SECTION AUTHORITY
|
||||||
|
example.com. 3600 IN NS ns.example.com.
|
||||||
|
example.com. 3600 IN RRSIG NS 5 2 3600 20090924111500 20090821111500 30899 example.com. J5wxRq0jgwQL6yy530kvo9cHqNAUHV8IF4dvaYZL0bNraO2Oe6dVXqlJl4+cxNHI2TMsstwFPr2Zz8tv6Az2mQ== ;{id = 30899}
|
||||||
|
SECTION ADDITIONAL
|
||||||
|
ns.example.com. 3600 IN A 1.2.3.4
|
||||||
|
ns.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. JsXbS18oyc0zkVaOWGSFdIQuOsZKflT0GraT9afDPoWLCgH4ApF7jNgfJV7Pqy1sTBRajME5IUAhpANwGBuW4A== ;{id = 30899}
|
||||||
|
ENTRY_END
|
||||||
|
|
||||||
|
ENTRY_BEGIN
|
||||||
|
MATCH opcode qname qtype
|
||||||
|
ADJUST copy_id
|
||||||
|
REPLY QR AA
|
||||||
|
SECTION QUESTION
|
||||||
|
example.com. IN DNSKEY
|
||||||
|
SECTION ANSWER
|
||||||
|
; KSK 1
|
||||||
|
example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b}
|
||||||
|
; ZSK 1
|
||||||
|
example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}
|
||||||
|
; signatures
|
||||||
|
example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 30899 example.com. b/HK231jIQLX8IhlZfup3r0yhpXaasbPE6LzxoEVVvWaTZWcLmeV8jDIcn0qO7Yvs7bIJN20lwVAV0GcHH3hWQ== ;{id = 30899}
|
||||||
|
example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 55582 example.com. PCHme1QLoULxqjhg5tMlpR0qJlBfstEUVq18TtNoKQe9le1YhJ9caheXcTWoK+boLhXxg9u6Yyvq8FboQh0OjA== ;{id = 55582}
|
||||||
|
ENTRY_END
|
||||||
|
RANGE_END
|
||||||
|
|
||||||
|
; ns.example.com. KSK 55582 and DSAkey 02855
|
||||||
|
RANGE_BEGIN 11 40
|
||||||
|
ADDRESS 1.2.3.4
|
||||||
|
ENTRY_BEGIN
|
||||||
|
MATCH opcode qname qtype
|
||||||
|
ADJUST copy_id
|
||||||
|
REPLY QR AA
|
||||||
|
SECTION QUESTION
|
||||||
|
example.com. IN DNSKEY
|
||||||
|
SECTION ANSWER
|
||||||
|
; KSK 1
|
||||||
|
example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b}
|
||||||
|
; KSK 2
|
||||||
|
example.com. 10800 IN DNSKEY 257 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2855 (ksk), size = 1688b}
|
||||||
|
; and two ZSKs (omitted) for both algorithms.
|
||||||
|
; signatures
|
||||||
|
example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 55582 example.com. aCZVA+PLXxm15p46499FCPHvhR/MSpMSRTZT6PoUy2e+wdk7bszLdsEmfWym81UN2Xx1JOj5104c43c3QnvjNQ== ;{id = 55582}
|
||||||
|
example.com. 10800 IN RRSIG DNSKEY 3 2 10800 20091024111500 20090921111500 2855 example.com. AKdhmjqEbe0STsFNq/UxOidElaWHWCy2hSPQ7oN0Tsq56w6Hsk72PpM= ;{id = 2855}
|
||||||
|
ENTRY_END
|
||||||
|
RANGE_END
|
||||||
|
|
||||||
|
; ns.example.com. KSK 55582 and 02855 (signatures updated)
|
||||||
|
RANGE_BEGIN 41 50
|
||||||
|
ADDRESS 1.2.3.4
|
||||||
|
ENTRY_BEGIN
|
||||||
|
MATCH opcode qname qtype
|
||||||
|
ADJUST copy_id
|
||||||
|
REPLY QR AA
|
||||||
|
SECTION QUESTION
|
||||||
|
example.com. IN DNSKEY
|
||||||
|
SECTION ANSWER
|
||||||
|
; KSK 1
|
||||||
|
example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b}
|
||||||
|
; KSK 2
|
||||||
|
example.com. 10800 IN DNSKEY 257 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2855 (ksk), size = 1688b}
|
||||||
|
; signatures
|
||||||
|
example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091124111500 20091018111500 55582 example.com. vpLMiMW+2uxqE1+OpMWipQdyGJ/pOQ63tIhup50WFejPysvlZRZ27XOoB4GVRyCwK9Bv46PrsQf3IsjHZf6jvw== ;{id = 55582}
|
||||||
|
example.com. 10800 IN RRSIG DNSKEY 3 2 10800 20091124111500 20091018111500 2855 example.com. ABJyZ97htJyBFk5wsKml3YAz81FpXkQKdJeC++fB5ysvl3i+zKJFzTo= ;{id = 2855}
|
||||||
|
ENTRY_END
|
||||||
|
RANGE_END
|
||||||
|
|
||||||
|
; ns.example.com. KSK 55582-REVOKED and 02855
|
||||||
|
RANGE_BEGIN 51 60
|
||||||
|
ADDRESS 1.2.3.4
|
||||||
|
ENTRY_BEGIN
|
||||||
|
MATCH opcode qname qtype
|
||||||
|
ADJUST copy_id
|
||||||
|
REPLY QR AA
|
||||||
|
SECTION QUESTION
|
||||||
|
example.com. IN DNSKEY
|
||||||
|
SECTION ANSWER
|
||||||
|
; KSK 1
|
||||||
|
example.com. 10800 IN DNSKEY 385 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55710 (ksk), size = 512b}
|
||||||
|
; KSK 2
|
||||||
|
example.com. 10800 IN DNSKEY 257 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2855 (ksk), size = 1688b}
|
||||||
|
; signatures
|
||||||
|
example.com. 10800 IN RRSIG DNSKEY 3 2 10800 20091224111500 20091118111500 2855 example.com. AFAbqLJsTDBfwAipE84ETdFTfzKHs7pzdyzjTKHR2VXygGvHY4QsBaA= ;{id = 2855}
|
||||||
|
example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091224111500 20091118111500 55710 example.com. DqR6BRE9G+kEb+ZorUr3yKKUsCF2TN+vrsNBaLfpHR+Vgv0RgeRCkXki+/FY9b4NEhXkg719dlLSASg4DmyV7g== ;{id = 55710}
|
||||||
|
; wrong keytag: 55582
|
||||||
|
ENTRY_END
|
||||||
|
RANGE_END
|
||||||
|
|
||||||
|
; ns.example.com. KSK 02855
|
||||||
|
RANGE_BEGIN 61 70
|
||||||
|
ADDRESS 1.2.3.4
|
||||||
|
ENTRY_BEGIN
|
||||||
|
MATCH opcode qname qtype
|
||||||
|
ADJUST copy_id
|
||||||
|
REPLY QR AA
|
||||||
|
SECTION QUESTION
|
||||||
|
example.com. IN DNSKEY
|
||||||
|
SECTION ANSWER
|
||||||
|
; KSK 2
|
||||||
|
example.com. 10800 IN DNSKEY 257 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2855 (ksk), size = 1688b}
|
||||||
|
; signatures
|
||||||
|
example.com. 10800 IN RRSIG DNSKEY 3 2 10800 20101224111500 20101118111500 2855 example.com. AJv9ujre3iUykHlhJpLYPqsXq12lmQp+AHUPSPpE5zuUhXAPjbnbewk= ;{id = 2855}
|
||||||
|
ENTRY_END
|
||||||
|
RANGE_END
|
||||||
|
|
||||||
|
; set date/time to Aug 24 09:46:40 (2009).
|
||||||
|
STEP 5 TIME_PASSES ELAPSE 1251100000
|
||||||
|
STEP 6 TRAFFIC ; the initial probe
|
||||||
|
STEP 7 ASSIGN t0 = ${time}
|
||||||
|
STEP 8 ASSIGN probe0 = ${range 4800 ${timeout} 5400}
|
||||||
|
|
||||||
|
; the auto probing should have been done now.
|
||||||
|
STEP 10 CHECK_AUTOTRUST example.com
|
||||||
|
FILE_BEGIN
|
||||||
|
; autotrust trust anchor file
|
||||||
|
;;id: example.com. 1
|
||||||
|
;;last_queried: ${$t0} ;;${ctime $t0}
|
||||||
|
;;last_success: ${$t0} ;;${ctime $t0}
|
||||||
|
;;next_probe_time: ${$t0 + $probe0} ;;${ctime $t0 + $probe0}
|
||||||
|
;;query_failed: 0
|
||||||
|
;;query_interval: 5400
|
||||||
|
;;retry_time: 3600
|
||||||
|
example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0}
|
||||||
|
FILE_END
|
||||||
|
|
||||||
|
; key prepublished. First poll. 30 days later
|
||||||
|
STEP 11 TIME_PASSES EVAL ${30*24*3600}
|
||||||
|
STEP 12 TRAFFIC
|
||||||
|
STEP 13 ASSIGN t1 = ${time}
|
||||||
|
STEP 14 ASSIGN probe1 = ${range 4800 ${timeout} 5400}
|
||||||
|
STEP 15 CHECK_AUTOTRUST example.com
|
||||||
|
FILE_BEGIN
|
||||||
|
; autotrust trust anchor file
|
||||||
|
;;id: example.com. 1
|
||||||
|
;;last_queried: ${$t1} ;;${ctime $t1}
|
||||||
|
;;last_success: ${$t1} ;;${ctime $t1}
|
||||||
|
;;next_probe_time: ${$t1 + $probe1} ;;${ctime $t1 + $probe1}
|
||||||
|
;;query_failed: 0
|
||||||
|
;;query_interval: 5400
|
||||||
|
;;retry_time: 3600
|
||||||
|
example.com. 10800 IN DNSKEY 257 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2855 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=1 ;;lastchange=${$t1} ;;${ctime $t1}
|
||||||
|
example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0}
|
||||||
|
FILE_END
|
||||||
|
|
||||||
|
; Second poll. 10 days later
|
||||||
|
STEP 21 TIME_PASSES EVAL ${10*24*3600}
|
||||||
|
STEP 22 TRAFFIC
|
||||||
|
STEP 23 ASSIGN t2 = ${time}
|
||||||
|
STEP 24 ASSIGN probe2 = ${range 4800 ${timeout} 5400}
|
||||||
|
STEP 25 CHECK_AUTOTRUST example.com
|
||||||
|
FILE_BEGIN
|
||||||
|
; autotrust trust anchor file
|
||||||
|
;;id: example.com. 1
|
||||||
|
;;last_queried: ${$t2} ;;${ctime $t2}
|
||||||
|
;;last_success: ${$t2} ;;${ctime $t2}
|
||||||
|
;;next_probe_time: ${$t2 + $probe2} ;;${ctime $t2 + $probe2}
|
||||||
|
;;query_failed: 0
|
||||||
|
;;query_interval: 5400
|
||||||
|
;;retry_time: 3600
|
||||||
|
example.com. 10800 IN DNSKEY 257 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2855 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=2 ;;lastchange=${$t1} ;;${ctime $t1}
|
||||||
|
example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0}
|
||||||
|
FILE_END
|
||||||
|
|
||||||
|
; Third poll. 10 days later
|
||||||
|
STEP 31 TIME_PASSES EVAL ${10*24*3600}
|
||||||
|
STEP 32 TRAFFIC
|
||||||
|
STEP 33 ASSIGN t3 = ${time}
|
||||||
|
STEP 34 ASSIGN probe3 = ${range 4800 ${timeout} 5400}
|
||||||
|
STEP 35 CHECK_AUTOTRUST example.com
|
||||||
|
FILE_BEGIN
|
||||||
|
; autotrust trust anchor file
|
||||||
|
;;id: example.com. 1
|
||||||
|
;;last_queried: ${$t3} ;;${ctime $t3}
|
||||||
|
;;last_success: ${$t3} ;;${ctime $t3}
|
||||||
|
;;next_probe_time: ${$t3 + $probe3} ;;${ctime $t3 + $probe3}
|
||||||
|
;;query_failed: 0
|
||||||
|
;;query_interval: 5400
|
||||||
|
;;retry_time: 3600
|
||||||
|
example.com. 10800 IN DNSKEY 257 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2855 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=3 ;;lastchange=${$t1} ;;${ctime $t1}
|
||||||
|
example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0}
|
||||||
|
FILE_END
|
||||||
|
|
||||||
|
; 11 days later, hold down has lapsed.
|
||||||
|
STEP 41 TIME_PASSES EVAL ${11*24*3600}
|
||||||
|
STEP 42 TRAFFIC
|
||||||
|
STEP 43 ASSIGN t4 = ${time}
|
||||||
|
STEP 44 ASSIGN probe4 = ${range 4800 ${timeout} 5400}
|
||||||
|
STEP 45 CHECK_AUTOTRUST example.com
|
||||||
|
FILE_BEGIN
|
||||||
|
; autotrust trust anchor file
|
||||||
|
;;id: example.com. 1
|
||||||
|
;;last_queried: ${$t4} ;;${ctime $t4}
|
||||||
|
;;last_success: ${$t4} ;;${ctime $t4}
|
||||||
|
;;next_probe_time: ${$t4 + $probe4} ;;${ctime $t4 + $probe4}
|
||||||
|
;;query_failed: 0
|
||||||
|
;;query_interval: 5400
|
||||||
|
;;retry_time: 3600
|
||||||
|
example.com. 10800 IN DNSKEY 257 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2855 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t4} ;;${ctime $t4}
|
||||||
|
example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0}
|
||||||
|
FILE_END
|
||||||
|
|
||||||
|
; 30 days later, the old key is revoked
|
||||||
|
STEP 51 TIME_PASSES EVAL ${30*24*3600}
|
||||||
|
STEP 52 TRAFFIC
|
||||||
|
STEP 53 ASSIGN t5 = ${time}
|
||||||
|
STEP 54 ASSIGN probe5 = ${range 4800 ${timeout} 5400}
|
||||||
|
STEP 55 CHECK_AUTOTRUST example.com
|
||||||
|
FILE_BEGIN
|
||||||
|
; autotrust trust anchor file
|
||||||
|
;;id: example.com. 1
|
||||||
|
;;last_queried: ${$t5} ;;${ctime $t5}
|
||||||
|
;;last_success: ${$t5} ;;${ctime $t5}
|
||||||
|
;;next_probe_time: ${$t5 + $probe5} ;;${ctime $t5 + $probe5}
|
||||||
|
;;query_failed: 0
|
||||||
|
;;query_interval: 5400
|
||||||
|
;;retry_time: 3600
|
||||||
|
example.com. 10800 IN DNSKEY 257 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2855 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t4} ;;${ctime $t4}
|
||||||
|
example.com. 10800 IN DNSKEY 385 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55710 (ksk), size = 512b} ;;state=4 [ REVOKED ] ;;count=0 ;;lastchange=${$t5} ;;${ctime $t5}
|
||||||
|
FILE_END
|
||||||
|
|
||||||
|
; 370 days later, the old key is removed from storage
|
||||||
|
STEP 61 TIME_PASSES EVAL ${370*24*3600}
|
||||||
|
STEP 62 TRAFFIC
|
||||||
|
STEP 63 ASSIGN t6 = ${time}
|
||||||
|
STEP 64 ASSIGN probe6 = ${range 4800 ${timeout} 5400}
|
||||||
|
STEP 65 CHECK_AUTOTRUST example.com
|
||||||
|
FILE_BEGIN
|
||||||
|
; autotrust trust anchor file
|
||||||
|
;;id: example.com. 1
|
||||||
|
;;last_queried: ${$t6} ;;${ctime $t6}
|
||||||
|
;;last_success: ${$t6} ;;${ctime $t6}
|
||||||
|
;;next_probe_time: ${$t6 + $probe6} ;;${ctime $t6 + $probe6}
|
||||||
|
;;query_failed: 0
|
||||||
|
;;query_interval: 5400
|
||||||
|
;;retry_time: 3600
|
||||||
|
example.com. 10800 IN DNSKEY 257 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2855 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t4} ;;${ctime $t4}
|
||||||
|
FILE_END
|
||||||
|
|
||||||
|
|
||||||
|
SCENARIO_END
|
||||||
|
|
@ -1183,9 +1183,8 @@ check_contains_revoked(struct module_env* env, struct val_env* ve,
|
||||||
|
|
||||||
/** Set update events */
|
/** Set update events */
|
||||||
static int
|
static int
|
||||||
update_events(struct module_env* env, struct val_env* ve,
|
update_events(struct module_env* env, struct trust_anchor* tp,
|
||||||
struct trust_anchor* tp, struct ub_packed_rrset_key* dnskey_rrset,
|
struct ub_packed_rrset_key* dnskey_rrset, int* changed)
|
||||||
int* changed)
|
|
||||||
{
|
{
|
||||||
ldns_rr_list* r = packed_rrset_to_rr_list(dnskey_rrset,
|
ldns_rr_list* r = packed_rrset_to_rr_list(dnskey_rrset,
|
||||||
env->scratch_buffer);
|
env->scratch_buffer);
|
||||||
|
|
@ -1200,6 +1199,11 @@ update_events(struct module_env* env, struct val_env* ve,
|
||||||
continue;
|
continue;
|
||||||
if(!rr_is_dnskey_sep(rr))
|
if(!rr_is_dnskey_sep(rr))
|
||||||
continue;
|
continue;
|
||||||
|
if(rr_is_dnskey_revoked(rr)) {
|
||||||
|
/* self-signed revoked keys already detected before,
|
||||||
|
* other revoked keys are not 'added' again */
|
||||||
|
continue;
|
||||||
|
}
|
||||||
/* is it new? if revocation bit set, find the unrevoked key */
|
/* is it new? if revocation bit set, find the unrevoked key */
|
||||||
if(!find_key(tp, rr, &ta)) {
|
if(!find_key(tp, rr, &ta)) {
|
||||||
ldns_rr_list_deep_free(r); /* malloc fail in compare*/
|
ldns_rr_list_deep_free(r); /* malloc fail in compare*/
|
||||||
|
|
@ -1213,20 +1217,9 @@ update_events(struct module_env* env, struct val_env* ve,
|
||||||
ldns_rr_list_deep_free(r);
|
ldns_rr_list_deep_free(r);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if(rr_is_dnskey_revoked(rr) &&
|
|
||||||
rr_is_selfsigned_revoked(env, ve, dnskey_rrset, i)) {
|
|
||||||
/* checked if there is an rrsig signed by this key. */
|
|
||||||
log_assert(dnskey_calc_keytag(dnskey_rrset, i) ==
|
|
||||||
ldns_calc_keytag(rr));
|
|
||||||
verbose_key(ta, VERB_ALGO, "is self-signed revoked");
|
|
||||||
if(!ta->revoked)
|
|
||||||
*changed = 1;
|
|
||||||
seen_revoked_trustanchor(ta, 1);
|
|
||||||
} else {
|
|
||||||
seen_trustanchor(ta, 1);
|
seen_trustanchor(ta, 1);
|
||||||
verbose_key(ta, VERB_ALGO, "in DNS response");
|
verbose_key(ta, VERB_ALGO, "in DNS response");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
set_tp_times(tp, min_expiry(env, r), key_ttl(dnskey_rrset), changed);
|
set_tp_times(tp, min_expiry(env, r), key_ttl(dnskey_rrset), changed);
|
||||||
ldns_rr_list_deep_free(r);
|
ldns_rr_list_deep_free(r);
|
||||||
return 1;
|
return 1;
|
||||||
|
|
@ -1659,17 +1652,34 @@ int autr_process_prime(struct module_env* env, struct val_env* ve,
|
||||||
return 1; /* unchanged */
|
return 1; /* unchanged */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* did we get any data? */
|
||||||
if(!dnskey_rrset) {
|
if(!dnskey_rrset) {
|
||||||
verbose(VERB_ALGO, "autotrust: no dnskey rrset");
|
verbose(VERB_ALGO, "autotrust: no dnskey rrset");
|
||||||
tp->autr->query_failed += 1;
|
tp->autr->query_failed += 1;
|
||||||
autr_write_file(env, tp);
|
autr_write_file(env, tp);
|
||||||
return 1; /* trust point exists */
|
return 1; /* trust point exists */
|
||||||
}
|
}
|
||||||
|
/* check for revoked keys to remove immediately */
|
||||||
|
check_contains_revoked(env, ve, tp, dnskey_rrset, &changed);
|
||||||
|
if(changed) {
|
||||||
|
if(!autr_assemble(tp)) {
|
||||||
|
log_err("malloc failure assembling autotrust keys");
|
||||||
|
return 1; /* unchanged */
|
||||||
|
}
|
||||||
|
if(!tp->ds_rrset && !tp->dnskey_rrset) {
|
||||||
|
/* no more keys, all are revoked */
|
||||||
|
/* this is a success! */
|
||||||
|
tp->autr->last_success = *env->now;
|
||||||
|
tp->autr->revoked = 1;
|
||||||
|
autr_write_file(env, tp);
|
||||||
|
autr_tp_remove(env, tp);
|
||||||
|
return 0; /* trust point removed */
|
||||||
|
}
|
||||||
|
}
|
||||||
/* verify the dnskey rrset and see if it is valid. */
|
/* verify the dnskey rrset and see if it is valid. */
|
||||||
if(!verify_dnskey(env, ve, tp, dnskey_rrset)) {
|
if(!verify_dnskey(env, ve, tp, dnskey_rrset)) {
|
||||||
verbose(VERB_ALGO, "autotrust: dnskey did not verify.");
|
verbose(VERB_ALGO, "autotrust: dnskey did not verify.");
|
||||||
tp->autr->query_failed += 1;
|
tp->autr->query_failed += 1;
|
||||||
check_contains_revoked(env, ve, tp, dnskey_rrset, &changed);
|
|
||||||
autr_write_file(env, tp);
|
autr_write_file(env, tp);
|
||||||
if(changed) {
|
if(changed) {
|
||||||
verbose(VERB_ALGO, "autotrust: changed, reassemble");
|
verbose(VERB_ALGO, "autotrust: changed, reassemble");
|
||||||
|
|
@ -1677,12 +1687,6 @@ int autr_process_prime(struct module_env* env, struct val_env* ve,
|
||||||
log_err("malloc failure assemble keys");
|
log_err("malloc failure assemble keys");
|
||||||
return 1; /* unchanged */
|
return 1; /* unchanged */
|
||||||
}
|
}
|
||||||
if(!tp->ds_rrset && !tp->dnskey_rrset) {
|
|
||||||
/* no more keys, all are revoked */
|
|
||||||
tp->autr->revoked = 1;
|
|
||||||
autr_tp_remove(env, tp);
|
|
||||||
return 0; /* trust point removed */
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return 1; /* trust point exists */
|
return 1; /* trust point exists */
|
||||||
}
|
}
|
||||||
|
|
@ -1696,7 +1700,7 @@ int autr_process_prime(struct module_env* env, struct val_env* ve,
|
||||||
* Set trustpoint query_interval and retry_time.
|
* Set trustpoint query_interval and retry_time.
|
||||||
* - find minimum rrsig expiration interval
|
* - find minimum rrsig expiration interval
|
||||||
*/
|
*/
|
||||||
if(!update_events(env, ve, tp, dnskey_rrset, &changed)) {
|
if(!update_events(env, tp, dnskey_rrset, &changed)) {
|
||||||
log_err("malloc failure in autotrust update_events. "
|
log_err("malloc failure in autotrust update_events. "
|
||||||
"trust point unchanged.");
|
"trust point unchanged.");
|
||||||
return 1; /* trust point unchanged, so exists */
|
return 1; /* trust point unchanged, so exists */
|
||||||
|
|
@ -1724,6 +1728,7 @@ int autr_process_prime(struct module_env* env, struct val_env* ve,
|
||||||
if(!tp->ds_rrset && !tp->dnskey_rrset) {
|
if(!tp->ds_rrset && !tp->dnskey_rrset) {
|
||||||
/* no more keys, all are revoked */
|
/* no more keys, all are revoked */
|
||||||
tp->autr->revoked = 1;
|
tp->autr->revoked = 1;
|
||||||
|
autr_write_file(env, tp);
|
||||||
autr_tp_remove(env, tp);
|
autr_tp_remove(env, tp);
|
||||||
return 0; /* trust point removed */
|
return 0; /* trust point removed */
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue