In Part 7 we minted post-quantum certificates and weighed them. But certificates sitting in a folder are only half the fun. Time to do the job they were born for: prove identity. We’ll stand up two containers, each holding a certificate, and watch them prove who they are to each other before the tunnel comes up. That’s mutual authentication, over a real IKEv2 handshake. And we’ll do it twice, and the progression is the whole point: - Classical ECDSA (today’s real-world posture), on stable strongSwan. - Post-quantum ML-DSA (the bleeding edge), on an experimental branch. This Part uses the authentication/ lab: its own little stack, separate from the key-exchange one. Only Docker required. Clone the repo Grab the repo and step into this lab’s directory. All commands below run from ipsec/authentication/: git clone https://github.com/juliogomez/pqc.git cd ipsec/pqc/authentication How the trust works Both peers trust one tiny Certificate Authority we spin up just for the lab. The CA signs two leaf certificates (one per peer), and each peer gets the CA cert pre-installed so it can verify the other side. During the handshake each peer sends only its own leaf cert; the CA is already known to both. (That keeps the on-the-wire bytes down, which matters a lot once the certs go post-quantum, as Part 7 showed so clearly.) A helper script, gen-certs.sh, does all the minting; you just tell it which algorithm to use. Exercise A: Classical mutual auth with ECDSA This is today’s real-world posture, and there’s a nice little detail in it. Bring up the two peers: docker compose up -d --build That starts ike-auth-initiator (172.21.0.2) and ike-auth-responder (172.21.0.3). Now mint the CA and both ECDSA leaf certs: docker compose run --rm --build certgen ecdsa The peers started before the certs existed, so reload credentials. Reload the responder via