[strongSwan] Checking X509 Extended Key Usage

Andreas Steffen andreas.steffen at strongswan.org
Fri Jun 22 11:39:14 CEST 2018


Hi Sven,

the certificate policy must be contained in all certificates
of the X.509 trust chain. See the following example scenario:

https://www.strongswan.org/testing/testresults5dr/swanctl/rw-ed25519-certpol/

Regards

Andreas

On 20.06.2018 13:41, Sven Anders wrote:
> Am 20.06.2018 um 10:43 schrieb Andreas Steffen:
>> Hi Sven,
>>
>> you can use certificate policies which are based on OIDs.
>>
>> With swanctl.conf:
>>
>>   remote {
>>     auth = pubkey
>>     cert_policy = <OID list>
>>     ...
>>   }
>>
>> or with ipsec.conf:
>>
>>   rightcertpolicy=<OID list>
> 
> Thanks for pointing me to the right direction. I missed this in the
> manual page.
> 
> So the manual page states:
> 
>   left|rightcertpolicy = <OIDs>
> 
>   Comma separated list of certificate policy OIDs the peer's certificate must have.
>   OIDs are specified using the numerical dotted representation. Not supported for IKEv1 connections prior to 5.0.0.
> 
> 
> If I use the following configuration:
> 
>   conn rw-config
>     also = rw-base
>     ike = aes256-sha2_256-prfsha256-modp1024-modp2048,aes256gcm16-prfsha384-modp3072!
>     esp = aes256-sha2_256-prfsha256,aes256-sha1,aes256gcm16-modp3072!
>     leftsubnet = 10.0.0.0/8      # Split tunnel config
>     leftid = "vpn.mydomain.net"  # Must match remote part on the client side
>     leftcert = server.crt        # The server certificate to use
>     leftsendcert = always        # not "never"
>     left = 10.0.1.99
> 
>     rightdns = 10.0.0.10, 10.0.0.11
>     rightsourceip = %static, %dynamic
>     rightcertpolicy = 1.3.6.1.5.5.7.3.2
> 
>   conn ikev2-pubkey
>     also = rw-config
>     keyexchange = ikev2
>     auto = add
> 
> I cannot connect and I get the following output:
> 
> 8235[CFG] ike config match: 1052 (10.0.1.99 89.28.111.222 IKEv2)
> 8235[CFG]   candidate "ikev2-pubkey", match: 20/1/1052 (me/other/ike)
> 8235[CFG] selected peer config 'ikev2-pubkey'
> 8235[CFG]   using certificate "CN=MYNAME"
> 8235[CFG]   certificate "CN=MYNAME" key: 4096 bit RSA
> 8235[CFG]   using trusted intermediate ca certificate "DC=local, DC=my-group, CN=MY-CA01"
> 8235[CFG]   certificate "DC=local, DC=my-group, CN=MY-SUB-CA01" key: 4096 bit RSA
> 8235[CFG]   using trusted ca certificate "CN=MY-ROOT-CA01"
> 8235[CFG]   certificate "CN=MY-ROOT-CA01" key: 4096 bit RSA
> 8235[CFG]   reached self-signed root ca with a path length of 1
> 8235[IKE] authentication of 'MYNAME at my-group.local' with RSA signature successful
> 8235[CFG] constraint requires cert policy 1.3.6.1.5.5.7.3.2
> 8235[CFG] selected peer config 'ikev2-pubkey' inacceptable: non-matching authentication done
> 8235[CFG] no alternative config found
> 
> If I remove the "rightcertpolicy" line, I can connect without problems.
> 
> Any ideas?
> 
>> On 20.06.2018 09:49, Sven Anders wrote:
>>> Hi Andreas,
>>>
>>> Am 19.06.2018 um 18:47 schrieb Andreas Steffen:
>>>> Hi Sven,
>>>>
>>>> according to section 5.1.3.12. "ExtendedKeyUsage" of RFC 4945
>>>> "The Internet IP Security PKI Profile of IKEv1/ISAKMP, IKEv2, and PKIX"
>>>> the IPsec User EKU is deprecated:
>>>>
>>>>    The CA SHOULD NOT include the ExtendedKeyUsage (EKU) extension in
>>>>    certificates for use with IKE.  Note that there were three IPsec-
>>>>    related object identifiers in EKU that were assigned in 1999.  The
>>>>    semantics of these values were never clearly defined.  The use of
>>>>    these three EKU values in IKE/IPsec is obsolete and explicitly
>>>>    deprecated by this specification.  CAs SHOULD NOT issue certificates
>>>>    for use in IKE with them.  (For historical reference only, those
>>>>    values were id-kp-ipsecEndSystem, id-kp-ipsecTunnel, and id-kp-
>>>>    ipsecUser.)
>>>>
>>>> The only EKU flags our X.509 class supports are ocspSigning, ClientAuth,
>>>> and ServerAuth.
>>>
>>> yes I know, that "IPsec User" is deprecated (I expected this remark would
>>> come), but I used it as an example here. We want to use our own OIDs.
>>>
>>> Because the ExtendedKeyUsage is a just a list of OIDs and there are no
>>> restrictions I know of, we use this to differentiate between classes of
>>> certificates we issue.
>>>
>>> If this isn't supported, how can we use StrongSwan to distinguish between
>>> groups of certificates without using Sub-CAs?
>>> We cannot be the first with this requirement...
>>>
>>>> On 19.06.2018 18:22, Sven Anders wrote:
>>>>>
>>>>> We want to limit the usage of certificates by defining certain
>>>>> "Extended Key Usage" (EKU) flags to them.
>>>>>
>>>>> As an example, we want to set the "IPSec User" usage (1.3.6.1.5.5.7.3.7) and
>>>>> only allow connection via IPSec, if it is set. We may use some other flags
>>>>> out of our own space too.
>>>>>
>>>>> How can I check in StrongSwan, if a certain EKU exists?
> 
> Regards
>  Sven Anders
> 

-- 
======================================================================
Andreas Steffen                         andreas.steffen at strongswan.org
strongSwan - the Open Source VPN Solution!          www.strongswan.org
Institute for Networked Solutions
HSR University of Applied Sciences Rapperswil
CH-8640 Rapperswil (Switzerland)
===========================================================[INS-HSR]==


More information about the Users mailing list