(一)阶段1策略

1、启动ISAKMP(默认是开启的)

R1(config)#crypto isakmp enable

 

2、建立策略(保护阶段1--管理连接)

R1(config)#crypto isakmp policy ?
  <1-10000>  Priority of protection suite

R1(config-isakmp)#encryption ?
  3des  Three key triple DES
  aes   AES - Advanced Encryption Standard.
  des   DES - Data Encryption Standard (56 bit keys).

R1(config-isakmp)#hash ?
  md5  Message Digest 5
  sha  Secure Hash Standard

R1(config-isakmp)#authentication ?
  pre-share  Pre-Shared Key
  rsa-encr   Rivest-Shamir-Adleman Encryption
  rsa-sig    Rivest-Shamir-Adleman Signature

R1(config-isakmp)#group ?
  1  Diffie-Hellman group 1
  2  Diffie-Hellman group 2
  5  Diffie-Hellman group 5

R1(config-isakmp)#lifetime ?
  <60-86400>  lifetime in seconds

默认策略:

Default protection suite(65535)
        encryption algorithm:     DES - Data Encryption Standard (56 bit keys).
        hash algorithm:              Secure Hash Standard
        authentication method:  Rivest-Shamir-Adleman Signature
        Diffie-Hellman group:     #1 (768 bit)
        lifetime:                          86400 seconds, no volume limit

 

3、策略协商:A发起连接到B,A把整个管理连接策略的列表发送给B,B将A的最高优先级策略(最低的号码)和本地策略列表逐一进行比较,以找到一个匹配;如果没有找到匹配,B将A的第二个最高优先级策略和本地策略列表逐一进行比较,诸如此规则,直到找到一个匹配。基于这个过程,连接的发起方将影响使用哪个策略。一旦找到了匹配,DH被执行,接着执行设备验证。

 

4、启动IKE死亡对等体检测(DPD)

(默认不开启,需要show run才能看到DPD配置了;debug crypto isakmp 看DPD的操作)

DPD允许Cisco的IPSec的对等体通过管理连接使用keepalive的机制,发现一个死亡的对等体。DPD工作的两种模式:

①周期性的------总是发送周期性的keepalive来确保远端的对等设备还是存活的;

②按需的(默认)--------当本地的对等体设备没有流量发送,也没有收到远端对等设备的流量时,才会触发。

R1(config)#crypto isakmp keepalive ?
  <10-3600>  Number of seconds between keep alives

R1(config)#crypto isakmp keepalive 10 ?
  <2-60>         Number of seconds between retries if keepalive fails
  on-demand  When using Dead Peer Detection (DPD), send DPD messages only asneeded
  periodic        When using Dead Peer Detection (DPD), send periodic DPD messages
 

 

 

 

(二)阶段1设备验证

Cisco路由器支持3种验证IPSec设备(对等设备)的方法:预共享密钥、RSA加密随机数和RSA签名(数字证书)。

1、ISAKMP/IKE身份类型

ISAKMP/IKE的身份类型指定了每一台对等体设备是如何把它的身份信息发送给远端的对等体设备的;它可以发送它的IP地址(默认)或主机名。这只用于当预共享密钥或者RSA加密随机数被使用的情况下。这个信息被远端对等设备用来确定应当使用什么样的预共享密钥信息来执行设备验证。如果本地设备总是使用一个IP地址来发起或者终止IPSec会话时,用默认的IP地址身份类型;如果本地设备使用不止一个IP地址(超过一个接口)来和远端设备通信的话,应该使用主机名身份类型。

R1(config)#crypto isakmp identity ?
  address     Use the IP address of the interface for the identity
  dn              Use the distinguished name of the router cert for the identity
  hostname   Use the hostname of the router for the identity

如果使用了hostname 参数,应当同时配置一个静态的解析表来把名字解析成与对等设备关联的多个IP地址。

R1(config)#ip host ?
  WORD  Name of host

R1(config)#ip host R2 ?
  A.B.C.D     Host IP address
对每一台主机名,可以列出最多8个IP地址。

 

2、预共享密钥

①配置预共享密钥

R1(config)#crypto isakmp key ?
  0  Specifies an UNENCRYPTED password will follow
  6  Specifies an ENCRYPTED password will follow

R1(config)#crypto isakmp key 0 cisco ?
  address   define shared key with IP address
  hostname  define shared key with hostname

R1(config)#crypto isakmp key 0 cisco address 23.1.1.3 ?
  A.B.C.D   Peer IP subnet mask(不配置的话默认255.255.255.255)
  no-xauth  Bypasses XAuth for this peer
 

利用子网掩码的能力,可以通配一个密钥,使其能够用于多个对等体:

R1(config)#crypto isakmp key 0 cisco address 0.0.0.0 0.0.0.0

crypto isakmp key 命令用于非远程访问设备的验证。如果同时存在L2L和远程访问的会话终止在一台路由器上,就会有问题。这种情况下,路由器将假设XAUTH(用户验证)会为两种连接执行。这对于L2L的会话,将会产生问题。所以建议即使当前没有远程访问会话,也应在预共享密钥的配置中添加no-xauth 参数。

②查看预共享密钥

R1#show crypto isakmp key
Keyring               Hostname/Address                   Preshared Key

default                23.1.1.3                                    cisco


 

3、RSA加密的随机数

使用RSA加密随机数,在每一台对等设备上建立一个公钥/私钥对的组合,并在远端对等设备上手动编码本端对等设备上的公钥,在本端对等设备上编码远端对等设备的公钥。

①产生RSA加密随机数(密钥对)

R1(config)#hostname R1
R1(config)#ip domain-name cisco.com

R1(config)#crypto key generate rsa ?
  general-keys  Generate a general purpose RSA key pair for signing and encryption
  usage-keys    Generate separate RSA key pairs for signing and encryption
 

general-keys 参数产生一对单独的公钥/私钥组合用于签名的目的;

usage-keys   产生两对密钥,一对用于签名,一对用于加密。

②多个RSA密钥对

为不同的对等体设备使用不同的密钥,需要建立多个RSA的密钥对,每一个密钥对的策略可以匹配远端对等设备的策略。路由器上的每一个RSA密钥对都有一个唯一的标记。产生密钥时如果没有指定的话,默认为路由器的FQDN(R1.cisco.com)。

使用以下命令建立不同的密钥对:

R1(config)#crypto key generate rsa general-keys ?
  exportable  Allow the key to be exported
  label           Provide a label
  modulus     Provide number of modulus bits on the command line
 

R1(config)#crypto key generate rsa general-keys label R2

③建立对等设备的公钥

R1(config)#crypto key pubkey-chain rsa

R1(config-pubkey-chain)#addressed-key ?     (基于crypto isakmp identity命令定义的IP地址身份类型)
  A.B.C.D   IP address      

R1(config-pubkey-chain)#named-key ?           (基于crypto isakmp identity命令定义的主机名身份类型)
  WORD    Name of key

R1(config-pubkey-chain)#addressed-key 23.1.1.3 ?(可选项)
  encryption   Key is to be used for encryption only

  signature    Key is to be used for verifying signatures only(默认)
 

R1(config-pubkey-key)#key-string ?
 

输入远端对等设备的公钥之后

R1(config-pubkey)#quit

查看远端对等设备的公钥

R1#show crypto key pubkey-chain rsa               
R1#sho crypto key pubkey-chain rsa address 23.1.1.3

④清除RAS密钥

R1(config)#crypto key pubkey-chain rsa

R1(config-pubkey-chain)#no addressed-key 23.1.1.3

清除本地路由器的公钥/私钥对

R1(config)#crypto key zeroize rsa ?
  WORD  RSA keypair label
 

 

4、数字证书和路由器的注册

(1)使用SCEP(简单证书申请协议)申请证书

步骤:

①核实证书可以容纳在NVRAM(可选);

②配置一个主机名和域名(必须);

③产生一个RSA密钥对(必须);

④定义一个证书授权或者CA(必须);

⑤ 下载和验证CA的证书(必须);

⑥请求路由器的×××书(必须);

⑦存储CA和×××书(必须);

⑧核实证书的操作(可选)。

 

步骤①:核实证书可以容纳在NVRAM

默认情况下,存储在NVRAM的东西:路由器的×××书、用于建立和核实路由器上的PKCS#10消息的签名的路由器的私钥和公钥、CA的证书、从CA获取的根证书、RA的证书和CRL。

如果NVRAM空间不够存储,除了以下信息必须存储在NVRAM:路由器的公钥和私钥以及CA证书上的签名;其他所有证书信息可以通过命令R1(config)#crypto ca certificate query  在路由器启动时,下载到本地路由器上,并且存储在RAM中。这个过程被称为查询模式。
 

步骤②和步骤③:名字和RSA密钥对

在路由器上需要一个私钥来产生路由器的身份信息(PKCS#10)的签名,需要一个公钥来核实PKCS#10信息的签名。

R1(config)#hostname R1
R1(config)#ip domain-name cisco.com
R1(config)#crypto key generate rsa

 

步骤④:定义一个CA

R1(config)#crypto { ca | pki } trustpoint CA_name

crypto  ca  trustpoint 指定了用于和CA交互的CA的属性;CA_name通常是CA的FQDN---CA管理员会提供这个值。

R1(ca-trustpoint)#enrollment url CA_url

指定了请求证书的时候,与CA交互的URL---CA管理员会提供这个值。与CA交互只有两个必须的命令,剩余命令是可选的。

R1(ca-trustpoint)#enrollment http-proxy proxy_IP_address proxy_port_#

如果CA在一个Web代理的后面,需要指定代理的IP地址(或者FQDN)和端口号

R1(ca-trustpoint)#enrollment mode ra

指定了CA是否提供RA,不需要配置这个命令,因为IOS路由器会自动的决定CA是否正在使用RA;如果路由器确定RA正在使用,这个命令将会自动地出现在路由器的配置文件中。

R1(ca-trustpoint)#enrollment retry period minutes   

R1(ca-trustpoint)#enrollment retry count number

enrollment retry period 命令指定了路由器再次向CA请求证书之前,等待来自CA证书的时间,默认1min;enrollment retry count 命令指定了路由器在放弃之前,连续多少次联系CA请求证书,默认路由器会连续请求,而且永远不会放弃。

R1(ca-trustpoint)#crl { query url | optional }

query参数指定了一台CRL所位于的LDAP或者HTTP服务器格式为“{ ldap | http }://IP_address/other_URL_info”。optional参数指定了CRL可能会也可能不会被你的CA使用。因此在找不到CRL的情况下,你的路由器将会接受对等设备的证书。如果你的CA使用了CRL,不要配置这个命令。
R1(ca-trustpoint)#ocsp url OCSP_server_url

在线证书状态协议(OCSP)与CRL相比优点:首先它运行采用HTTP,而不是LDAP;其次,它可以给边界设备提供比CRL更频繁的更新(CRL只是周期性的);第三点,OCSP允许配置一台中央的OCSP服务器来收集和更新来自多个CA的CRL,简化并加速了一台边界设备的CRL的检查过程。

ocsp url 命令指定了吊销证书的OCSP的位置,如果CA证书上面已经有了这个位置,配置命令会覆盖CA证书上面的信息。

R1(ca-trustpoint)#revocation-check method1 [ method2 [ method3 ] ]
指定了用于检查证书吊销状态的方法或者方法的顺序;三种方法: crl(默认)、 none、ocsp;none表示不做证书检查(新版IOS中,这个命令替代了crl optional)

R1(ca-trustpoint)#query certificate

指定了这个特定的信任点的任何证书信息不会存储在NVRAM中----这个命令与R1(config)#crypto ca certificate query 相比,后者是全局的,它影响定义在路由器上的所有CA,而前者只影响当前的信任点的配置。
R1(ca-trustpoint)#primary

指定了这个特定的信任点在路由器上被分配给主要的CA角色

R1(ca-trustpoint)#source interface name_and_number_of_interface

指定了发送给CA的流量所使用的源接口,如果省略了这个命令,将使用出接口作为源接口。

 

步骤⑤:下载和验证CA的证书

定义好了路由器和CA之间的交互后,就可以使用以下命令来下载和验证CA自己签发的证书。
R1(config)#crypto { ca | pki } authenticate CA_name

 CA_name与crypto { ca | pki } trustpoint 命令配置的名字一致;一旦下载了CA证书,会被提示接受它:在接受它之前,首先核实自签发证书上的CA签名。

 

步骤⑥:请求路由器的×××书

在请求路由器的×××书之前,首先必须已下载和核实了步骤⑤中的CA证书。这是必须的,使得路由器可以使用CA证书来核实收到的任何证书(从同一个CA域中),包括路由器自己的×××书。

完成以上步骤后就可以准备建立PKCS#10信息了,它将通过SCEP,使用以下命令发送给CA。

R1(config)#crypto { ca | pki } enroll  CA_name

CA_name与crypto { ca | pki } trustpoint 命令配置的名字一致;首先将会有提示输入一个口令,这个口令有两个目的:被CA用来控制谁可以请求一个新的证书,被CA的管理员用来吊销一个有效的证书。接着可以选择,在×××书中包括路由器的序列号或者IP地址。最后,在证书请求中回答了yes,路由器会综合PKCS#10的信息,把它通过HTTP发送给CA。一旦请求被批准,并产生了×××书,路由器将会自动地下载×××书。

 

步骤⑦:存储CA和×××书

假设有足够的NVRAM来存储路由器的证书组件,最后一个步骤就是使用 R1#copy running-config startup-config  命令将这些组件存储到NVRAM。如果在请求的×××书被安装和存储之前路由器重启了,需要重新执行crypto ca enroll 和 crypto ca authenticate 命令,这两个命令不会存储在路由器的NVRAM中。

 

步骤⑧:核实证书的操作

R1#show crypto { ca | pki } trustpoints

//显示了除信任点是如何配置在路由器之外,还有CA证书上发现的一些信息;
R1#show crypto { ca | pki } certificates

//查看路由器上的任何证书(路由器的×××书、CA的证书等...)

 

为了从CA或者配置的LDAP服务器上请求当前的CRL,使用以下命令:

R1(config)#crypto ca crl request CA_name

CA_name与crypto { ca | pki } trustpoint 命令配置的名字一致;

R1#show crypto { ca | pki } crls

//查看CRL的状态

 

可以使用 debug crypto pki  命令来故障诊断和排除与请求证书和使用证书有关的问题。

 

删除证书:

首先使用R1#show crypto ca certificates 命令来查看证书,查找要吊销的证书的序列号;

接着执行下面两条命令:

R1(config)#crypto ca certificate chain CA_name

R1(config-cert-chain)#no certificate certificate_serial_number

一旦证书被删除了,就可以使用 R1(config)#crypto key zeroize rsa 命令清除与之相关的RSA的密钥对。

R1(config)#no crypto ca trustpoint CA_name

//该命令清除不止信任点的配置(相关的信任点命令),而且还有CA证书、任何RA证书、任何CRL和路由器的×××书。
 

 

 

 

管理连接的状态

状态

解释

MM_NO_STATE

当使用主模式的时候,ISAKMP SA处于早期状态,还没有完成;

MM_SA_SETUP

当使用主模式的时候,这个策略参数已经成功地在对等设备之间协商了

MM_KEY_EXCH

当使用主模式的时候,对等体设备已经执行了DH,并建立了一个共享的密钥,但是设备验证还没有发生

MM_KEY_AUTH

当使用主模式的时候,对等体设备已经通过了验证,将会过渡到QM_IDLE状态

AG_NO_STATE

当使用积极模式的时候,ISAKMP SA处于早期状态,还没有完成;

AG_INIT_EXCH

积极模式的第一个阶段已经完成,但是设备验证还没有执行

AG_AUTH

当使用积极模式的时候,对等体设备已经通过了验证,将会过渡到QM_IDLE状态

QM_IDLE

管理连接已经被构建,可以用于ISAKMP/IKE阶段2期间来构建数据连接。