I've been studying IPSec in the last couple of days/weeks. Absolutely
fascinating. Learned an awful lot.
And it's frightening. There appear to be so many misconceptions about
IPSec. Most importantly, many of my senior colleagues in IT believe
that IPSec is a stable and reliable solution.
After reading the RFCs and playing with various implementations, I
feel that IKEv1 is a very fragile protocol. How do you do simple
things like detecting a dead peer? Uhm, yeah, depends on the
implementation. Kind of. How do you do rekeying? Uhm, yeah, let's
agree on a key lifetime but let's break horribly if we try to initiate
rekeying at the same time (sic). Also, let's negotiate a couple of
parameters when the IKE connection starts -- but let's leave it to the
implementation if those parameters actually have to match.
IKEv2 seems to be a big improvement, however many firewall appliances
out there still don't implement it. And there are still design issues
like rekeying collisions and duplicate CHILD-SAs.
Oh and how do you monitor an IPSec "tunnel"? I have no idea yet how to
do that properly.
All of my criticism applies to IPSec as a basis for site-to-site VPNs.
Those are long-running VPN tunnels that can't just be broken from time
to time. But maybe that's the problem. IPSec feels like it was meant
to connect two hosts with a secure channel for just a couple of
minutes. I feel like IPSec (meaning SAs, SPs, and the ESP protocol --
not IKE) and TLS are trying to do a very similar (if not the same)
thing. Why do we use IPSec for site-to-site VPNs so often? Probably
just because so many firewall appliances have built-in support for
IPSec and nothing else.
I probably sound very arrogant because I'm a newbie in this area and
I'm basically telling everybody that they're stupid. This is not my
intention. It's likely that I have not yet understood some core
principles. I'm well aware that I'm not an expert and I'm willing to
learn.