admin

生成和交换预共享密钥

admin 安全防护 2023-01-09 409浏览 0

预共享密钥

让我们以一个简单的认证工具开始:预共享密钥。为了使预共享密钥认证正常工作,每台主机上都定义了一个通用的密钥。这个密钥的定义将密钥与远程节点ISAKMP身份绑定在一起。从安全性方面而言,不好的做法是在每一对节点使用唯一的密钥。预共享密钥是通过使用全局配置命令<crypto isakmp key {0=unencrypted | 6=encrypted} {key string} {ip addressorhostname}>配置的。

ISAKMP身份是远程路由器向本地节点发送ISAKMP信息的接口。如果路由器在多个接口上支持,那么主机名应该当作ISAKMP身份。使用全局命令<crypto isakmp identity {hostname | address}>可以配置路由器在它的ISAKMP节点协商中发送它的主机名。在默认情况下是使用路由器的ISAKMP接口IP地址。如果主机名选项被用于识别ISAKMP协商,那么远程节点主机需要有主机名到IP地址的映射,这是通过<ip host {hostname} {IP address1} {IP Address 2…IP Address 8}>实现的。

路由器也可以使用DNS来进行主机名解析,但是本地主机名定义速度更快而且不会因为DNS服务器的问题而中断。下面是一个两个路由器间的预共享key配置例子。本地路由器发送它的主机名,然后远程机器发送它的IP地址。首先就是本地节点路由器上的配置(IP地址和主机名密钥都已经定义了):

! 
hostnameoutlan-rt01 
! 
! 
cryptoisakmppolicy10 
encr3des 
hashmd5 
authenticationpre-share 
group2 
cryptoisakmpkeysecretkeyaddress192.168.10.3 
cryptoisakmpidentityhostname 
! 
interfaceFastEthernet0/0 
ipaddress172.30.80.17255.255.255.252 
!

远程对等路由器的配置是这样的:

! 
hostnameinlan-rt01 
! 
iphostoutlan-rt01172.30.80.17 
! 
! 
cryptoisakmppolicy10 
encr3des 
hashmd5 
authenticationpre-share 
group2 
cryptoisakmpkeysecretkeyaddressoutlan-rt01 
! 
interfaceFastEthernet1/0 
ipaddress192.168.10.3255.255.255.252 
!

对于这个例子有两点需要注意。第一点要注意的是只有在本地路由器的配置中有一个ISAKMP身份定义。这是因为IP地址是默认发送的。第二点要注意的是,作为一个规则,你不应该混合使用ISAKMP的身份方法。或者全使用IP地址,或者全使用主机名,这样可以最小化配置错误。在以后的文章中,当我们探讨拓扑配置的内容时,我们将更进一步地研究如何使用主机名来进行ISAKMP身份验证。

RSA 现时标记 现在我们接着学习配置RSA现时标记来进行认证。这个ISAKMP策略例子是使用手动地RAS密钥认证交换。

cryptoisakmppolicy15 
encr3des 
hashmd5 
authenticationrsa-encr 
group5 
lifetime300

如果说我们想要在outlan-rt01和inlan-rt01间应用上面的远程认证密钥例子。我们需要对ISAKMP政策做的唯一改变是增加认证参数(在这个例子中,两个主机使用其IP地址作为ISAKMP身份):

! 
hostnameoutlan-rt01 
! 
! 
cryptoisakmppolicy10 
encr3des 
hashmd5 
authenticationrsa-encr 
group2 
! 
interfaceFastEthernet0/0 
ipaddress172.30.80.17255.255.255.252 

hostnameinlan-rt01 
! 
! 
cryptoisakmppolicy10 
encr3des 
hashmd5 
authenticationrsa-encr 
group2 
! 
interfaceFastEthernet1/0 
ipaddress192.168.10.3255.255.255.252

为了对outlan-rt01和inlan-rt01进行认证,必须做两件事情。首先,每个路由器都必须生成一对RSA密钥(公开的和私有的)。然后,它们必须共享它们的公钥。这个基本过程在两个路由器上是一样的,因此我们可以看看outlan-rt01的过程。为了生成一对RAS密钥,路由器必须定义一个的主机名和IP域名。

router(config)#hostnameoutlan-rt01 
outlan-rt01(config)#ipdomain-nameoutlan.net 

一旦配置了主机名和IP域名,下一步就是生成RSA 密钥。IOS支持可输出和不可输出的密钥,而且这两种密钥类型都支持RSA现时标记认证。然而,生成可输出密钥是个比较好的做法。这样如果你的环境部署了认证授权,你就可以使用相同的密钥,这使转变更容易些。

密钥的生成是通过使用全局配置命令完成的:对于不可输出密钥是<crypto key generate rsa label {label string},而对于可输出密钥则是<crypto key generate rsa exportable label {label string}>。标记(label)是可选择的;如果没有指定标记,那么密钥名称将是hostname.domain-name。对密钥进行标记是很好的做法,因为有时你会需要多个密钥。标记能够确保你能找到它们并且防止你不小心误写的。对于密钥的模数在大小,IOS支持512到2048位的密钥大小。而1024位的密钥就已经远远满足我们的要求了。

outlan-rt01(config)#cryptokeygeneratersaexportablelabeloutlan-rt01 
Thenameforthekeyswillbe:outlan-rt01 
Choosethesizeofthekeymodulusintherangeof360to2048foryour 
GeneralPurposeKeys.Choosingakeymodulusgreaterthan512maytake 
afewminutes. 
Howmanybitsinthemodulus[512]:1024% 
%Generating1024bitRSAkeys,keyswillbeexportable...[OK] 
outlan-rt01(config)#

公共密钥 现在我们已经生成了RSA密钥,我们需要将我们的公钥放到inlan-rt01上。在开始这个步骤时,我们要看一下outlan-rt01的公钥。从EXEC中,我们使用命令<show crypto key mypubkey rsa {key label}>。如果在路由器上不存在密钥,那么输出就是这样的:

outlan-rt01#showcryptokeymypubkeyrsa 
outlan-rt01# 

如果存在一个或者多个密钥,那么输出就是这样的:

outlan-rt01#showcryptokeymypubkeyrsaoutlan-rt01 
%Keypairwasgeneratedat:01:03:58UTCApr252002 
Keyname:outlan-rt01 
StorageDevice:notspecified 
Usage:GeneralPurposeKey 
Keyisexportable. 
KeyData: 
30819F300D06092A864886F70D010101050003818D00308189028181009F100B 
36665972E97AD0B1BC86357966B67706F9B009E939FF9C2459D642505B45B2EF 
6F6EBA572635235ACCC2DEF711653C33956E92BD45ED2B4ECDEFB15F40CCAE7C 
F5E0644517FEAF2B75BD936CE75465A09F7EEB521D387EBBE78B553B1E56957D 
4E607481E3CF04828C672F6DF772170D6B599060BB96D7B29DEA29E7CD0203010001 
outlan-rt01# 

有时候,可能我们喜欢只有一个密钥,或者我们只想要一个密钥时却生成了两个。为了删除一个密钥,我们可以在全局配置模式中运行<crypto key zeroize rsa {key name}>。一旦key被删除,删除结果会马上生效且不能恢复。因此,在你决定要“化零”一个密钥时一定要小心。下面是一个删除一个名为outlan-rt01.outlan.net的密钥的例子:

outlan-rt01#configt 
Enterconfigurationcommands,oneperline.EndwithCNTL/Z. 
outlan-rt01(config)#cryptokeyzeroizersaoutlan-rt01.outlan.net 
%Keystoberemovedarenamednamed'outlan-rt01.outlan.net'. 
%Allroutercertsissuedusingthesekeyswillalsoberemoved. 
Doyoureallywanttoremovethesekeys?[yes/no]:yes 
outlan-rt01(config)# 
TheRSAkeysarestoredintheprivate-configfileonthenvramfilesystem: 
outlan-rt01#dirnvram: 
Directoryofnvram:/ 
27-rw-751startup-config 
28----24private-config 
1-rw-0ifIndex-table 
2----27persistent-data 
29688bytestotal(26813bytesfree) 
outlan-rt01# 

这样,我们知道如何创建和删除RAS密钥了,而且我们已经为outlan-rt01建立了一个密钥。我们还需要配置inlan-rt01来使用这个密钥。这是通过将outlan-rt01的RSA的公钥添加到inlan-rt01公共密钥链中实现的。

为了在outlan-rt01上查看这个公钥,我们这样运行:

outlan-rt01#shcryptokeymypubkeyrsaoutlan-rt01 
%Keypairwasgeneratedat:01:40:40UTCApr252002 
Keyname:outlan-rt01 
StorageDevice:notspecified 
Usage:GeneralPurposeKey 
Keyisexportable. 
KeyData: 
30819F300D06092A864886F70D010101050003818D0030818902818100E45800 
259A0BB9D0D1E8472D9E50456EB03D8B1F03F1F3C2B93EE635888B31DF2E3384 
71C7C33111D6308DE41511C5ADC45E2B340B458B63DC16E7AA9FE214C35941F1 
E3A5B136752D963C94B7892BB8A5B1F5D13042D96754DDDB40DAEFD6D50A0AF2 
255499F6448F7F59E28237927969687548649C7A2283830528622634A30203010001 
outlan-rt01# 

在我们添加密钥到inlan-rt01公共的公钥链之前,让我们先看看这个密钥是否已经在inlan-rt01上定义了。(经常检查是个很好的方式,即使你知道它并不在那):

inlan-rt01#shcryptokeypubkey-chainrsa 
Codes:M-Manuallyconfigured,C-Extractedfromcertificate 
inlan-rt01# 

密钥并不在,因此我们需要手动定义和导入一个。在做这个步骤时,我们必须备份outlan-rt01的密钥或者在路由器上打开一个EXEC会话以便我们可以备份密钥。然后我们在inlan-rt01上打开EXEC会话,进入配置样式然后进入公钥链配置模式:

inlan-rt01#configt 
Enterconfigurationcommands,oneperline.EndwithCNTL/Z. 
inlan-rt01(config)# 
inlan-rt01(config)#cryptokeypubkey-chainrsa 
inlan-rt01(config-pubkey-chain)# 
Onceinkeychainmode,weneedtofirstassociateanIPaddresswiththekey.TherouterwillbeusingitsIPaddressasitsISAKMPidentity. 
inlan-rt02(config-pubkey-chain)#addressed-key172.30.80.18 

一旦输入<addressed-key>命令,路由器就进入了配置公钥模式。把这个key粘贴到keychain上,我们先输入<key-string>指令。一旦这个指令输入,路由器就进入公钥配置模式,同时提示我们从其他路由器粘贴密钥数据。我们只需要拷贝密钥数据域(从outlan-rt01上开始的密钥数据):

30819F300D06092A864886F70D010101050003818D0030818902818100E45800 
259A0BB9D0D1E8472D9E50456EB03D8B1F03F1F3C2B93EE635888B31DF2E3384 
71C7C33111D6308DE41511C5ADC45E2B340B458B63DC16E7AA9FE214C35941F1 
E3A5B136752D963C94B7892BB8A5B1F5D13042D96754DDDB40DAEFD6D50A0AF2 
255499F6448F7F59E28237927969687548649C7A2283830528622634A30203010001 
inlan-rt02(config-pubkey-key)#key-string 
Enterapublickeyasahexadecimalnumber.... 
inlan-rt01(config-pubkey)#$0101050003818D0030818902818100E45800 
inlan-rt01(config-pubkey)#$B03D8B1F03F1F3C2B93EE635888B31DF2E3384 
inlan-rt01(config-pubkey)#$C45E2B340B458B63DC16E7AA9FE214C35941F1 
inlan-rt01(config-pubkey)#$A5B1F5D13042D96754DDDB40DAEFD6D50A0AF2 
inlan-rt01(config-pubkey)#quit 
inlan-rt01(config-pubkey-key)#exit 
inlan-rt01(config-pubkey-chain)#exit 
inlan-rt01(config)#exit 
inlan-rt01# 

为了确保密钥已经正确输入,我们可以对比一下密钥。在inlan-rt01上,运行<show crypto key pubkey-chain rsa address xxx.xxx.xxx.xxx >命令:

inlan-rt01#shcryptokeypubkey-chainrsaaddress172.30.80.17 
Keyaddress:172.30.80.17 
Usage:GeneralPurposeKey 
Source:Manuallyentered 
Data: 
30819F300D06092A864886F70D010101050003818D0030818902818100E45800 
259A0BB9D0D1E8472D9E50456EB03D8B1F03F1F3C2B93EE635888B31DF2E3384 
71C7C33111D6308DE41511C5ADC45E2B340B458B63DC16E7AA9FE214C35941F1 
E3A5B136752D963C94B7892BB8A5B1F5D13042D96754DDDB40DAEFD6D50A0AF2 
255499F6448F7F59E28237927969687548649C7A2283830528622634A30203010001 
inlan-rt01# 

然后,在outlan-rt01上运行<show crypto key mypubkey rsa [key label}>:

outlan-rt01#shcryptokeymypubkeyrsaoutlan-rt01 
%Keypairwasgeneratedat:01:40:40UTCApr252002 
Keyname:outlan-rt01 
StorageDevice:notspecified 
Usage:GeneralPurposeKey 
Keyisexportable. 
KeyData: 
30819F300D06092A864886F70D010101050003818D0030818902818100E45800 
259A0BB9D0D1E8472D9E50456EB03D8B1F03F1F3C2B93EE635888B31DF2E3384 
71C7C33111D6308DE41511C5ADC45E2B340B458B63DC16E7AA9FE214C35941F1 
E3A5B136752D963C94B7892BB8A5B1F5D13042D96754DDDB40DAEFD6D50A0AF2 
255499F6448F7F59E28237927969687548649C7A2283830528622634A30203010001 
outlan-rt01# 


在outlan-rt01和inlan-rt01上的密钥互相匹配了。现在我们需要做的就是重复整个过程,这样inlan-rt01的公共RSA密钥就在outlan-rt01的RSA共公密钥链上了。我敢肯定到这个时候你就理解了涉及使用RSA现时标记的做法了。反复提醒自己“安全保证代价不匪——或者不容易”是没有坏处的。

继续浏览有关 安全 的文章
发表评论