Archive for the 'Linux' Category

VPN Verbindungsprobleme zwischen strongSwan 4.1.11 und Cisco Router mit IOS 15.0(1)M7

Bei einem kürzlichen Test ließ sich partout keine IPSec Verbindung zwischen einem Linux mit strongSwan und dem Cisco Router 881 aufbauen; bei jedem Verbindungsaufbau seitens strongSwan kam es zu folgendem Fehler:

vpn:~# ipsec up linux-cisco
002 "linux-cisco" #17326: initiating Main Mode
104 "linux-cisco" #17326: STATE_MAIN_I1: initiate
003 "linux-cisco" #17326: received Vendor ID payload [RFC 3947]
002 "linux-cisco" #17326: enabling possible NAT-traversal with method 3
106 "linux-cisco" #17326: STATE_MAIN_I2: sent MI2, expecting MR2
003 "linux-cisco" #17326: ignoring Vendor ID payload [Cisco-Unity]
003 "linux-cisco" #17326: received Vendor ID payload [Dead Peer Detection]
003 "linux-cisco" #17326: ignoring Vendor ID payload [3bdf474ef95bfef528d85476c8e3efbc]
003 "linux-cisco" #17326: received Vendor ID payload [XAUTH]
003 "linux-cisco" #17326: NAT-Traversal: Result using RFC 3947: no NAT detected
108 "linux-cisco" #17326: STATE_MAIN_I3: sent MI3, expecting MR3
003 "linux-cisco" #17326: discarding duplicate packet; already STATE_MAIN_I3
010 "linux-cisco" #17326: STATE_MAIN_I3: retransmission; will wait 20s for response
003 "linux-cisco" #17326: discarding duplicate packet; already STATE_MAIN_I3
003 "linux-cisco" #17326: discarding duplicate packet; already STATE_MAIN_I3
010 "linux-cisco" #17326: STATE_MAIN_I3: retransmission; will wait 40s for response
003 "linux-cisco" #17326: discarding duplicate packet; already STATE_MAIN_I3
031 "linux-cisco" #17326: max number of retransmissions (2) reached STATE_MAIN_I3.  Possible authentication failure: no acceptable response to our first encrypted message
000 "linux-cisco" #17326: starting keying attempt 2 of at most 3, but releasing whack

Auf dem Cisco Router war zeitgleich folgendes zu sehen:

cisco-881#show crypto isakmp sa
IPv4 Crypto ISAKMP SA
dst             src             state          conn-id status
51.243.239.41   223.23.80.47    MM_KEY_EXCH       2019 ACTIVE

cisco-881#show crypto session
Crypto session current status

Interface: FastEthernet4
Session status: DOWN-NEGOTIATING
Peer: 223.23.80.47 port 500
  IKE SA: local 51.243.239.41/500 remote 223.23.80.47/500 Inactive
  IKE SA: local 51.243.239.41/500 remote 223.23.80.47/500 Inactive
  IPSEC FLOW: permit ip 192.168.5.0/255.255.255.0 190.0.0.0/255.255.0.0
        Active SAs: 0, origin: crypto map

In strongSwan war der Tunnel wie folgt definiert:

conn linux-cisco
        left=223.23.80.47
        leftsubnet=190.0.0.0/16
        #
        keyexchange=ikev1
        #
        ike=aes-sha-modp1536
        esp=aes-sha1
        #
        right=51.243.239.41
        rightsubnet=192.168.5.0/24
        #
        keylife=1h
        ikelifetime=4h
        #
        authby=secret
        auto=start

Und auf dem Cisco-Router sah die Definition so aus:

crypto isakmp policy 1
 encr aes
 authentication pre-share
 group 5
 lifetime 14400
crypto isakmp key PSK address 223.23.80.47
!
!
crypto ipsec transform-set linux-cisco esp-aes esp-sha-hmac
!
crypto map linux-cisco 10 ipsec-isakmp
 set peer 223.23.80.47
 set transform-set linux-cisco
 set pfs group2
 match address 103
!
!
interface FastEthernet4
 description WAN
 ip address 51.243.239.41 255.255.255.248
 ip access-group 101 in
 duplex auto
 speed auto
 crypto map linux-cisco
!
access-list 103 permit ip 192.168.5.0 0.0.0.255 190.0.0.0 0.0.255.255

Das Problem ließ sich dadurch beheben, in dem die Verschlüsselungsdefinition von AES auf AES128 angepasst wurde:

conn linux-cisco
        left=223.23.80.47
        leftsubnet=190.0.0.0/16
        #
        keyexchange=ikev1
        #
        ike=aes128-sha-modp1536
        esp=aes128-sha1
        #
        right=51.243.239.41
        rightsubnet=192.168.5.0/24
        #
        keylife=1h
        ikelifetime=4h
        #
        authby=secret
        auto=start

Anschließend ließ sich die Verbindung problemlos aufbauen:

vpn:~# ipsec up linux-cisco
002 "linux-cisco" #17332: initiating Main Mode
104 "linux-cisco" #17332: STATE_MAIN_I1: initiate
003 "linux-cisco" #17332: received Vendor ID payload [RFC 3947]
002 "linux-cisco" #17332: enabling possible NAT-traversal with method 3
106 "linux-cisco" #17332: STATE_MAIN_I2: sent MI2, expecting MR2
003 "linux-cisco" #17332: ignoring Vendor ID payload [Cisco-Unity]
003 "linux-cisco" #17332: received Vendor ID payload [Dead Peer Detection]
003 "linux-cisco" #17332: ignoring Vendor ID payload [3bdf474e9d021e282b05ba8c081723e4]
003 "linux-cisco" #17332: received Vendor ID payload [XAUTH]
003 "linux-cisco" #17332: NAT-Traversal: Result using RFC 3947: no NAT detected
108 "linux-cisco" #17332: STATE_MAIN_I3: sent MI3, expecting MR3
002 "linux-cisco" #17332: Peer ID is ID_IPV4_ADDR: '51.243.239.41'
002 "linux-cisco" #17332: ISAKMP SA established
004 "linux-cisco" #17332: STATE_MAIN_I4: ISAKMP SA established
002 "linux-cisco" #17333: initiating Quick Mode PSK+ENCRYPT+TUNNEL+PFS+UP+MOBIKE {using isakmp#17332}
112 "linux-cisco" #17333: STATE_QUICK_I1: initiate
003 "linux-cisco" #17333: ignoring informational payload, type IPSEC_RESPONDER_LIFETIME
002 "linux-cisco" #17333: sent QI2, IPsec SA established {ESP=>0xa022fd69 0xa022fd69 <0x177a68e7}

Zur Ergänzung noch die funktionierende Verbindung auf Cisco-Seite:

cisco-881#show crypto isakmp sa
IPv4 Crypto ISAKMP SA
dst             src             state          conn-id status
51.243.239.41   223.23.80.47   QM_IDLE           2023 ACTIVE


cisco-881#show crypto session
Crypto session current status

Interface: FastEthernet4
Session status: UP-ACTIVE
Peer: 223.23.80.47 port 500
  IKE SA: local 51.243.239.41/500 remote 223.23.80.47/500 Active
  IPSEC FLOW: permit ip 192.168.5.0/255.255.255.0 190.0.0.0/255.255.0.0
        Active SAs: 2, origin: crypto map

Windows: Import von SSL-Zertifikat inkl. Private Key für ISA Server oder TMG

Für die Veröffentlichung von z.B. Exchange ActiveSync über das Microsoft Threat Management Gateway oder den ISA-Server sollte auf dem Server ein offizielles SSL-Zertifikat für die gewünschte Domain existieren. Die Zertifizierungsstelle wie z.B. Thawte sendet das Zerifikat in der Regel in Textform zu:

-----BEGIN CERTIFICATE-----
MIIDKTCCAtOgAwIBAgIJAItZm8m/4nSaMA0GCSqGSIb3DQEBBQUAMIGXMQswCQYD
VQQGEwJERTEWMBQGA1UECBMNTmllZGVyc2FjaHNlbjERMA8GA1UEBxMISGFubm92
ZXIxDzANBgNVBAoTBkxheWVyOTEPMA0GA1UECxMGTGF5ZXI5MR0wGwYDVQQDExRs
YXllcjkud29yZHByZXNzLmNvbTEcMBoGCSqGSIb3DQEJARYNbGF5ZXI5QGdteC5k
ZTAeFw0xMjAxMTkxNTIyNTVaFw0xNTAxMTgxNTIyNTVaMIGXMQswCQYDVQQGEwJE
RTEWMBQGA1UECBMNTmllZGVyc2FjaHNlbjERMA8GA1UEBxMISGFubm92ZXIxDzAN
BgNVBAoTBkxheWVyOTEPMA0GA1UECxMGTGF5ZXI5MR0wGwYDVQQDExRsYXllcjku
d29yZHByZXNzLmNvbTEcMBoGCSqGSIb3DQEJARYNbGF5ZXI5QGdteC5kZTBcMA0G
CSqGSIb3DQEBAQUAA0sAMEgCQQCmqgYLjxnRn2Ql1BTkvl+uba+jE6RvifHUv3bO
r0+9/JxAmWXAP6JEetyROgfnC+ZEZXejbqNn6DvlCgnJsAR9AgMBAAGjgf8wgfww
HQYDVR0OBBYEFOU3k7k03qMI679D0Rup/JvL1mFwMIHMBgNVHSMEgcQwgcGAFOU3
k7k03qMI679D0Rup/JvL1mFwoYGdpIGaMIGXMQswCQYDVQQGEwJERTEWMBQGA1UE
CBMNTmllZGVyc2FjaHNlbjERMA8GA1UEBxMISGFubm92ZXIxDzANBgNVBAoTBkxh
eWVyOTEPMA0GA1UECxMGTGF5ZXI5MR0wGwYDVQQDExRsYXllcjkud29yZHByZXNz
LmNvbTEcMBoGCSqGSIb3DQEJARYNbGF5ZXI5QGdteC5kZYIJAItZm8m/4nSaMAwG
A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADQQAlQIKYF37+IbXy5QnjkXmdqm9X
y1mhbRglr9St+Gqvz2ko4aaRwsIfrxRpbvlq6IFd9PLVS/udlx//n7V+CeAk
-----END CERTIFICATE-----

Speichert man das Zertifikat als Textdatei und importiert es in den „Personal Certificate Store“ des Computerkontos, fehlt allerdings der dazugehörige private Schlüssel und das Zertifikat kann nicht genutzt werden.

Um den privaten Schlüssel zu importieren, generiert man mittels OpenSSL einfach ein PKCS#12 Zertifikat, das neben dem Zertifikat auch den privaten Schlüssel enthält:

srv:/# openssl pkcs12 -export -in certificate.pem -inkey privatekey.pem \
-out certfinal.pfx

Ob Private Key und Zertifikat zueinander passen, lässt sich im Zweifel durch das Vergleichen der Prüfsummen von Schlüssel und Zertifikat feststellen. Beide Zahlen müssen identisch sein:

srv:/# openssl x509 -noout -modulus -in certificate.pem | openssl md5 \
19d0a008c19152777ded2b757f26e5c5
srv:/# openssl rsa -noout -modulus -in privatekey.pem | openssl md5 \
19d0a008c19152777ded2b757f26e5c5

Durch den Import der PFX-Datei lassen sich Zertifikat und Schlüssel dann in einem Rutsch hinzufügen.