预共享密钥
让我们以一个简单的认证工具开始:预共享密钥。为了使预共享密钥认证正常工作,每台主机上都定义了一个通用的密钥。这个密钥的定义将密钥与远程节点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现时标记的做法了。反复提醒自己“安全保证代价不匪——或者不容易”是没有坏处的。
转载请注明:IT运维空间 » 安全防护 » 生成和交换预共享密钥
发表评论