Valery Smyslov writes:
> > * Find ways of making the packets smaller: move to PSK, fiddle
> > with trust anchors so that only one cert is needed, avoid sending
> > CRLs, hash-and-URL, etc. These are not always successful, and
> > often require more configuration than we would like.
>
> Not an option either. Corporate PKI has plenty of requirements to
> deal with and the requirement to make certificates smaller is the
> least. Hash-and-URL is a nice feature, but it requires an additional
> infrastructure that not every customer is willing to deploy.

Hash-and-URL do require customer to deploy www-server. I admit that
for some enterprices that might be burden to deploy, but quite a lot
of other enterprices do already have working deployed www-server they
can use...

The url can be static, the certificate stored on that url can be
static, new certificates needs to be pushed to www-server only and
only when the new certiticate is enrolled. The url can be something
like http://certs.example.com/<ca-short-name>/<hash-of-cert>.

Hash-and-URL should make the packets small enough that fragmentation
is not needed (especially if network supports 1280 byte packets). 

> > * Build a fragmentation layer within IKE, so IKE messages are
> > broken into several packets that get reassembled at the
> > destination. This is the path taken by one of our competitors [1].
> > This means that IKE has segmentation in addition to other TCP-like
> > features such as retransmission.
> 
> I like this approach, but as far as I know this is done for IKEv1
> only.

This also requires finding pmtu and so on which means this whole
protocol gets quite complicated. 

> > * Use IKE over TCP. Looking at the IANA registry ([2]) TCP port
> > 500 is already allocated to "ISAKMP". We have had IKE running over
> > TCP for several years for remote access clients. This was done
> > because remote access clients connect from behind some very dodgy
> > NAT devices, and some of those do drop fragments. Getting this
> > behavior at the ISP is novel.
> 
> IKE over TCP has its drawbacks. It eliminates the ability of IKE to
> be stateless (with COOKIE), thus considerably increasing its
> vulnerability to DoS attack. Switching between UDP and TCP
> (especially in the middle of exchange) considerably complicates
> protocol that is already complex in that part (remember switching to
> port 4500 on the fly).

If mechanisms already defined in the IKEv2 (Hash-and-URL etc) are not
enough, then I think IKE over TCP is the way to go. Most likely it
would be better to do it similarly we do NAT-T, i.e. instead of
switching to UDP port 4500 we would switch to TCP port 4500 for the
IKE_AUTH packets. Nothing prevents starting the creation of the TCP
connection while sending the first IKE_SA_INIT packet over UDP.

As with NAT-T we can either start over TCP port 4500 immediately from
the beginning, if we like (i.e. we know from previous experience or
from configuration that we should do that). As with NAT-T we can use
either UDP or TCP port 4500 at will, regardless whether NAT was
detected or not.

Also either end can send requests either over UDP or TCP and reply
would come back over same channel. In some cases we might want to
send packet first with UDP, and if we do not get any replies back for
our requests, we might want to fall back to TCP. In the other hand
there is no point of sending retransmissions to TCP connection, i.e.
we always only send one copy there (unless the TCP connection is
reset, and we recreate it). Anyways it is possible for both initiator
and responder to see same packet coming both over TCP and UDP, so
normal windowing and duplicate packet detection needs to be done (and
resending of replies if needed etc)

Using TCP port 4500 instead of TCP port 500 has the benefit that it
might bypass those filters someone was complaining about.

If we want to support ESP over that TCP channel too, then we need to
add some kind of framing which will tell the simulated UDP packet
length, i.e. similar what DNS does (prefix the packet with two byte
length field). On other hand we might want to add also non-IKE marker
somewhere too. 

Adding one notification to the IKE_SA_INIT to indicate the support of
this feature would be need.

Note, that if we run IKE_SA_INIT over UDP, then we can still support
stateless cookies, and for packets requiring fragmentation there is no
stateless processing anyways (whether the state is in the system
reassembly system, new IKEv2 reassembly system, or in the TCP does not
really matter). 

One open issue is how this fits with MOBIKE. I.e. if we get address
updates over UDP, do we immediately also create matching TCP
connection, and what do we do if that TCP connection creation fails,
even when the UDP worked etc.

> I'm in favor of developing standard way of fragmenting big packets
> in IKEv2. I beleive there might be relatively simple solutions not
> breaking core protocol implementation.

I think TCP is better approach. It has already solved most of the hard
problems, and we can use very small wrapper layer to support it in the
IKEv2.

The ESP over TCP do cause some problems, as some implementations do
capture those packets already in the kernel without ever giving them
to the userland, and doing that from the TCP stream is bit harder and
requires bit more code. 
-- 
kivi...@iki.fi
_______________________________________________
IPsec mailing list
IPsec@ietf.org
https://www.ietf.org/mailman/listinfo/ipsec

Reply via email to