<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>I am trying to set up Strongswan to act as a remote access 
      server for an iPhone using IKEv2 certificate auth. It is a major
      headache!<br>
    </p>
    <p>I have made sure to set the SAN in both the server and phone
      certificate. Here is the the server SAN:</p>
    <p><i><font face="Courier New, Courier, monospace">        X509v3
          extensions:<br>
                      X509v3 Subject Alternative Name: <br>
                          DNS:echo.pLAN9.co<br>
                      X509v3 Extended Key Usage: <br>
                          TLS Web Server Authentication, TLS Web Client
          Authentication</font></i><br>
      <br>
    </p>
    <p>Here is the phone SAN:</p>
    <p><i><font face="Courier New, Courier, monospace">        X509v3
          extensions:<br>
                      X509v3 Subject Alternative Name: <br>
                          DNS:pLAN9-iPhone.pLAN9.co<br>
                      X509v3 Extended Key Usage: <br>
                          TLS Web Server Authentication, TLS Web Client
          Authentication</font></i><br>
    </p>
    <p>Here is /etc/swanctl/swanctl.conf</p>
    <p><i><font face="Courier New, Courier, monospace">connections {<br>
                  RA {<br>
                          local_addrs = %any<br>
                          local {<br>
                                  auth = pubkey<br>
                                  certs = ECHO.crt<br>
                                  id = @echo.pLAN9.co<br>
                          }<br>
                          remote {<br>
                                  auth = pubkey<br>
                                  id = %any<br>
                          }<br>
                          children {<br>
                                  net {<br>
                                          local_ts = 0.0.0.0/0<br>
                                  esp_proposals = aes256-sha256<br>
                                  }<br>
                          }<br>
                          version = 2<br>
                          proposals = aes256-sha256-modp2048<br>
                          send_certreq = no<br>
                          pools = pool<br>
                  }<br>
          }<br>
          pools {<br>
                          pool {<br>
                                  addrs = 172.16.16.64/29<br>
                                  dns = 172.16.16.1<br>
                          }<br>
                  }</font></i><br>
    </p>
    <p><br>
    </p>
    <p>Here is the output of a connection:</p>
    <p><br>
    </p>
    <p><font face="Courier New, Courier, monospace"><i>01[NET] received
          packet: from IPHONE_IP[9975] to STRONGSWAN_IP[500] (604 bytes)</i><i><br>
        </i><i>01[ENC] parsed IKE_SA_INIT request 0 [ SA KE No
          N(REDIR_SUP) N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) ]</i><i><br>
        </i><i>01[IKE] IPHONE_IP is initiating an IKE_SA</i><i><br>
        </i><i>01[CFG] selected proposal:
          IKE:AES_CBC_256/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_2048</i><i><br>
        </i><i>01[IKE] remote host is behind NAT</i><i><br>
        </i><i>01[ENC] generating IKE_SA_INIT response 0 [ SA KE No
          N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) N(CHDLESS_SUP)
          N(MULT_AUTH) ]</i><i><br>
        </i><i>01[NET] sending packet: from STRONGSWAN_IP[500] to
          IPHONE_IP[9975] (456 bytes)</i><i><br>
        </i><i>10[NET] received packet: from IPHONE_IP[9959] to
          STRONGSWAN_IP[4500] (532 bytes)</i><i><br>
        </i><i>10[ENC] parsed IKE_AUTH request 1 [ EF(1/4) ]</i><i><br>
        </i><i>13[NET] received packet: from IPHONE_IP[9959] to
          STRONGSWAN_IP[4500] (532 bytes)</i><i><br>
        </i><i>10[ENC] received fragment #1 of 4, waiting for complete
          IKE message</i><i><br>
        </i><i>13[ENC] parsed IKE_AUTH request 1 [ EF(2/4) ]</i><i><br>
        </i><i>13[ENC] received fragment #2 of 4, waiting for complete
          IKE message</i><i><br>
        </i><i>14[NET] received packet: from IPHONE_IP[9959] to
          STRONGSWAN_IP[4500] (532 bytes)</i><i><br>
        </i><i>14[ENC] parsed IKE_AUTH request 1 [ EF(3/4) ]</i><i><br>
        </i><i>01[NET] received packet: from IPHONE_IP[9959] to
          STRONGSWAN_IP[4500] (180 bytes)</i><i><br>
        </i><i>14[ENC] received fragment #3 of 4, waiting for complete
          IKE message</i><i><br>
        </i><i>01[ENC] parsed IKE_AUTH request 1 [ EF(4/4) ]</i><i><br>
        </i><i>01[ENC] received fragment #4 of 4, reassembled fragmented
          IKE message (1552 bytes)</i><i><br>
        </i><i>01[ENC] unknown attribute type INTERNAL_DNS_DOMAIN</i><i><br>
        </i><i>01[ENC] parsed IKE_AUTH request 1 [ IDi CERT
          N(INIT_CONTACT) IDr AUTH CPRQ(ADDR MASK DHCP DNS ADDR6 DHCP6
          DNS6 DOMAIN) N(ESP_TFC_PAD_N) N(NON_FIRST_FRAG) SA TSi TSr
          N(MOBIKE_SUP) ]</i><i><br>
        </i><i>01[IKE] received end entity cert "CN=pLAN9-iPhone"</i><i><br>
        </i><i>01[CFG] looking for peer configs matching
          STRONGSWAN_IP[echo.plan9.co]...IPHONE_IP[pLAn9-iPhone.pLAN9.co]</i><i><br>
        </i><i>01[CFG] selected peer config 'RA'</i><i><br>
        </i><i>01[CFG]   using certificate "CN=pLAN9-iPhone"</i><i><br>
        </i><i>01[CFG]   using trusted ca certificate "CN=pLAN9 CA
          2019-2021"</i><i><br>
        </i><i>01[CFG] checking certificate status of "CN=pLAN9-iPhone"</i><i><br>
        </i><i>01[CFG] certificate status is not available</i><i><br>
        </i><i>01[CFG]   reached self-signed root ca with a path length
          of 0</i><i><br>
        </i><i>01[IKE] authentication of 'pLAn9-iPhone.pLAN9.co' with
          RSA signature successful</i><i><br>
        </i><i>01[IKE] received ESP_TFC_PADDING_NOT_SUPPORTED, not using
          ESPv3 TFC padding</i><i><br>
        </i><i>01[IKE] peer supports MOBIKE</i><i><br>
        </i><i>01[IKE] authentication of 'echo.plan9.co' (myself) with
          RSA signature successful</i><i><br>
        </i><i>01[IKE] IKE_SA RA[2] established between
          STRONGSWAN_IP[echo.plan9.co]...IPHONE_IP[pLAn9-iPhone.pLAN9.co]</i><i><br>
        </i><i>01[IKE] scheduling rekeying in 13941s</i><i><br>
        </i><i>01[IKE] maximum IKE_SA lifetime 15381s</i><i><br>
        </i><i>01[IKE] peer requested virtual IP %any</i><i><br>
        </i><i>01[CFG] assigning new lease to 'pLAn9-iPhone.pLAN9.co'</i><i><br>
        </i><i>01[IKE] assigning virtual IP 172.16.16.65 to peer
          'pLAn9-iPhone.pLAN9.co'</i><i><br>
        </i><i>01[IKE] peer requested virtual IP %any6</i><i><br>
        </i><i>01[IKE] no virtual IP found for %any6 requested by
          'pLAn9-iPhone.pLAN9.co'</i><i><br>
        </i><i>01[CFG] selected proposal:
          ESP:AES_CBC_256/HMAC_SHA2_256_128/NO_EXT_SEQ</i><i><br>
        </i><i>01[IKE] CHILD_SA net{4} established with SPIs cc4e7aea_i
          0358690a_o and TS 0.0.0.0/0 === 172.16.16.65/32</i><i><br>
        </i><i>01[ENC] generating IKE_AUTH response 1 [ IDr AUTH
          CPRP(ADDR DNS) SA TSi TSr N(MOBIKE_SUP) N(ADD_4_ADDR)
          N(ADD_6_ADDR) N(ADD_6_ADDR) ]</i><i><br>
        </i><i>01[NET] sending packet: from STRONGSWAN_IP[4500] to
          IPHONE_IP[9959] (544 bytes)</i></font></p>
    <p><font face="Courier New, Courier, monospace"><i><br>
        </i></font></p>
    <p>Strongswan looks like it is connecting fine, but the phone
      reports the error "User Authentication Failed" and doesn't
      connect. The phone is using the same certificate to connect to a
      number of other routers (not Strongswan based) that all have
      certificates signed by the same CA, and those are all working
      fine.</p>
    <p><br>
    </p>
    <p>What am I doing wrong here?<br>
    </p>
  </body>
</html>