セキュリティ : Cisco FlexVPN

Android strongSwan から Cisco IOS への IKEv2 での EAP 認証および RSA 認証

2015 年 11 月 26 日 - 機械翻訳について
その他のバージョン: PDFpdf | 英語版 (2015 年 8 月 22 日) | フィードバック

概要

このドキュメントでは、Internet Key Exchange Version 2(IKEv2)プロトコルで Cisco IOS® ソフトウェア VPN ゲートウェイにアクセスするために strongSwan モバイル バージョンを設定する方法について説明します。

次の 3 つの例を示します。

  • Extensible Authentication Protocol - Message Digest 5(EAP-MD5)認証で Cisco IOS ソフトウェア VPN ゲートウェイに接続する strongSwan 対応の Android フォン。
  • 証明書認証(RSA)で Cisco IOS ソフトウェア VPN ゲートウェイに接続する strongSwan 対応の Android フォン。
  • ネットワーク アドレス変換(NAT)で Cisco IOS ソフトウェア VPN ゲートウェイに接続する strongSwan 対応の Android フォン。 VPN ゲートウェイ証明書には 2 種類の x509 拡張の Subject Alternative Name が必要です。

Cisco IOS ソフトウェアおよび strongSwan の制限も含まれます。

著者:Cisco TAC エンジニア、Michal Garcarz および Salah Gherdaoui

前提条件

要件

次の項目に関する知識があることが推奨されます。

  • OpenSSL 設定に関する基礎知識
  • Cisco IOS ソフトウェア コマンドライン インターフェイス(CLI)に関する基礎知識
  • IKEv2 に関する基礎知識

使用するコンポーネント

このドキュメントの情報は、次のソフトウェアとハードウェアのバージョンに基づくものです。

  • strongSwan 対応の Android 4.0 以降
  • Cisco IOS ソフトウェア リリース 15.3T 以降
  • Cisco Identity Services Engine(ISE)ソフトウェア、バージョン 1.1.4 以降

このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されたものです。 このドキュメントで使用するすべてのデバイスは、クリアな(デフォルト)設定で作業を開始しています。 ネットワークが稼働中の場合は、コマンドが及ぼす潜在的な影響を十分に理解しておく必要があります。

設定



このセクションで使用されているコマンドの詳細を調べるには、Command Lookup Tool登録ユーザ専用)を使用してください。

アウトプット インタープリタ ツール登録ユーザ専用)は、特定の show コマンドをサポートしています。 show コマンド出力の分析を表示するには、アウトプット インタープリタ ツールを使用してください。

debug コマンドを使用する前に、『debug コマンドの重要な情報』を参照してください。

ネットワーク図

116837-config-strongswan-ios-01.jpg

Android の strongSwan は、内部ネットワークに安全にアクセスするために Cisco IOS ソフトウェア ゲートウェイを使用して IKEv2 トンネルを確立します。

証明書の登録

証明書は、EAP ベースおよび RSA ベースの認証の前提条件です。

EAP 認証のシナリオでは、証明書が必要なのは VPN ゲートウェイだけです。 クライアントは、ソフトウェアが Android で信頼されている認証局(CA)によって署名された証明書を提示した場合にのみ、Cisco IOS ソフトウェアに接続します。 その後、EAP セッションが開始され、クライアントが Cisco IOS ソフトウェアへの認証を行います。

RSA ベースの認証には、両方のエンドポイントで正しい証明書が必要です。

IP アドレスを peer-ID として使用している場合、証明書に追加の要件があります。 Android の strongSwan は、VPN ゲートウェイの IP アドレスが x509 拡張の Subject Alternative Name に含まれているかどうかを確認します。 含まれていない場合、Android は接続切断します。 RFC 6125 の勧告に加え、この方法を推奨します。

Cisco IOS ソフトウェアに IP アドレスを含む拡張付きの証明書を生成できないという制限があるため、 OpenSSL を CA として使用します。 すべての証明書は OpenSSL によって生成され、Android および Cisco IOS ソフトウェアにインポートされます。

Cisco IOS ソフトウェアでは、subject-alt-name コマンドを使用して、IP アドレスを含む拡張を作成できます。ただし、このコマンドは自己署名証明書でのみ動作します。 Cisco Bug ID CSCui44783、「subject-alt-name 拡張で CSR を生成できる IOS ENH PKI 機能(IOS ENH PKI ability to generate CSR with subject-alt-name extension)」は、Cisco IOS ソフトウェアですべてのタイプの登録に拡張を生成できる拡張要求です。

CA を生成するコマンドの例を次に示します。

#generate key
openssl genrsa -des3 -out ca.key 2048

#generate CSR
openssl req -new -key ca.key -out ca.csr

#remove protection
cp ca.key ca.key.org
openssl rsa -in ca.key.org -out ca.key

#self sign certificate
openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt
-extensions v3_req -extfile conf_global.crt

conf_global.crt はコンフィギュレーション ファイルです。 CA 拡張を TRUE に設定する必要があります。

[ req ]
default_bits              = 1024             # Size of keys
default_md                = md5                      # message digest algorithm
string_mask               = nombstr          # permitted characters
#string_mask              = pkix     # permitted characters
distinguished_name        = req_distinguished_name
req_extensions            = v3_req
 
[ v3_req ]
basicConstraints          = CA:TRUE
subjectKeyIdentifier      = hash

証明書を生成するコマンドは、Cisco IOS ソフトウェアと Android でよく似ています。 この例は、証明書の署名に使用する CA があることを前提としています。

#generate key
openssl genrsa -des3 -out server.key 2048

#generate CSR
openssl req -new -key server.key -out server.csr

#remove protection
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key

#sign the cert and add Alternate Subject Name extension from
conf_global_cert.crt file with configuration
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial
-out server.crt -days 365 -extensions v3_req -extfile conf_global_cert.crt

#create pfx file containig CA cert and server cert
openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt
-certfile ca.crt

conf_global_cert.crt はコンフィギュレーション ファイルです。 Alternate Subject Name 拡張はキー設定です。 この例では、CA 拡張は FALSE に設定します。

[ req ]
default_bits              = 1024             # Size of keys
default_md                = md5                      # message digest algorithm
string_mask               = nombstr          # permitted characters
#string_mask              = pkix     # permitted characters
distinguished_name        = req_distinguished_name
req_extensions            = v3_req
 
[ v3_req ]
basicConstraints          = CA:FALSE
subjectKeyIdentifier      = hash
subjectAltName            = @alt_names

[alt_names]
IP.1                      = 10.48.64.15

証明書は、Cisco IOS ソフトウェアと Android の両方に生成する必要があります。

IP アドレス 10.48.64.15 は、Cisco IOS ソフトウェア ゲートウェイに属しています。 Cisco IOS ソフトウェアの証明書を生成したら、subjectAltName が 10.48.64.15 に設定されていることを確認します。 Android は、Cisco IOS ソフトウェアから受信した証明書を確認し、その IP アドレスを subjectAltName で検索します。

Cisco IOS ソフトウェア

Cisco IOS ソフトウェアには、RSA ベースおよび EAP ベースの認証に正しい証明書がインストールされている必要があります。

Cisco IOS ソフトウェアの pfx ファイル(pkcs12 コンテナである)をインポートすることができます。

BSAN-2900-1(config)# crypto pki import TP pkcs12 
http://10.10.10.1/server.pfx password 123456

% Importing pkcs12...
Source filename [server.pfx]?
CRYPTO_PKI: Imported PKCS12 file successfully.

インポートが成功したことを確認するには、show crypto pki certificates verbose コマンドを使用します。

BSAN-2900-1# show crypto pki certificates verbose 
Certificate
  Status: Available
  Version: 3
  Certificate Serial Number (hex): 00A003C5DCDEFA146C
  Certificate Usage: General Purpose
  Issuer:
    cn=Cisco
    ou=Cisco TAC
    o=Cisco
    l=Krakow
    st=Malopolskie
    c=PL
  Subject:
    Name: IOS
    IP Address: 10.48.64.15
    cn=IOS
    ou=TAC
    o=Cisco
    l=Krakow
    st=Malopolska
    c=PL
  Validity Date:
    start date: 18:04:09 UTC Aug 1 2013
    end   date: 18:04:09 UTC Aug 1 2014
  Subject Key Info:
    Public Key Algorithm: rsaEncryption
    RSA Public Key: (2048 bit)
  Signature Algorithm: SHA1 with RSA Encryption
  Fingerprint MD5: 2C45BF10 0BACB98D 444F5804 1DC27ECF
  Fingerprint SHA1: 26B66A66 DF5E7D6F 498DD653 A2C164D7 4C7A7F8F
  X509v3 extensions:
    X509v3 Subject Key ID: AD598A9B 8AB6893B AB3CB8B9 28B2039C 78441E72
    X509v3 Basic Constraints:
        CA: FALSE
    X509v3 Subject Alternative Name:
         
        10.48.64.15
    Authority Info Access:
  Associated Trustpoints: TP
  Storage: nvram:Cisco#146C.cer
  Key Label: TP
  Key storage device: private config

CA Certificate
  Status: Available
  Version: 3
  Certificate Serial Number (hex): 00DC8EAD98723DF56A
  Certificate Usage: General Purpose
  Issuer:
    cn=Cisco
    ou=Cisco TAC
    o=Cisco
    l=Krakow
    st=Malopolskie
    c=PL
  Subject:
    cn=Cisco
    ou=Cisco TAC
    o=Cisco
    l=Krakow
    st=Malopolskie
    c=PL
  Validity Date:
    start date: 16:39:55 UTC Jul 23 2013
    end   date: 16:39:55 UTC Jul 23 2014
  Subject Key Info:
    Public Key Algorithm: rsaEncryption
    RSA Public Key: (2048 bit)
  Signature Algorithm: SHA1 with RSA Encryption
  Fingerprint MD5: 0A2432DC 33F0DC46 AAB23E26 ED474B7E
  Fingerprint SHA1: A50E3892 ED5C4542 FA7FF584 DE07B6E0 654A62D0
  X509v3 extensions:
    X509v3 Subject Key ID: 786F263C 0F5A1963 D6AD18F8 86DCE7C9 0185911E
    X509v3 Basic Constraints:
        CA: TRUE
    Authority Info Access:
  Associated Trustpoints: TP
  Storage: nvram:Cisco#F56ACA.cer

BSAN-2900-1#show ip int brief
Interface                  IP-Address      OK? Method Status          Protocol
GigabitEthernet0/0         10.48.64.15     YES NVRAM  up              up  

Android

EAP ベースの認証では、Andorid に正しい CA 証明書がインストールされている必要があります。

RSA ベースの認証では、Andorid に CA 証明書とそれ自身の証明書の両方がインストールされている必要があります。

この手順では、両方の証明書をインストールする方法について説明します。

  1. pfx ファイルを電子メールで送信して開きます。

  2. pfx ファイルの生成時に使用したパスワードを入力します。

    116837-config-strongswan-ios-02.png

  3. インポートした証明書の名前を入力します。

    116837-config-strongswan-ios-03.png

  4. 証明書のインストールを確認するには、[Settings] > [Security] > [Trusted Credentials] に移動します。 新しい証明書がユーザ ストアに表示されます。

    116837-config-strongswan-ios-04.png

この時点で、ユーザ証明書および CA 証明書がインストールされます。 pfx ファイルは、ユーザ証明書と CA 証明書の両方を含む pkcs12 コンテナです。

Android には、証明書のインポート時に正確な要件があります。 たとえば、CA 証明書を正常にインポートするには、Android で x509v3 拡張の基本制約 CA が TRUE に設定されている必要があります。 したがって、CA を生成するか、独自の CA を使用する場合、正しい拡張があることを確認することが重要です。

pluton custom_ca # openssl x509 -in ca.crt -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            dc:8e:ad:98:72:3d:f5:6a
        Signature Algorithm: sha1WithRSAEncryption
        Issuer: C=PL, ST=Malopolskie, L=Krakow, O=Cisco, OU=Cisco TAC, CN=Cisco
<.....output omitted>

 X509v3 Basic Constraints:
                CA:TRUE

<.....output omitted>

EAP Authentication

EAP 認証用の Cisco IOS ソフトウェア設定

IKEv2 により、ユーザ認証の実行に EAP プロトコル スタックを使用することができます。 VPN ゲートウェイは証明書で自身を提示します。 クライアントは、その証明書を信頼すると、そのゲートウェイからの EAP 要求 ID に応答します。 Cisco IOS ソフトウェアでは、その ID を使用して Radius-Request メッセージを認証、許可、アカウンティング(AAA)に送信し、EAP-MD5 セッションがサプリカント(Android)と認証サーバ(Access Control Server(ACS)または ISE)の間に確立されます。

Radius-Accept メッセージに示されているように、EAP-MD5 認証が成功した後、Cisco IOS ソフトウェアでは、コンフィギュレーション モードを使用して IP アドレスをクライアントにプッシュし、トラフィック セレクタ ネゴシエーションを続行します。

Android が IKEID=cisco を送信している(設定どおりに)ことに留意してください。 Cisco IOS ソフトウェアで受信したこの IKEID は、「ikev2 profile PROF」と一致します。

aaa new-model
aaa authentication login eap-list-radius group radius
aaa authorization network IKE2_AUTHOR_LOCAL local

crypto pki trustpoint TP
 revocation-check none

crypto ikev2 authorization policy IKE2_AUTHOR_POLICY
 pool POOL
!
crypto ikev2 proposal ikev2-proposal
 encryption aes-cbc-128
 integrity sha1
 group 14
!
crypto ikev2 policy ikev2-policy
 proposal ikev2-proposal
!
!
crypto ikev2 profile PROF
 match identity remote key-id cisco
 authentication remote eap query-identity
 authentication local rsa-sig
 pki trustpoint TP
 aaa authentication eap eap-list-radius
 aaa authorization group eap list IKE2_AUTHOR_LOCAL IKE2_AUTHOR_POLICY
 aaa authorization user eap cached
 virtual-template 1

crypto ipsec transform-set 3DES-MD5 esp-aes esp-sha-hmac
 mode tunnel
!
crypto ipsec profile PROF
 set transform-set 3DES-MD5
 set ikev2-profile PROF

interface GigabitEthernet0/0
 ip address 10.48.64.15 255.255.255.128

interface Virtual-Template1 type tunnel
 ip unnumbered GigabitEthernet0/0
 tunnel mode ipsec ipv4
 tunnel protection ipsec profile PROF

ip local pool POOL 192.168.0.1 192.168.0.10

radius-server host 10.48.66.185 key cisco

EAP 認証用の Android 設定

Android の strongSwan には、EAP を設定する必要があります。

  1. 自動証明書選択を無効にします。 無効にしないと、100 以上の CERT_REQ が 3 番目のパケットで送信されます。

  2. 前の手順でインポートした特定の証明書(CA)を選択します。 ユーザ名とパスワードは AAA サーバと同じにする必要があります。

    116837-config-strongswan-ios-05.png

EAP 認証テスト

Cisco IOS ソフトウェアでの EAP の認証に最も重要なデバッグを次に示します。 分かりやすくするために、ほとんどの出力が省略されています。

debug crypto ikev2 error
debug crypto ikev2 internal
debug radius authentication
debug radius verbose

IKEv2:New ikev2 sa request admitted
IKEv2:(SA ID = 1):Searching policy based on peer's identity 'cisco' of type
'FQDN'

IKEv2:(1): Choosing IKE profile PROF
IKEv2:Sending certificates as X509 certificates

RADIUS(00000025): Send Access-Request to 10.48.66.185:1645 id 1645/4,len 110
RADIUS: Received from id 1645/4 10.48.66.185:1645, Access-Challenge, len 79
RADIUS(00000025): Send Access-Request to 10.48.66.185:1645 id 1645/5,len 141
RADIUS: Received from id 1645/5 10.48.66.185:1645, Access-Challenge, len 100
RADIUS(00000025): Send Access-Request to 10.48.66.185:1645 id 1645/6,len 155
RADIUS: Received from id 1645/6 10.48.66.185:1645, Access-Accept, len 76

IKEv2:(SA ID = 1):SM Trace-> SA: I_SPI=AABAB198FACAAEDE R_SPI=D61F37C4DC875001
(R) MsgID = 00000004 CurState: R_PROC_EAP_RESP Event: EV_RECV_EAP_SUCCESS

IKEv2:IKEv2 local AAA author request for 'IKE2_AUTHOR_POLICY'
IKEv2:Received group author attributes: ipv4-pool: POOL, route-accept any tag:1
distance:1
IKEv2:Allocated addr 192.168.0.2 from local pool POOL
IKEv2:(SA ID = 1):SM Trace-> SA: I_SPI=AABAB198FACAAEDE R_SPI=D61F37C4DC875001
(R) MsgID = 00000005 CurState: R_VERIFY_AUTH Event:
EV_OK_RECD_VERIFY_IPSEC_POLICY
%LINEPROTO-5-UPDOWN: Line protocol on Interface Virtual-Access1, changed state
to up

Android のログを次に示します。

00[DMN] Starting IKE charon daemon (strongSwan 5.1.0dr2, 
Linux 3.4.0-perf-gf43c3d9, armv7l)        
00[KNL] kernel-netlink plugin might require CAP_NET_ADMIN capability           
00[LIB] loaded plugins: androidbridge charon android-log openssl fips-prf
random nonce pubkey pkcs1 pkcs8 pem xcbc hmac socket-default kernel-netlink
00[LIB] unable to load 9 plugin features (9 due to unmet dependencies)      
00[JOB] spawning 16 worker threads             
13[IKE] initiating IKE_SA android[1] to 10.48.64.15            
13[ENC] generating IKE_SA_INIT request 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) ]
13[NET] sending packet: from 10.147.24.153[45581] to 10.48.64.15[500]
(648 bytes)         
11[NET] received packet: from 10.48.64.15[500] to 10.147.24.153[45581]
(497 bytes)         
11[ENC] parsed IKE_SA_INIT response 0 [ SA KE No V V N(NATD_S_IP) N(NATD_D_IP)
CERTREQ N(HTTP_CERT_LOOK) ]  
11[ENC] received unknown vendor ID:
43:49:53:43:4f:2d:44:45:4c:45:54:45:2d:52:45:41:53:4f:4e            
11[ENC] received unknown vendor ID:
46:4c:45:58:56:50:4e:2d:53:55:50:50:4f:52:54:45:44            
11[IKE] faking NAT situation to enforce UDP encapsulation          
11[IKE] cert payload ANY not supported - ignored          
11[IKE] sending cert request for "C=PL, ST=Malopolskie, L=Krakow, O=Cisco,
OU=Cisco TAC, CN=Cisco"
      
11[IKE] establishing CHILD_SA android              
11[ENC] generating IKE_AUTH request 1 [ IDi N(INIT_CONTACT) CERTREQ
CP(ADDR ADDR6 DNS DNS6) N(ESP_TFC_PAD_N) SA TSi TSr N(MOBIKE_SUP)
11[NET] sending packet: from 10.147.24.153[35564] to 10.48.64.15[4500]
(508 bytes)         
10[NET] received packet: from 10.48.64.15[4500] to 10.147.24.153[35564]
(1292 bytes)         
10[ENC] parsed IKE_AUTH response 1 [ V IDr CERT AUTH EAP/REQ/ID ]      
10[IKE] received end entity cert "C=PL, ST=Malopolska, L=Krakow, O=Cisco,
OU=TAC, CN=IOS"   
    
10[CFG] using certificate "C=PL, ST=Malopolska, L=Krakow, O=Cisco, OU=TAC,
CN=IOS"         
10[CFG] using trusted ca certificate "C=PL, ST=Malopolskie, L=Krakow, O=Cisco,
OU=Cisco TAC, CN=Cisco"      
10[CFG] reached self-signed root ca with a path length of 0       
10[IKE] authentication of '10.48.64.15' with RSA signature successful          
10[IKE] server requested EAP_IDENTITY (id 0x3B), sending 'cisco'          
10[ENC] generating IKE_AUTH request 2 [ EAP/RES/ID ]          
10[NET] sending packet: from 10.147.24.153[35564] to 10.48.64.15[4500]
(76 bytes)         
09[NET] received packet: from 10.48.64.15[4500] to 10.147.24.153[35564]
(76 bytes)         
09[ENC] parsed IKE_AUTH response 2 [ EAP/REQ/TLS ]          
09[IKE] server requested EAP_TLS authentication (id 0x59)           
09[IKE] EAP method not supported, sending EAP_NAK           
09[ENC] generating IKE_AUTH request 3 [ EAP/RES/NAK ]          
09[NET] sending packet: from 10.147.24.153[35564] to 10.48.64.15[4500]
(76 bytes)         
08[NET] received packet: from 10.48.64.15[4500] to 10.147.24.153[35564]
(92 bytes)         
08[ENC] parsed IKE_AUTH response 3 [ EAP/REQ/MD5 ]          
08[IKE] server requested EAP_MD5 authentication (id 0x5A)           
08[ENC] generating IKE_AUTH request 4 [ EAP/RES/MD5 ]          
08[NET] sending packet: from 10.147.24.153[35564] to 10.48.64.15[4500]
(92 bytes)         
07[NET] received packet: from 10.48.64.15[4500] to 10.147.24.153[35564]
(76 bytes)         
07[ENC] parsed IKE_AUTH response 4 [ EAP/SUCC ]          
07[IKE] EAP method EAP_MD5 succeeded, no MSK established          
07[IKE] authentication of 'cisco' (myself) with EAP           
07[ENC] generating IKE_AUTH request 5 [ AUTH ]          
07[NET] sending packet: from 10.147.24.153[35564] to 10.48.64.15[4500]
(92 bytes)         
06[NET] received packet: from 10.48.64.15[4500] to 10.147.24.153[35564]
(236 bytes)         
06[ENC] parsed IKE_AUTH response 5 [ AUTH CP(ADDR) SA TSi TSr N(SET_WINSIZE)
N(ESP_TFC_PAD_N) N(NON_FIRST_FRAG) ]   
06[IKE] authentication of '10.48.64.15' with EAP successful           
06[IKE] IKE_SA android[1] established between
10.147.24.153[cisco]...10.48.64.15[10.48.64.15] 
           
06[IKE] scheduling rekeying in 35421s             
06[IKE] maximum IKE_SA lifetime 36021s             
06[IKE] installing new virtual IP 192.168.0.1            
06[IKE] received ESP_TFC_PADDING_NOT_SUPPORTED, not using ESPv3 TFC padding
06[IKE] CHILD_SA android{1} established with SPIs c776cb4f_i ea27f072_o and
TS 192.168.0.1/32 === 0.0.0.0/0     
06[DMN] setting up TUN device for CHILD_SA android{1}          
06[DMN] successfully created TUN device

この例は、Cisco IOS ソフトウェアの状態を確認する方法を示します。

BSAN-2900-1#show crypto session detail 
Crypto session current status

Code: C - IKE Configuration mode, D - Dead Peer Detection     
K - Keepalives, N - NAT-traversal, T - cTCP encapsulation     
X - IKE Extended Authentication, F - IKE Fragmentation

Interface: Virtual-Access1
Uptime: 00:02:12
Session status: UP-ACTIVE     
Peer: 10.147.24.153 port 60511 fvrf: (none) ivrf: (none)
      Phase1_id: cisco
      Desc: (none)
  IKEv2 SA: local 10.48.64.15/4500 remote 10.147.24.153/60511 Active
          Capabilities:NX connid:1 lifetime:23:57:48
  IPSEC FLOW: permit ip 0.0.0.0/0.0.0.0 host 192.168.0.2
        Active SAs: 2, origin: crypto map
        Inbound:  #pkts dec'ed 40 drop 0 life (KB/Sec) 4351537/3468
        Outbound: #pkts enc'ed 5 drop 0 life (KB/Sec) 4351542/3468

BSAN-2900-1#show crypto ikev2 sa detailed
 IPv4 Crypto IKEv2  SA

Tunnel-id Local                 Remote                fvrf/ivrf         Status
1         10.48.64.15/4500      10.147.24.153/60511   none/none         READY  
      Encr: AES-CBC, keysize: 128, Hash: SHA96, DH Grp:14, Auth sign: RSA,
Auth verify: EAP

      Life/Active Time: 86400/137 sec
      CE id: 1002, Session-id: 2
      Status Description: Negotiation done
      Local spi: D61F37C4DC875001       Remote spi: AABAB198FACAAEDE
      Local id: 10.48.64.15
      Remote id: cisco
      Remote EAP id: cisco
      Local req msg id:  0              Remote req msg id:  6         
      Local next msg id: 0              Remote next msg id: 6         
      Local req queued:  0              Remote req queued:  6         
      Local window:      5              Remote window:      1         
      DPD configured for 0 seconds, retry 0
      Fragmentation not configured.
      Extended Authentication configured.
      NAT-T is detected  outside
      Cisco Trust Security SGT is disabled
      Assigned host addr: 192.168.0.2
      Initiator of SA : No

次の図は、Android の状態を確認する方法を示します。

116837-config-strongswan-ios-06.png

116837-config-strongswan-ios-07.png

RSA 認証

RSA 認証用の Cisco IOS ソフトウェア設定

Rivest-Shamir-Adleman(RSA)の認証では、Android は、Cisco IOS ソフトウェアへの認証を行うために証明書を送信します。 このため、そのトラフィックを特定の IKEv2 プロファイルにバインドする証明書マップが必要です。 ユーザ EAP 認証は不要です。

リモート ピアの RSA 認証を設定する方法の例を次に示します。

crypto pki certificate map CERT_MAP 10
 subject-name co android

crypto ikev2 profile PROF
 match certificate CERT_MAP
 authentication remote rsa-sig
 authentication local rsa-sig
 pki trustpoint TP
 aaa authorization group cert list IKE2_AUTHOR_LOCAL IKE2_AUTHOR_POLICY
 virtual-template 1

RSA 認証用の Android 設定

ユーザ クレデンシャルは、ユーザ証明書に置き換えられています。

116837-config-strongswan-ios-08.png

RSA 認証テスト

Cisco IOS ソフトウェアでの RSA の認証に最も重要なデバッグを次に示します。 分かりやすくするために、ほとんどの出力が省略されています。

debug crypto ikev2 error
debug crypto ikev2 internal
debug crypto pki transactions
debug crypto pki validation
debug crypto pki messages

IKEv2:New ikev2 sa request admitted
IKEv2:(SA ID = 1):Searching policy based on peer's identity 'cn=android,ou=TAC,
o=Cisco,l=Krakow,st=Malopolska,c=PL' of type 'DER ASN1 DN'

IKEv2:(1): Choosing IKE profile PROF
IKEv2:Sending certificates as X509 certificates
IKEv2:(SA ID = 1):Peer's authentication method is 'RSA'
IKEv2:Peer has sent X509 certificates
CRYPTO_PKI: Found a issuer match
CRYPTO_PKI: (9000B) Certificate is verified
CRYPTO_PKI: (9000B) Certificate validation succeeded
IKEv2:(SA ID = 1):[Crypto Engine -> IKEv2] Verification of signed
authentication data PASSED

IKEv2:IKEv2 local AAA author request for 'IKE2_AUTHOR_POLICY'
IKEv2:Received group author attributes: ipv4-pool: POOL, route-accept any tag:1
distance:1
IKEv2:Allocated addr 192.168.0.3 from local pool POOL
IKEv2:(SA ID = 1):SM Trace-> SA: I_SPI=E53A57E359A8437C R_SPI=A03D273FC75EEBD9
(R) MsgID = 00000001 CurState: R_VERIFY_AUTH Event:
EV_OK_RECD_VERIFY_IPSEC_POLICY

%LINEPROTO-5-UPDOWN: Line protocol on Interface Virtual-Access1, changed state
to up

Android のログを次に示します。

00[DMN] Starting IKE charon daemon (strongSwan 5.1.0dr2, 
Linux 3.4.0-perf-gf43c3d9, armv7l)       
00[KNL] kernel-netlink plugin might require CAP_NET_ADMIN capability          
00[LIB] loaded plugins: androidbridge charon android-log openssl fips-prf
random nonce pubkey pkcs1 pkcs8 pem xcbc hmac socket-default
00[LIB] unable to load 9 plugin features (9 due to unmet dependencies)     
00[JOB] spawning 16 worker threads            
05[CFG] loaded user certificate 'C=PL, ST=Malopolska, L=Krakow, O=Cisco,
OU=TAC, CN=android' and private key    
05[CFG] loaded CA certificate 'C=PL, ST=Malopolskie, L=Krakow, O=Cisco,
OU=Cisco TAC, CN=Cisco'      

05[IKE] initiating IKE_SA android[4] to 10.48.64.15           
05[ENC] generating IKE_SA_INIT request 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) ]
05[NET] sending packet: from 10.147.24.153[34697] to 10.48.64.15[500]
(648 bytes)        
10[NET] received packet: from 10.48.64.15[500] to 10.147.24.153[34697]
(497 bytes)        
10[ENC] parsed IKE_SA_INIT response 0 [ SA KE No V V N(NATD_S_IP) N(NATD_D_IP)
CERTREQ N(HTTP_CERT_LOOK) ]
10[ENC] received unknown vendor ID:
43:49:53:43:4f:2d:44:45:4c:45:54:45:2d:52:45:41:53:4f:4e           
10[ENC] received unknown vendor ID:
46:4c:45:58:56:50:4e:2d:53:55:50:50:4f:52:54:45:44           
10[IKE] faking NAT situation to enforce UDP encapsulation         
10[IKE] cert payload ANY not supported - ignored         
10[IKE] sending cert request for "C=PL, ST=Malopolskie, L=Krakow, O=Cisco,
OU=Cisco TAC, CN=Cisco"     

10[IKE] authentication of 'C=PL, ST=Malopolska, L=Krakow, O=Cisco, OU=TAC,
CN=android' (myself) with RSA signature successful   
10[IKE] sending end entity cert "C=PL, ST=Malopolska, L=Krakow, O=Cisco,
OU=TAC, CN=android"      
10[IKE] establishing CHILD_SA android             
10[ENC] generating IKE_AUTH request 1 [ IDi CERT N(INIT_CONTACT) CERTREQ
AUTH CP(ADDR ADDR6 DNS DNS6) N(ESP_TFC_PAD_N) SA
10[NET] sending packet: from 10.147.24.153[44527] to 10.48.64.15[4500]
(1788 bytes)        
12[NET] received packet: from 10.48.64.15[4500] to 10.147.24.153[44527]
(1420 bytes)        
12[ENC] parsed IKE_AUTH response 1 [ V IDr CERT AUTH CP(ADDR) SA TSi TSr
N(SET_WINSIZE) N(ESP_TFC_PAD_N) N(NON_FIRST_FRAG)
12[IKE] received end entity cert "C=PL, ST=Malopolska, L=Krakow, O=Cisco,
OU=TAC, CN=IOS" 
     
12[CFG] using certificate "C=PL, ST=Malopolska, L=Krakow, O=Cisco, OU=TAC,
CN=IOS"        
12[CFG] using trusted ca certificate "C=PL, ST=Malopolskie, L=Krakow, O=Cisco,
OU=Cisco TAC, CN=Cisco"     
12[CFG] reached self-signed root ca with a path length of 0      
12[IKE] authentication of '10.48.64.15' with RSA signature successful         
12[IKE] IKE_SA android[4] established between 10.147.24.153[C=PL,
ST=Malopolska, L=Krakow, O=Cisco, OU=TAC,
CN=android]...10.48.64.15[10.48.64.15]  
    
12[IKE] scheduling rekeying in 35413s            
12[IKE] maximum IKE_SA lifetime 36013s            
12[IKE] installing new virtual IP 192.168.0.3           
12[IKE] received ESP_TFC_PADDING_NOT_SUPPORTED, not using ESPv3 TFC padding
12[IKE] CHILD_SA android{4} established with SPIs ecb3af87_i b2279175_o and
TS 192.168.0.3/32 === 0.0.0.0/0    
12[DMN] setting up TUN device for CHILD_SA android{4}         
12[DMN] successfully created TUN device

Cisco IOS ソフトウェアでは、署名および確認に RSA が使用されます。 前のシナリオでは、確認に EAP が使用されました。

BSAN-2900-1#show crypto ikev2 sa detailed 
 IPv4 Crypto IKEv2  SA

Tunnel-id Local                 Remote                fvrf/ivrf          Status
1         10.48.64.15/4500      10.147.24.153/44527   none/none          READY  
      Encr: AES-CBC, keysize: 128, Hash: SHA96, DH Grp:14, Auth sign: RSA,
Auth verify: RSA

      Life/Active Time: 86400/16 sec
      CE id: 1010, Session-id: 3
      Status Description: Negotiation done
      Local spi: A03D273FC75EEBD9       Remote spi: E53A57E359A8437C
      Local id: 10.48.64.15
      Remote id: cn=android,ou=TAC,o=Cisco,l=Krakow,st=Malopolska,c=PL
      Local req msg id:  0              Remote req msg id:  2         
      Local next msg id: 0              Remote next msg id: 2         
      Local req queued:  0              Remote req queued:  2         
      Local window:      5              Remote window:      1         
      DPD configured for 0 seconds, retry 0
      Fragmentation not configured.
      Extended Authentication not configured.
      NAT-T is detected  outside
      Cisco Trust Security SGT is disabled
      Assigned host addr: 192.168.0.3
      Initiator of SA : No

Android の状態の確認は、前のシナリオと同様です。

NAT の背後にある VPN ゲートウェイ - strongSwan および Cisco IOS ソフトウェアの制限

この例では、strongSwan 証明書確認の制限について説明します。

Cisco IOS ソフトウェア VPN ゲートウェイの IP アドレスが 172.16.1.1 から 10.147.25.80 に静的に変換されることを前提としています。 EAP 認証が使用されます。

116837-config-strongswan-ios-09.jpg

Cisco IOS ソフトウェアに 172.16.1.1 と 10.147.25.80 の両方の Subject Alternative Name があることを前提としています。

EAP 認証が成功した後、Android では、確認を実行し、Subject Alternative Name 拡張の Android 設定で使用されたピアの IP アドレス(10.147.25.80)を検索します。 確認が失敗します。

116837-config-strongswan-ios-10.png

ログは次の内容を示しています。

constraint check failed: identity '10.147.25.80' required

Android が最初の Subject Alternative Name 拡張(172.16.1.1)しか読み取れないため、障害が発生しました。

ここでは、Cisco IOS ソフトウェア証明書の Subject Alternative Name に逆順の 2 つのアドレス (10.147.25.80 および 172.16.1.1)があると仮定します。 Android は、に VPN のゲートウェイの IP アドレス(172.16.1.1)である IKEID を受信すると、確認を実行します。

116837-config-strongswan-ios-11.png

ログは次の内容を示しています。

no trusted RSA public key found for '172.16.1.1'

したがって、Android は、IKEID を受信すると、Subject Alternative Name で IKEID を検索する必要がありますが、最初の IP アドレスしか読み取れません。

: EAP 認証では、Cisco IOS ソフトウェアによって送信された IKEID がデフォルトで IP アドレスになっています。 RSA 認証では、IKEID がデフォルトで証明書 DN になっています。 これらの値を手動で変更するには、ikev2 プロファイルで identity コマンドを使用します。

確認

設定例では、確認およびテストの手順を使用できます。

トラブルシューティング

ここでは、設定のトラブルシューティングに役立つ情報について説明します。

strongSwan CA の複数の CERT_REQ

strongSwan の証明書の設定が自動選択(デフォルト)の場合、Android は 3 番目のパケットでローカル ストアのすべての信頼できる証明書の CERT_REQ を送信します。 Cisco IOS ソフトウェアは、多数の証明書要求をサービス拒否攻撃と認識するため、要求をドロップすることがあります。

*Jul 15 07:54:13: IKEv2:number of cert req exceeds the reasonable limit (100)

DVTI のトンネル発信元

仮想トンネル インターフェイス(VTI)上でトンネル発信元を設定することが広く一般的に採用されていますが、ここでは不要です。 ダイナミック VTI(DVTI)に tunnel source コマンドがあると仮定します。

interface Virtual-Template1 type tunnel
 ip unnumbered GigabitEthernet0/0
tunnel source GigabitEthernet0/0
 tunnel mode ipsec ipv4
 tunnel protection ipsec profile PROF

認証後、Cisco IOS ソフトウェアは、仮想テンプレートからクローニングされた仮想アクセス インターフェイスを作成しようとすると、次のようにエラーが返されます。

*Aug  1 13:34:22 IKEv2:Allocated addr 192.168.0.9 from local pool POOL
*Aug  1 13:34:22 IKEv2:(SA ID = 1):Set received config mode data
*Aug  1 13:34:22 IKEv2:% DVTI create request sent for profile PROF with PSH
index 1
*Aug  1 13:34:22 IKEv2:Failed to process KMI delete SA message with error 4
*Aug  1 13:34:24 IKEv2:Got a packet from dispatcher
*Aug  1 13:34:24 IKEv2:Processing an item off the pak queue
*Aug  1 13:34:24 IKEv2:Negotiation context locked currently in use

障害の 2 秒後に、Cisco IOS ソフトウェアは Android から再送信された IKE_AUTH を受信します。 そのパケットはドロップされます。

Cisco IOS ソフトウェアのバグや拡張要求

  • Cisco Bug ID CSCui46418、「IOS Ikev2 の IP アドレスが RSA 認証の ID として送信される(IOS Ikev2 ip address sent as identity for RSA authentication)」
    この不具合は、確認を実行するために証明書の IKEID を検索するときに strongSwan が正しい Subject Alternative Name(IP アドレス)を認識できる限りは問題になりません。
  • Cisco Bug ID CSCui44976、「IOS PKI で X509v3 拡張の Subject Alternative Name が正しく表示されない(IOS PKI incorrectly displayed X509v3 extension Subject Alternative Name)」
    この不具合が発生するのは、Subject Alternative Name に複数の IP アドレスがある場合だけです。 最後の IP アドレスだけが表示されますが、証明書の使用には影響しません。 証明書全体が送信され、正しく処理されます。
  • Cisco Bug ID CSCui44783、「subject-alt-name 拡張で CSR を生成できる IOS ENH PKI 機能(IOS ENH PKI ability to generate CSR with subject-alt-name extension)」
  • Cisco Bug ID CSCui44335、「ASA ENH 証明書 x509 拡張が表示される」

関連情報


関連するシスコ サポート コミュニティ ディスカッション

シスコ サポート コミュニティは、どなたでも投稿や回答ができる情報交換スペースです。


Document ID: 116837