Hi, I have been trying to run the ipv6ready IKEv2_Self_Test against strongSwan on SLES 11 SP1, as part of our preparation for the USGv6 certification. I have encountered numerous problems. Below, I am listing a few examples where I manged to pinpoint the problem.
The problem always turned out to be in the IKEv2 test scripts, not strongSwan. Unfortunately, the IKEv2_Self_Test is part of the USGv6 test specifications: http://w3.antd.nist.gov/usgv6/test-specifications.html http://w3.antd.nist.gov/usgv6/TSTs/IKEv2_v1.0_C.html The current (and also mandated by USGv6) version of the test tool is 1.0.3. Since then, a new (v1.1.0) ipv6ready IKEv2 test specification has been published: http://www.ipv6ready.org/docs/Phase2_IKEv2_Conformance_Latest.pdf However, the test tool is not yet (publicly?) available. The first problem I actually debugged turned to be an issue already known to the ipv6ready guys. The tests get confused by strongSwan obeying: "initiator SHOULD include as the first traffic selector in each of TSi and TSr a very specific traffic selector including the addresses in the packet triggering the request." [RFC 4306]. See http://www.tahi.org/users/mail-list/201005.month/1691.html strongSwan does this sice commit a13c013b. I reverted that for further testing. The new v1.1.0 test specification has removed many of the test cases that I see failing in the 1.0.3 version (good! the ones I looked into fail for totally bogus reasons). I list all the failures below, the tests removed in v1.1.0 are marked with an asterisk: 12 * Test IKEv2.EN.I.1.1.3.4: Close Connection when receiving INITIAL_CONTACT 13 * Test IKEv2.EN.I.1.1.3.5: Sending Liveness check 14 Test IKEv2.EN.I.1.1.3.6: Sending Delete Payload for IKE_SA 15 * Test IKEv2.EN.I.1.1.3.7: Sending Delete Payload for CHILD_SA 16 * Test IKEv2.EN.I.1.1.3.8: Sending Liveness check with unprotected messages 17 Test IKEv2.EN.I.1.1.4.1 Part A: Invalid payload type 1 18 Test IKEv2.EN.I.1.1.4.1 Part B: Invalid payload type 32 19 Test IKEv2.EN.I.1.1.4.1 Part C: Invalid payload type 49 20 Test IKEv2.EN.I.1.1.4.1 Part D: Invalid payload type 255 21 Test IKEv2.EN.I.1.1.4.2 Part A: Invalid payload type 1 22 Test IKEv2.EN.I.1.1.4.2 Part B: Invalid payload type 32 23 Test IKEv2.EN.I.1.1.4.2 Part C: Invalid payload type 49 24 Test IKEv2.EN.I.1.1.4.2 Part D: Invalid payload type 255 26 Test IKEv2.EN.I.1.1.5.2: Interaction of COOKIE and INVALID_KE_PAYLOAD 27 Test IKEv2.EN.I.1.1.5.3: Interaction of COOKIE and INVALID_KE_PAYLOAD with unoptimized Responder 28 Test IKEv2.EN.I.1.1.6.1 Part A: Encryption Algorithm ENCR_AES_CBC 29 * Test IKEv2.EN.I.1.1.6.1 Part B: Encryption Algorithm ENCR_AES_CTR 30 Test IKEv2.EN.I.1.1.6.1 Part C: Pseudo-random Function PRF_AES128_XCBC 31 Test IKEv2.EN.I.1.1.6.1 Part D: Integrity Algorithm AUTH_AES_XCBC_96 32 Test IKEv2.EN.I.1.1.6.1 Part E: D-H Group Group 14 33 Test IKEv2.EN.I.1.1.6.2 Part A: Encryption Algorithm ENCR_AES_CBC 34 Test IKEv2.EN.I.1.1.6.2 Part B: Encryption Algorithm ENCR_AES_CTR 35 Test IKEv2.EN.I.1.1.6.2 Part C: Encryption Algorithm ENCR_NULL 36 Test IKEv2.EN.I.1.1.6.2 Part D: Integrity Algorithm AUTH_AES_XCBC_96 37 Test IKEv2.EN.I.1.1.6.2 Part E: Integrity Algorithm NONE 38 Test IKEv2.EN.I.1.1.6.2 Part F: Extended Sequence Numbers 39 Test IKEv2.EN.I.1.1.6.3 Part A: Multiple Encryption Algorithms 40 Test IKEv2.EN.I.1.1.6.3 Part B: Multiple Pseudo-random Functions 41 Test IKEv2.EN.I.1.1.6.3 Part C: Multiple Integrity Algorithms 42 Test IKEv2.EN.I.1.1.6.3 Part D: Multiple D-H Groups 44 Test IKEv2.EN.I.1.1.6.5 Part A: Multiple Encryption Algorithms 45 Test IKEv2.EN.I.1.1.6.5 Part B: Multiple Integrity Algorithms 46 Test IKEv2.EN.I.1.1.6.5 Part C: Multiple Extended Sequence Numbers 47 Test IKEv2.EN.I.1.1.6.6: Sending Multiple Proposals 48 Test IKEv2.EN.I.1.1.6.7: Receipt of INVALID_KE_PAYLOAD 49 * Test IKEv2.EN.I.1.1.6.8: Receipt of NO_PROPOSAL_CHOSEN 50 Test IKEv2.EN.I.1.1.6.9: Response with inconsistent SA Proposal for IKE_SA 52 Test IKEv2.EN.I.1.1.6.11 Part A: Receiving IKE_SA_INIT response with INVALID_KE_PAYLOAD 53 Test IKEv2.EN.I.1.1.6.11 Part B: Receiving IKE_SA_INIT response with INVALID_KE_PAYLOAD 54 Test IKEv2.EN.I.1.1.6.12: Creating an IKE_SA without a CHILD_SA 55 Test IKEv2.EN.I.1.1.7.1: Narrowing the range of members of the set of traffic selectors 56 * Test IKEv2.EN.I.1.1.8.1 Part A: INVALID_IKE_SPI Different IKE_SA Initiator's SPI 57 * Test IKEv2.EN.I.1.1.8.1 Part B: INVALID_IKE_SPI Different IKE_SA Responder's SPI 58 * Test IKEv2.EN.I.1.1.8.2: INVALID_SELECTORS 59 Test IKEv2.EN.I.1.1.10.1: Sending Certificate Payload 60 Test IKEv2.EN.I.1.1.10.2: Sending Certificate Request Payload 61 Test IKEv2.EN.I.1.1.10.3: RSA Digital Signature 64 Test IKEv2.EN.I.1.1.11.2: Non zero RESERVED fields in IKE_AUTH response 66 Test IKEv2.EN.I.1.1.11.4: Unrecognized Notify Message Type of Error 68 Test IKEv2.EN.I.1.2.1.1: Sending CREATE_CHILD_SA request 69 Test IKEv2.EN.I.1.2.2.1: Retransmission of CREATE_CHILD_SA request 70 Test IKEv2.EN.I.1.2.2.2: Stop of retransmission of CREATE_CHILD_SA request 71 Test IKEv2.EN.I.1.2.3.1: Close the replaced CHILD_SA 72 Test IKEv2.EN.I.1.2.3.2: Receipt of cryptographically valid message on the new SA 73 Test IKEv2.EN.I.1.2.3.3: Lifetime of CHILD_SA expires 74 Test IKEv2.EN.I.1.2.3.4 Part A: Sending Multiple Transform for Rekeying CHILD_SA 75 Test IKEv2.EN.I.1.2.3.4 Part B: Sending Multiple Transform for Rekeying CHILD_SA 76 Test IKEv2.EN.I.1.2.3.4 Part C: Sending Multiple Transform for Rekeying CHILD_SA 77 Test IKEv2.EN.I.1.2.3.5: Sending Multiple Proposal for Rekeying CHILD_SA 78 Test IKEv2.EN.I.1.2.3.6: Rekeying Failure 79 Test IKEv2.EN.I.1.2.3.7: Perfect Forward Secrecy 80 Test IKEv2.EN.I.1.2.3.8: Use of the old CHILD_SA 81 Test IKEv2.EN.I.1.2.4.1: Close the replaced IKE_SA 82 Test IKEv2.EN.I.1.2.4.2: Receipt of cryptographically valid message on the new IKE_SA 83 Test IKEv2.EN.I.1.2.4.3: Lifetime of IKE_SA expires 84 Test IKEv2.EN.I.1.2.4.4 Part A: Sending Multiple Transform for Rekeying IKE_SA 85 Test IKEv2.EN.I.1.2.4.4 Part B: Sending Multiple Transform for Rekeying IKE_SA 86 Test IKEv2.EN.I.1.2.4.4 Part C: Sending Multiple Transform for Rekeying IKE_SA 87 Test IKEv2.EN.I.1.2.4.4 Part D: Sending Multiple Transform for Rekeying IKE_SA 88 Test IKEv2.EN.I.1.2.4.5: Sending Multiple Proposal for Rekeying IKE_SA 89 Test IKEv2.EN.I.1.2.4.6: Use of the old IKE_SA 90 Test IKEv2.EN.I.1.2.4.7: Changing PRFs when rekeying IKE_SA 91 Test IKEv2.EN.I.1.2.5.1: Sending CREATE_CHILD_SA request 92 Test IKEv2.EN.I.1.2.5.2: Receipt of cryptographically valid message on the new SA 93 * Test IKEv2.EN.I.1.2.6.1: Simulataneous CHILD_SA Close 94 * Test IKEv2.EN.I.1.2.6.2: Simulataneous IKE_SA Close 95 Test IKEv2.EN.I.1.2.6.3: Simulataneous CHILD_SA Rekeying 96 Test IKEv2.EN.I.1.2.6.4: Simulataneous CHILD_SA Rekeying with retransmission 97 Test IKEv2.EN.I.1.2.6.5: Simulataneous IKE_SA Rekeying 98 Test IKEv2.EN.I.1.2.6.6: Simulataneous IKE_SA Rekeying with retransmission 99 * Test IKEv2.EN.I.1.2.6.7: Closing and Rekeying CHILD_SA 100 * Test IKEv2.EN.I.1.2.6.8: Closing a new CHILD_SA 101 * Test IKEv2.EN.I.1.2.6.9: Rekeying a new CHILD_SA 102 * Test IKEv2.EN.I.1.2.6.10: Rekeying an IKE_SA with half-open CHILD_SAs 103 * Test IKEv2.EN.I.1.2.6.11: Rekeying a CHILD_SA while rekeying an IKE_SA 104 * Test IKEv2.EN.I.1.2.6.12: Rekeying an IKE_SA with half-closed CHILD_SAs 105 * Test IKEv2.EN.I.1.2.6.13: Closing a CHILD_SA while rekeying an IKE_SA 106 * Test IKEv2.EN.I.1.2.6.14: Closing an IKE_SA while rekeying an IKE_SA 107 * Test IKEv2.EN.I.1.2.6.15: Rekeying an IKE_SA while closing the IKE_SA 108 Test IKEv2.EN.I.1.2.7.1: Non zero RESERVED fields in CREATE_CHILD_SA response 109 * Test IKEv2.EN.I.1.3.1.1: Sending INFORMATIONAL request 110 * Test IKEv2.EN.I.1.3.2.1: Retransmission of INFORMATIONAL request 111 * Test IKEv2.EN.I.1.3.2.2: Stop of retransmission of INFORMATIONAL request 112 * Test IKEv2.EN.I.1.3.3.1: Non zero RESERVED fields in INFORMATIONAL response 113 * Test IKEv2.EN.I.1.3.4.1: INVALID_SPI 116 Test IKEv2.EN.I.2.1.1.1: Sending IKE_AUTH request 117 Test IKEv2.EN.I.2.1.1.2: Use of CHILD_SA 118 Test IKEv2.EN.I.2.1.2.1: Sending CFG_REQUEST 119 Test IKEv2.EN.I.2.1.2.2: Receipt of CFG_REPLY 120 Test IKEv2.EN.I.2.1.2.3: Non zero RESERVED fileds in Configuration Payload 121 Test IKEv2.EN.I.2.1.2.4: Receiving IKE_AUTH response without CFG_REPLY 122 Test IKEv2.EN.I.2.1.2.5: Receiving unrecognized Configuration Attributes 132 * Test IKEv2.EN.R.1.1.3.3: Close Connections when receiving INITIAL_CONTACT 136 Test IKEv2.EN.R.1.1.4.1: Receipt of a larger minor version number 142 Test IKEv2.EN.R.1.1.4.4 Part A: Invalid payload type 1 143 Test IKEv2.EN.R.1.1.4.4 Part B: Invalid payload type 32 144 Test IKEv2.EN.R.1.1.4.4 Part C: Invalid payload type 49 145 Test IKEv2.EN.R.1.1.4.4 Part D: Invalid payload type 255 146 Test IKEv2.EN.R.1.1.4.5: Invalid Payload Order 147 * Test IKEv2.EN.R.1.1.5.1: Cookies 148 * Test IKEv2.EN.R.1.1.5.2: Invalid Cookies 149 * Test IKEv2.EN.R.1.1.5.3: Interaction of COOKIE and INVALID_KE_PAYLOAD 150 * Test IKEv2.EN.R.1.1.5.4: Interaction of COOKIE and INVALID_KE_PAYLOAD with unoptimized Initiator 152 * Test IKEv2.EN.R.1.1.6.1 Part B: Encryption Algorithm ENCR_AES_CTR 157 Test IKEv2.EN.R.1.1.6.2 Part B: Encryption Algorithm ENCR_AES_CTR 158 Test IKEv2.EN.R.1.1.6.2 Part C: Encryption Algorithm ENCR_NULL 159 Test IKEv2.EN.R.1.1.6.2 Part D: Integrity Algorithm AUTH_AES_XCBC_96 160 Test IKEv2.EN.R.1.1.6.2 Part E: Integrity Algorithm NONE 161 Test IKEv2.EN.R.1.1.6.2 Part F: Extended Sequence Number 176 Test IKEv2.EN.R.1.1.6.7: Sending of INVALID_KE_PAYLOAD 178 Test IKEv2.EN.R.1.1.6.9: Creating an IKE_SA without a CHILD_SA 179 Test IKEv2.EN.R.1.1.7.1: Narrowing the range of members of the set of traffic selectors 181 Test IKEv2.EN.R.1.1.7.3: Narrowing multiple traffic selector 182 Test IKEv2.EN.R.1.1.8.1 Part A: Different IKE_SA Initiator's SPI 183 * Test IKEv2.EN.R.1.1.8.1 Part B: Different IKE_SA Responder's SPI 184 * Test IKEv2.EN.R.1.1.8.2: INVALID_SYNTAX 185 * Test IKEv2.EN.R.1.1.8.3: INVALID_SELECTORS 186 Test IKEv2.EN.R.1.1.10.1: Sending Certificate Payload 187 Test IKEv2.EN.R.1.1.10.2: Sending Certificate Request Payload 188 Test IKEv2.EN.R.1.1.10.3: RSA Digital Signature 191 Test IKEv2.EN.R.1.1.11.2: Non zero RESERVED fields in IKE_AUTH response 198 Test IKEv2.EN.R.1.2.3.1: Receiving Delete Payload for Multiple CHILD_SA 201 Test IKEv2.EN.R.1.2.5.2: Receipt of cryptographically protected message on the old SA and the new SA 209 Test IKEv2.EN.R.1.2.5.6: Use of the old CHILD_SA 212 Test IKEv2.EN.R.1.2.6.3: Use of the old IKE_SA 213 Test IKEv2.EN.R.1.2.6.4: Close the replaced IKE_SA 223 Test IKEv2.EN.R.1.2.6.8: D-H Transform NONE when rekeying the iKE_SA 224 Test IKEv2.EN.R.1.2.7.1: Receipt of cryptographically valid message on the new CHILD_SA 233 Test IKEv2.EN.R.2.1.1.1: Receipt of IKE_AUTH request 234 Test IKEv2.EN.R.2.1.1.2: Use of CHILD_SA The full TAHI report can be found at http://labs.suse.cz/jbohac/strongswan_ikev2_self_test/report1/ (this is report is not from a clean run, some of the tests have been re-run individually) E.g., "12 * Test IKEv2.EN.I.1.1.3.4: Close Connection when receiving INITIAL_CONTACT" is clearly a test/remotescript problem. After the IKE_SA_INIT/IKE_SA_AUTH/ICMP_ECHO exchanges, the test expects a new IKE_SA_INIT packet. However, the test script merely invokes ping6 on the NUT, which still has a valid SA. Nothing that would force the NUT to re-start the IKE negotiation. And furthermore, it does not wait for the IKE_SA_INIT long enough for the ping6 to even be invoked, at least with my serial setup. Despite the test spec says: "8. NUT starts to negotiate with TN1 by sending IKE_SA_INIT request. If rebooting NUT to start negotiation again is needed, it is possible to reboot NUT." The test/remote script does nothing like that. And I don't see an easy way to fix this in the remote script without modifying the test script. Example of one of the non-deprecated failing tests that I debugged: "14: Test IKEv2.EN.I.1.1.3.6: Sending Delete Payload for IKE_SA" again looks like the testsuite is broken. The test spec says: "In addition, set IKE_SA Lifetime to 60 seconds and set CHILD_SA Lifetime to 30 seconds. I modified koi/bin/remotes/linux-strongswan/ikev2.rmt to set ipsec.conf with: "ikelifetime=60s, keylife=30s, rekeymargin=3s" and Boom!: "Different Exchange Type (received: CREATE_CHILD_SA, expected: INFORMATIONAL); Not match with packet('EN-I-1-1-3-7.1')" Apparently, the test gets confused by the CREATE_CHILD_SA re-negotiating the CHILD_SA that expired after 30s, while waiting for the re-negotiation of the IKE_SA that will expire 30 seconds later. Unsurprisingly, with keylife=30m, the test PASSes. Another weirdness: The test spec says to set the IKE_SA Lifetime to different values (e.g. IKEv2.EN.I.1.1.3.7 and IKEv2.EN.I.1.1.3.6). But it is set to a fixed value in the default ikev2.rmt that comes with koi-2.1.8. The test scripts don't set the values requested by the test spec. I just wonder: - Is the IKEv2_Self_Test even supposed to work? I wonder how it could... - Has anyone run the IKEv2_Self_Test with more success? Any tips&tricks, custom remote files, configs, whatever? - Is anyone else interested in The USGv6 certification with strongSwan? Has anyone talked about this with any of the accredited testing labs? - Is some kind of pre-release version of the 1.1.0 IKEv2_Self_Test available anywhere? Curious if any of the above issues got fixed there (apart of those where the tests have been removed completely, of course). Thanks for any hints, -- Jiri Bohac <jbo...@suse.cz> SUSE Labs, SUSE CZ _______________________________________________ Users mailing list Users@lists.strongswan.org https://lists.strongswan.org/mailman/listinfo/users