[strongSwan] OS X/iOS clients with XAUTH

Brian Mastenbrook brian at mastenbrook.net
Mon Feb 18 06:03:20 CET 2013


On 2/17/2013 12:49 PM, Michael Durket wrote:
> I'm a little puzzled here. Apple's own website has a document "VPN Server for iOS Devices: IPSec settings" (at help.apple.com/iosdeployment-vpn/mac/1.2/#app36c95bff) that states it does not support Re-keying of phase 1 and recommends rekeying times on the server of 1 hour. But in an earlier section of the document, it states that it supports "Client and server certificates for IPSec authentication, with optional user authentication via xauth.".
>
> If this is so, and a user of a real Cisco VPN server sets it up to communicate this way, do their iPad/iPhone users regularly complain about being dropped every 45 minutes or so or not? If not, what is a real Cisco VPN doing to overcome this problem with xauth  that strongSwan is not? Or do Cisco VPN owners configure their VPNs for iOS devices to use some other authentication mechanisms and avoid xauth entirely because of this issue (and if so, what do they use)?

What Apple means by this is that iOS does not support server-initiated 
rekeying. iOS and OS X will rekey the tunnel every 45 minutes, no matter 
what the server proposes for lifetime.

As best I can work out, Cisco's implementation returns an XAUTH OK 
status immediately when it detects rekeying (based on the tunnel ID). 
This could lead to the session being intercepted if two tunnels share 
the same private key, and I could imagine it would cause failures if two 
users with the same private key are connected behind the same NAT device.

There's a branch in git called "xauth-noauth" that adds an xauth plugin 
that makes strongswan return an immediate xauth OK response for the 
applicable tunnel. This means you can use private keys for 
authentication and return the xauth response OS X/iOS needs, even if you 
don't really need xauth. I've been testing this out and have found it to 
work reliably with iOS 6.1 and OS X 10.8. In order to make it work, I 
created one key/certificate per client, and assigned an IP statically to 
each client. The client config looks something like this:

conn foo
         rightauth2=xauth-noauth
         rightsourceip=192.168.22.33
         rightsubnet=192.168.22.33/32
         rightcert=foo.cert.pem


The rightsubnet clause is there because OS X or iOS don't seem to do 
modeconfig on rekeying either, which means strongswan needs to know the 
rightsubnet of the SA statically.

In "conn %default", I have rightauth=pubkey and have set ikelifetime and 
keylife to 24h. iOS and OS X will always rekey before this threshold, so 
I've kept rekey=yes for other clients.

Hope this helps,

Brian
-- 
Brian Mastenbrook
brian at mastenbrook.net
http://brian.mastenbrook.net/




More information about the Users mailing list