本章介绍如何为系统配置 Internet 密钥交换 (Internet Key Exchange, IKE)。配置 IKE 后,它将自动为网络上的 IPsec 生成加密材料。本章包含以下信息:
有关 IKE 的概述信息,请参见第 22 章。有关 IKE 的参考信息,请参见第 24 章。有关更多过程,请参见 ikeadm(1M)、ikecert(1M) 和 ike.config(4) 手册页的示例部分。
可以使用预先共享的密钥、自签名证书和证书颁发机构 (Certificate Authority, CA) 所颁发的证书来验证 IKE。规则将特定的 IKE 验证方法与受保护的端点相关联。因此,可以在系统上使用一种或所有 IKE 验证方法。利用指向 PKCS #11 库的指针,证书可以使用连接的硬件加速器。
配置 IKE 后,完成使用 IKE 配置的 IPsec 任务。下表提供了着重说明特定 IKE 配置的任务列表。
任务 |
说明 |
参考 |
---|---|---|
使用预先共享的密钥配置 IKE |
通过使两个系统共享一个密钥来保护它们之间的通信。 | |
使用公钥证书配置 IKE |
使用公钥证书保护通信。这些证书可以是自签名的,也可以由 PKI 组织认证。 | |
跨 NAT 边界 |
将 IPsec 和 IKE 配置为与移动系统进行通信 | |
将 IKE 配置为在连接的硬件上生成和存储公钥证书 |
使 Sun Crypto Accelerator 1000 板或 Sun Crypto Accelerator 4000 板可以加快 IKE 操作。此外,使 Sun Crypto Accelerator 4000 板可以存储公钥证书。 | |
调整阶段 1 密钥协商参数 |
更改 IKE 密钥协商的时间安排。 |
下表包含使用预先共享的密钥配置和维护 IKE 的过程的链接。
任务 |
说明 |
参考 |
---|---|---|
使用预先共享的密钥配置 IKE |
创建 IKE 策略文件和要共享的一个密钥。 | |
在正运行的 IKE 系统上刷新预先共享的密钥 |
在通信系统上为 IKE 添加新的加密材料。 | |
将预先共享的密钥添加到正运行的 IKE 系统 |
将新的 IKE 策略项和新的加密材料添加到当前实施 IKE 策略的系统。 | |
检查预先共享的密钥是否完全相同 |
在两个系统上显示预先共享的密钥,以查看它们是否完全相同。 |
使用预先共享的密钥是验证 IKE 的最简单方法。如果要将两个系统配置为使用 IKE,而且您是这两个系统的管理员,则使用预先共享的密钥是一个良好的选择。但是,与公钥证书不同,预先共享的密钥与特定的 IP 地址相关联。预先共享的密钥不能用于移动系统或可能重新编号的系统。此外,在使用预先共享的密钥时,不能将 IKE 计算转移到连接的硬件。
IKE 实现提供了采用可变密钥长度的算法。所选的密钥长度是由站点安全性确定的。通常,密钥越长,提供的安全性就越高。
以下过程使用系统名称 enigma 和 partym。请用您的系统名称替换名称 enigma 和 partym。
在系统控制台上,承担主管理员角色或成为超级用户。
主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
远程登录会使安全关键型通信易于遭到窃听。即使以某种方式保护远程登录,系统的安全性也会降至远程登录会话的安全性。请使用 ssh 命令进行安全的远程登录。
在每个系统上,将文件 /etc/inet/ike/config.sample 复制到文件 /etc/inet/ike/config。
在每个系统上的 ike/config 文件中输入规则和全局参数。
此文件中的规则和全局参数应该允许系统的 ipsecinit.conf 文件中的 IPsec 策略可以成功实施。以下是与如何使用 IPsec 保证两个系统之间的通信安全中的 ipsecinit.conf 示例配合使用的 ike/config 示例。
例如,在 enigma 系统上修改 /etc/inet/ike/config 文件:
### ike/config file on enigma, 192.168.116.16 ## Global parameters # ## Phase 1 transform defaults p1_lifetime_secs 14400 p1_nonce_len 40 # ## Defaults that individual rules can override. p1_xform { auth_method preshared oakley_group 5 auth_alg sha encr_alg des } p2_pfs 2 # ## The rule to communicate with partym # Label must be unique { label "enigma-partym" local_addr 192.168.116.16 remote_addr 192.168.13.213 p1_xform { auth_method preshared oakley_group 5 auth_alg sha1 encr_alg aes } p2_pfs 5 } |
auth_method 参数的所有变量都必须在同一行上。
在 partym 系统上修改 /etc/inet/ike/config 文件:
### ike/config file on partym, 192.168.13.213 ## Global Parameters # p1_lifetime_secs 14400 p1_nonce_len 40 # p1_xform { auth_method preshared oakley_group 5 auth_alg sha encr_alg des } p2_pfs 2 ## The rule to communicate with enigma # Label must be unique { label "partym-enigma" local_addr 192.168.13.213 remote_addr 192.168.116.16 p1_xform { auth_method preshared oakley_group 5 auth_alg sha1 encr_alg aes } p2_pfs 5 } |
# /usr/lib/inet/in.iked -c -f /etc/inet/ike/config |
如果站点具有随机数生成器,请使用该生成器。在 Solaris 系统上,可以使用 od 命令。例如,以下命令列显两行十六进制数:
% od -X -A n /dev/random | head -2 f47cb0f4 32e14480 951095f8 2b735ba8 0a9467d0 8f92c880 68b6a40e 0efe067d |
有关 od 命令的说明,请参见如何在 Solaris 系统上生成随机数和 od(1) 手册页。
其他操作系统可能需要 ASCII 加密材料。要以十六进制格式和 ASCII 格式生成相同的密钥,请参见示例 23–1。
利用步骤 5 的输出构造一个密钥。
f47cb0f432e14480951095f82b735ba80a9467d08f92c88068b6a40e |
此过程中的验证算法是 SHA–1,如步骤 3 所示。散列的大小(即验证算法输出的大小)确定预先共享密钥的最小建议大小。SHA–1 算法的输出是 160 位或 40 个字符。示例密钥的长度是 56 个字符,这将提供其他加密材料供 IKE 使用。
在每个系统上创建文件 /etc/inet/secret/ike.preshared。
在每个文件中放置预先共享的密钥。
例如,在 enigma 系统上,ike.preshared 文件的显示与以下信息类似:
# ike.preshared on enigma, 192.168.116.16 #… { localidtype IP localid 192.168.116.16 remoteidtype IP remoteid 192.168.13.213 # enigma and partym's shared key in hex (192 bits) key f47cb0f432e14480951095f82b735ba80a9467d08f92c88068b6a40e } |
在 partym 系统上,ike.preshared 文件的显示与以下信息类似:
# ike.preshared on partym, 192.168.13.213 #… { localidtype IP localid 192.168.13.213 remoteidtype IP remoteid 192.168.116.16 # partym and enigma's shared key in hex (192 bits) key f47cb0f432e14480951095f82b735ba80a9467d08f92c88068b6a40e } |
每个系统上的预先共享密钥必须完全相同。
Solaris IPsec 可与其他操作系统交互操作。如果您的系统与需要 ASCII 预先共享密钥的系统通信,则需要以两种格式(十六进制格式和 ASCII 格式)生成一个密钥。
在此示例中,Solaris 系统管理员需要 56 个字符的加密材料。该管理员使用以下命令从 ASCII 口令短语中生成十六进制的密钥。在所有 Solaris 系统中,-tx1 选项每次输出一个字节。
# /bin/echo "papiermache with cashews and\c" | od -tx1 | cut -c 8-55 | \ tr -d '\n' | tr -d ' ' | awk '{print}' 7061706965726d616368652077697468206361736865777320616e64 |
通过删除偏移和串联十六进制输出,Solaris 系统的十六进制密钥为 7061706965726d616368652077697468206361736865777320616e64。管理员可以将该值放在 Solaris 系统上的 ike.preshared 文件中。
# Shared key in hex (192 bits) key 7061706965726d616368652077697468206361736865777320616e64 |
在需要 ASCII 预先共享密钥的系统中,口令短语就是预先共享的密钥。Solaris 系统管理员使用口令短语 papiermache with cashews and 给其他管理员打电话。
此过程假定您希望按固定的时间间隔替换现有的预先共享密钥。
在系统控制台上,承担主管理员角色或成为超级用户。
主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
远程登录会使安全关键型通信易于遭到窃听。即使以某种方式保护远程登录,系统的安全性也会降至远程登录会话的安全性。请使用 ssh 命令进行安全的远程登录。
生成随机数,并构造适当长度的密钥。
有关详细信息,请参见如何在 Solaris 系统上生成随机数。如果要为 Solaris 系统生成预先共享的密钥,而且此系统与需要 ASCII 的操作系统通信,请参见示例 23–1。
将当前密钥替换为新密钥。
例如,在主机 enigma 和 partym 上,将 /etc/inet/secret/ike.preshared 文件中 key 的值替换为一个相同长度的新数值。
从 Solaris 10 4/09 发行版开始,请刷新 ike 服务。
# svcadm refresh ike |
如果您运行的是 Solaris 10 4/09 发行版之前的发行版,请中止并重新启动 in.iked 守护进程。
# /usr/sbin/ikeadm get priv Current privilege level is 0x0, base privileges enabled |
如果该命令返回权限级别 0x1 或 0x2,则您可以更改加密材料。级别 0x0 不允许执行修改或查看加密材料的操作。缺省情况下,in.iked 守护进程按权限级别 0x0 运行。
守护进程重新启动时,它将读取新版本的 ike.preshared 文件。
# pkill in.iked # /usr/lib/inet/in.iked |
如果权限级别是 0x1 或 0x2,则读入新版本的 ike.preshared 文件。
# ikeadm read preshared |
缺省情况下,ikeadm 命令会阻止您在阶段 1 SA 的转储中查看实际密钥。在调试期间查看密钥很有用。
要查看实际密钥,您必须提高守护进程的权限级别。有关权限级别的说明,请参见IKE 管理命令。
要在 Solaris 10 4/09 发行版之前的发行版中执行此过程,请参见示例 23–2。
已配置 IKE,并且 ike 服务正在运行。
查看 IKE 预先共享密钥。
# ikeadm ikeadm> dump preshared |
提高 SMF 系统信息库中 in.iked 守护进程的权限级别。
# svcprop -p config/admin_privilege ike base # svccfg -s ike setprop config/admin_privilege=keymat |
提高正在运行的 in.iked 守护进程的权限级别。
# svcadm refresh ike ; svcadm restart ike |
(可选的)确认权限级别为 keymat。
# svcprop -p config/admin_privilege ike keymat |
通过再次运行步骤 1 查看密钥。
将 IKE 守护进程恢复为 base 权限级别。
在以下示例中,管理员要在运行的不是当前 Solaris 发行版的 Solaris 系统中查看密钥。管理员想要检验该系统中的密钥是否与通信系统中的密钥完全相同。检验两个系统中的密钥是否完全相同后,管理员将权限级别恢复为 0。
首先,管理员确定 in.iked 守护进程的权限级别。
adm1 # /usr/sbin/ikeadm get priv Current privilege level is 0x0, base privileges enabled |
由于权限级别不是 0x1 或 0x2,所以管理员会停止 in.iked 守护进程,然后将权限级别提高到 2。
adm1 # pkill in.iked adm1 # /usr/lib/inet/in.iked -p 2 Setting privilege level to 2 |
管理员显示密钥。
adm1 # ikeadm dump preshared PSKEY: Preshared key (24 bytes): f47cb…/192 LOCIP: AF_INET: port 0, 192.168.116.16 (adm1). REMIP: AF_INET: port 0, 192.168.13.213 (com1). |
管理员远程登录到通信系统,并确定密钥是否完全相同。
然后,管理员恢复权限的 base 级别。
# ikeadm set priv base |
如果在 IPsec 和 IKE 正在运行时添加 IPsec 策略项,则必须将新的策略和 IKE 规则读入内核。从 Solaris 10 4/09 发行版开始,添加新密钥后,要重新启动 policy 服务并刷新 ike 服务。
要在 Solaris 10 4/09 发行版之前的发行版中执行此过程,请参见示例 23–3。
此过程将假定以下内容:
按如何使用预先共享的密钥配置 IKE所述设置了 enigma 系统。
enigma 系统将要用新系统 ada 保护其流量。
in.iked 守护进程正在这两个系统上运行。
在这两个系统的 /etc/hosts 文件中,均会将这些系统的接口作为项列出。以下项是一个示例。
192.168.15.7 ada 192.168.116.16 enigma |
此过程也适用于 /etc/inet/ipnodes 文件中的 IPv6 地址。 从 Solaris 10 6/07 发行版开始,IPv6 项会放置在 /etc/hosts 文件中。
已经在这两个系统上将新的策略项添加到 /etc/inet/ipsecinit.conf 文件。这些项的显示与以下信息类似:
# ipsecinit.conf file for enigma {laddr enigma raddr ada} ipsec {auth_algs any encr_algs any sa shared} |
# ipsecinit.conf file for ada {laddr ada raddr enigma} ipsec {auth_algs any encr_algs any sa shared} |
在当前发行版中,您已经使用以下命令在两个系统中检验了 /etc/inet/ipsecinit.conf 文件的语法。
# ipsecconf -c -f /etc/inet/ipsecinit.conf |
在系统控制台上,承担主管理员角色或成为超级用户。
主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
远程登录会使安全关键型通信易于遭到窃听。即使以某种方式保护远程登录,系统的安全性也会降至远程登录会话的安全性。请使用 ssh 命令进行安全的远程登录。
在此系统中,生成随机数,并构造一个 64 位到 448 位的密钥。
有关详细信息,请参见如何在 Solaris 系统上生成随机数。如果要为 Solaris 系统生成预先共享的密钥,而且此系统与需要 ASCII 的操作系统通信,请参见示例 23–1。
以某种方法将密钥发送给远程系统的管理员。
需要同时添加相同的预先共享密钥。密钥的安全性仅与传输机制的安全性相同。带外机制(如已注册的邮件或受保护的传真机)是最佳的。您也可以使用 ssh 会话管理这两个系统。
为 IKE 创建一个规则以管理 enigma 和 ada 的密钥。
在 enigma 系统上,将以下规则添加到 /etc/inet/ike/config 文件:
### ike/config file on enigma, 192.168.116.16 ## The rule to communicate with ada {label "enigma-to-ada" local_addr 192.168.116.16 remote_addr 192.168.15.7 p1_xform {auth_method preshared oakley_group 5 auth_alg sha1 encr_alg blowfish} p2_pfs 5 } |
在 ada 系统上,添加以下规则:
### ike/config file on ada, 192.168.15.7 ## The rule to communicate with enigma {label "ada-to-enigma" local_addr 192.168.15.7 remote_addr 192.168.116.16 p1_xform {auth_method preshared oakley_group 5 auth_alg sha1 encr_alg blowfish} p2_pfs 5 } |
确保 IKE 预先共享密钥在重新引导时是可用的。
在 enigma 系统上,将以下信息添加到 /etc/inet/secret/ike.preshared 文件:
# ike.preshared on enigma for the ada interface # { localidtype IP localid 192.168.116.16 remoteidtype IP remoteid 192.168.15.7 # enigma and ada's shared key in hex (32 - 448 bits required) key 8d1fb4ee500e2bea071deb2e781cb48374411af5a9671714672bb1749ad9364d } |
在 ada 系统上,将以下信息添加到 ike.preshared 文件:
# ike.preshared on ada for the enigma interface # { localidtype IP localid 192.168.15.7 remoteidtype IP remoteid 192.168.116.16 # ada and enigma's shared key in hex (32 - 448 bits required) key 8d1fb4ee500e2bea071deb2e781cb48374411af5a9671714672bb1749ad9364d } |
在每个系统上,重新启动 IPsec 策略服务以保证所添加的接口的安全。
# svcadm restart policy |
在每个系统上,刷新 ike 服务。
# svcadm refresh ike |
检验系统是否可以进行通信。
在以下示例中,管理员要将预先共享密钥添加到运行的不是当前 Solaris 发行版的 Solaris 系统。管理员遵循前面的过程来修改 ike/config 和 ike.preshared 文件,然后生成密钥并联系远程系统。管理员使用不同的命令将新的 IPsec 策略和 IKE 规则读入内核。
在生成新密钥之前,管理员将 in.iked 守护进程的权限级别设置为 2。
# pkill in.iked # /usr/lib/inet/in.iked -p 2 Setting privilege level to 2 |
将密钥发送给另一个系统并将新密钥添加到系统后,管理员降低了权限级别。
# ikeadm set priv base |
然后,管理员将新的 IPsec 策略读入内核。
# ipsecconf -a /etc/inet/ipsecinit.conf |
最后,管理员将新的 IKE 规则读入内核。
# ikeadm read rules |
如果通信系统上的预先共享密钥不是完全相同的,则系统无法进行验证。
在要测试的两个系统之间已配置并启用 IPsec。您运行的是当前 Solaris 10 发行版。
要在 Solaris 10 4/09 发行版之前的发行版中执行此过程,请参见示例 23–2。
在系统控制台上,承担主管理员角色或成为超级用户。
主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
远程登录会使安全关键型通信易于遭到窃听。即使以某种方式保护远程登录,系统的安全性也会降至远程登录会话的安全性。请使用 ssh 命令进行安全的远程登录。
在每个系统上,检查 in.iked 守护进程的权限级别。
# svcprop -p config/admin_privilege ike base |
如果权限级别为 keymat,请继续执行步骤 3。
如果权限级别为 base 或 modkeys,请提高权限级别。
然后,刷新并重新启动 ike 服务。
# svccfg -s ike setprop config/admin_privilege=keymat # svcadm refresh ike ; svcadm restart ike # svcprop -p config/admin_privilege ike keymat |
在每个系统上,查看预先共享密钥的信息。
# ikeadm dump preshared PSKEY: Preshared key (24 bytes): f47cb…/192 LOCIP: AF_INET: port 0, 192.168.116.16 (enigma). REMIP: AF_INET: port 0, 192.168.13.213 (partym). |
比较两个转储。
如果预先共享的密钥不是完全相同的,则在 /etc/inet/secret/ike.preshared 文件中将一个密钥替换为另一个密钥。
检验完成后,在每个系统中将权限级别恢复为缺省级别。
# svccfg -s ike setprop config/admin_privilege=base # svcadm restart ike |
下表提供了为 IKE 创建公钥证书的过程的链接。这些过程包括如何在连接的硬件上加速和存储证书。
使用公钥证书,通信系统就无需在带外共享秘密的加密材料。与预先共享的密钥不同,公钥证书可以在移动机器或可能重新编号的系统上使用。
公钥证书也可以存储在连接的硬件上。有关过程,请参见将 IKE 配置为查找连接的硬件(任务列表)。
自签名证书比 CA 颁发的公共证书所需的开销少,但不太易于扩展。
在系统控制台上,承担主管理员角色或成为超级用户。
主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
远程登录会使安全关键型通信易于遭到窃听。即使以某种方式保护远程登录,系统的安全性也会降至远程登录会话的安全性。请使用 ssh 命令进行安全的远程登录。
将自签名证书添加到 ike.privatekeys 数据库。
# ikecert certlocal -ks|-kc -m keysize -t keytype \ -D dname -A altname \ [-S validity-start-time] [-F validity-end-time] [-T token-ID] |
创建自签名证书。
创建证书请求。有关过程,请参见如何使用 CA 签名的证书配置 IKE。
是密钥的大小。keysize 可以是 512、1024、2048、3072 或 4096。
指定要使用的算法类型。keytype 可以是 rsa-sha1、rsa-md5 或 dsa-sha1。
是证书主题的 X.509 标识名。dname 通常具有以下格式: C=country, O=organization, OU=organizational unit, CN=common name。有效标记是 C、O、OU 和 CN。
是证书的替代名称。altname 的形式为 tag=value。有效标记是 IP、DNS、email 和 DN。
为证书提供绝对或相对有效开始时间。
为证书提供绝对或相对有效结束时间。
启用 PKCS #11 硬件标记来生成密钥。然后证书将被存储在硬件中。
例如,partym 系统上命令的显示与以下信息类似:
# ikecert certlocal -ks -m 1024 -t rsa-md5 \ -D "C=US, O=PartyCompany, OU=US-Partym, CN=Partym" \ -A IP=192.168.13.213 Creating software private keys. Writing private key to file /etc/inet/secret/ike.privatekeys/0. Enabling external key providers - done. Acquiring private keys for signing - done. Certificate: Proceeding with the signing operation. Certificate generated successfully (…/publickeys/0) Finished successfully. Certificate added to database. -----BEGIN X509 CERTIFICATE----- MIICLTCCAZagAwIBAgIBATANBgkqhkiG9w0BAQQFADBNMQswCQYDVQQGEwJVUzEX … 6sKTxpg4GP3GkQGcd0r1rhW/3yaWBkDwOdFCqEUyffzU -----END X509 CERTIFICATE----- |
enigma 系统上命令的显示与以下信息类似:
# ikecert certlocal -ks -m 1024 -t rsa-md5 \ -D "C=JA, O=EnigmaCo, OU=JA-Enigmax, CN=Enigmax" \ -A IP=192.168.116.16 Creating software private keys. … Certificate added to database. -----BEGIN X509 CERTIFICATE----- MIICKDCCAZGgAwIBAgIBATANBgkqhkiG9w0BAQQFADBJMQswCQYDVQQGEwJVUzEV … jpxfLM98xyFVyLCbkr3dZ3Tvxvi732BXePKF2A== -----END X509 CERTIFICATE----- |
保存证书并将它发送到远程系统。
可以将证书粘贴到电子邮件中。
例如,将以下 partym 证书发送给 enigma 管理员:
To: admin@ja.enigmaexample.com From: admin@us.partyexample.com Message: -----BEGIN X509 CERTIFICATE----- MIICLTCCAZagAwIBAgIBATANBgkqhkiG9w0BAQQFADBNMQswCQYDVQQGEwJVUzEX … 6sKTxpg4GP3GkQGcd0r1rhW/3yaWBkDwOdFCqEUyffzU -----END X509 CERTIFICATE----- |
enigma 管理员将向您发送以下 enigma 证书:
To: admin@us.partyexample.com From: admin@ja.enigmaexample.com Message: -----BEGIN X509 CERTIFICATE----- MIICKDCCAZGgAwIBAgIBATANBgkqhkiG9w0BAQQFADBJMQswCQYDVQQGEwJVUzEV … jpxfLM98xyFVyLCbkr3dZ3Tvxvi732BXePKF2A== -----END X509 CERTIFICATE----- |
向其他管理员核实证书是否来自该管理员。
例如,可以给其他管理员打电话,以比较公钥散列的值。在这两个系统上,共享证书的公钥散列必须是相同的。
例如,在 partym 系统上,公共证书位于插槽 1 中,而专用证书位于插槽 0 中。
partym # ikecert certdb -l Certificate Slot Name: 0 Type: rsa-md5 Private Key Subject Name: <C=US, O=PartyCompany, OU=US-Partym, CN=Partym> Key Size: 1024 Public key hash: B2BD13FCE95FD27ECE6D2DCD0DE760E2 Certificate Slot Name: 1 Type: rsa-md5 Public Certificate (Private key in certlocal slot 0) Points to certificate's private key Subject Name: <C=JA, O=EnigmaCo, OU=JA-Enigmax, CN=Enigmax> Key Size: 1024 Public key hash: 2239A6A127F88EE0CB40F7C24A65B818 |
将此值与 enigma 系统上的公钥散列进行比较。
您可通过电话读取公钥散列。
enigma # ikecert certdb -l Certificate Slot Name: 4 Type: rsa-md5 Private Key Subject Name: <C=JA, O=EnigmaCo, OU=JA-Enigmax, CN=Enigmax> Key Size: 1024 Public key hash: DF3F108F6AC669C88C6BD026B0FCE3A0 Certificate Slot Name: 5 Type: rsa-md5 Public Certificate (Private key in certlocal slot 4) Subject Name: <C=US, O=PartyCompany, OU=US-Partym, CN=Partym> Key Size: 1024 Public key hash: 2239A6A127F88EE0CB40F7C24A65B818 |
编辑 /etc/inet/ike/config 文件以识别证书。
远程系统的管理员提供 cert_trust、remote_addr 和 remote_id 参数的值。
例如,在 partym 系统上,ike/config 文件的显示与以下信息类似:
# Explicitly trust the following self-signed certs # Use the Subject Alternate Name to identify the cert # Verified remote address and remote ID # Verified public key hash per telephone call from administrator cert_trust "192.168.13.213" Local system's certificate Subject Alt Name cert_trust "192.168.116.16" Remote system's certificate Subject Alt Name ## Parameters that may also show up in rules. p1_xform { auth_method preshared oakley_group 5 auth_alg sha encr_alg des } p2_pfs 5 { label "US-partym to JA-enigmax" local_id_type dn local_id "C=US, O=PartyCompany, OU=US-Partym, CN=Partym" remote_id "C=JA, O=EnigmaCo, OU=JA-Enigmax, CN=Enigmax" local_addr 192.168.13.213 remote_addr 192.168.116.16 p1_xform {auth_method rsa_sig oakley_group 2 auth_alg sha1 encr_alg aes} } |
在 enigma 系统上,在 ike/config 文件中添加本地参数的 enigma 值。
对于远程参数,请使用 partym 值。确保 label 关键字的值是唯一的。此值必须与远程系统的 label 值不同。
… { label "JA-enigmax to US-partym" local_id_type dn local_id "C=JA, O=EnigmaCo, OU=JA-Enigmax, CN=Enigmax" remote_id "C=US, O=PartyCompany, OU=US-Partym, CN=Partym" local_addr 192.168.116.16 remote_addr 192.168.13.213 … |
在此示例中,管理员使用主题名称来验证这些证书是否相同。
第一个管理员将生成和列出证书的输出保存到一个文件中。由于 ikecert 命令的输出列显到标准错误,因此管理员会将标准错误重定向到该文件。
sys1# cd / sys1# ikecert certlocal -ks -m1024 -t rsa-md5 \ -D"C=US, O=TestCo, CN=Co2Sys" 2>/tmp/for_co2sys Certificate added to database. sys1# ikecert certdb -l "C=US, O=TestCo, CN=Co2Sys" 2>>/tmp/for_co2sys |
管理员验证该文件的内容。
sys1# cat /tmp/for_co2sys Creating private key. -----BEGIN X509 CERTIFICATE----- MIIB7TCCAVagAwIBAgIEZkHfOTANBgkqhkiG9w0BAQQFADAxMQwwCgYDVQQGEwNV U0ExEDAOBgNVBAoMB3Rlc3RfY28xDzANBgNVBAMTBkVuaWdtYTAeFw0wODAxMTUx OTI1MjBaFw0xMjAxMTUxOTI1MjBaMDExDDAKBgNVBAYTA1VTQTEQMA4GA1UECgwH dGVzdF9jbzEPMA0GA1UEAxMGRW5pZ21hMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB iQKBgQCPxGv0rUzHMnFtkx9uwYuPiWbftmWfa9iDt6ELOEuw3zlboy2qtuRUZohz FIbCxAJevdCY6a+pktvYy3/2nJL0WATObO5T0FKn3F0bphajinLYbyCrYhEzD9E2 gkiT2D9/ttbSiMvi9usphprEDcLAFaWgCJiHnKPBEkjC0vhA3wIDAQABoxIwEDAO BgNVHQ8BAf8EBAMCBaAwDQYJKoZIhvcNAQEEBQADgYEAL/q6xgweylGQylqLCwzN 5PIpjfzsNPf3saTyh3VplwEOW6WTHwRQT17IO/1Oc6Jnz9Mr0ZrbHWDXq+1sx180 F8+DMW1Qv1UR/lGMq3ufDG3qedmSN6txDF8qLlPCUML0YL8m4oGdewqGb+78aPyE Y/cJRsK1hWbYyseqcIkjj5k= -----END X509 CERTIFICATE----- Certificate Slot Name: 2 Key Type: rsa (Private key in certlocal slot 2) Subject Name: <C=US, O=TestCo, CN=Co2Sys> Key Size: 1024 Public key hash: C46DE77EF09084CE2B7D9C70479D77FF |
然后,管理员通过电子邮件将该文件发送给第二个管理员。
第二个管理员将该文件放在安全目录中,并从该文件导入证书。
sys2# cd / sys2# ikecert certdb -a < /sec/co2sys |
ikecert 命令只导入 -----BEGIN 和 -----END 行之间的文字。管理员验证本地证书的公钥散列是否与 co2sys 文件中的公钥散列相同。
sys2# ikecert certdb -l Certificate Slot Name: 1 Key Type: rsa (Private key in certlocal slot 1) Subject Name: <C=US, O=TestCo, CN=Co2Sys> Key Size: 1024 Public key hash: C46DE77EF09084CE2B7D9C70479D77FF |
为确保第一个管理员发送了此电子邮件,第二个管理员会给第一个管理员打电话,以验证证书的主题名称。
在此示例中,由 partym 系统上的管理员建立证书有效日期。该证书可回溯 2 1/2 天,自创建之日起 4 年零 6 个月内有效。
# ikecert certlocal -ks -m 1024 -t rsa-md5 \ -D "C=US, O=PartyCompany, OU=US-Partym, CN=Partym" \ -A IP=192.168.13.213 \ -S -2d12h -F +4y6m |
由 enigma 系统上的管理员建立证书有效日期。该证书可回溯 2 天,在 2010 年 12 月 31 号子夜前有效。
# ikecert certlocal -ks -m 1024 -t rsa-md5 \ -D "C=JA, O=EnigmaCo, OU=JA-Enigmax, CN=Enigmax" \ -A IP=192.168.116.16 \ -S -2d -F "12/31/2010 12:00 AM" |
证书颁发机构 (CA) 颁发的公共证书需要与外部组织进行协商。证书很容易扩展为保护大量通信系统。
在系统控制台上,承担主管理员角色或成为超级用户。
主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
远程登录会使安全关键型通信易于遭到窃听。即使以某种方式保护远程登录,系统的安全性也会降至远程登录会话的安全性。请使用 ssh 命令进行安全的远程登录。
使用 ikecert certlocal -kc 命令创建证书请求。
有关该命令的参数的说明,请参见如何使用自签名的公钥证书配置 IKE中的步骤 2。
# ikecert certlocal -kc -m keysize -t keytype \ -D dname -A altname |
例如,以下命令在 partym 系统上创建证书请求:
# ikecert certlocal -kc -m 1024 -t rsa-md5 \ > -D "C=US, O=PartyCompany\, Inc., OU=US-Partym, CN=Partym" \ > -A "DN=C=US, O=PartyCompany\, Inc., OU=US-Partym" Creating software private keys. Writing private key to file /etc/inet/secret/ike.privatekeys/2. Enabling external key providers - done. Certificate Request: Proceeding with the signing operation. Certificate request generated successfully (…/publickeys/0) Finished successfully. -----BEGIN CERTIFICATE REQUEST----- MIIByjCCATMCAQAwUzELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFEV4YW1wbGVDb21w … lcM+tw0ThRrfuJX9t/Qa1R/KxRlMA3zckO80mO9X -----END CERTIFICATE REQUEST----- |
以下命令在 enigma 系统上创建证书请求:
# ikecert certlocal -kc -m 1024 -t rsa-md5 \ > -D "C=JA, O=EnigmaCo\, Inc., OU=JA-Enigmax, CN=Enigmax" \ > -A "DN=C=JA, O=EnigmaCo\, Inc., OU=JA-Enigmax" Creating software private keys. … Finished successfully. -----BEGIN CERTIFICATE REQUEST----- MIIBuDCCASECAQAwSTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDFBhcnR5Q29tcGFu … 8qlqdjaStLGfhDOO -----END CERTIFICATE REQUEST----- |
将证书请求提交到 PKI 组织。
PKI 组织可以告诉您如何提交证书请求。大多数组织具有包含提交表单的 Web 站点。该表单要求证明提交是合法的。通常,将证书请求粘贴到表单中。组织在检查您的请求后,将向您发出以下两个证书对象和已撤销证书的列表:
公钥证书-此证书基于您提交给组织的请求。所提交的请求是此公钥证书的一部分。证书可对您进行唯一标识。
证书颁发机构-组织的签名。CA 检验公钥证书是否合法。
证书撤销列表 (Certificate Revocation List, CRL)-组织已撤销的证书的最新列表。如果在公钥证书中嵌入对 CRL 的访问,则不会将 CRL 作为证书对象单独发送。
在公钥证书中嵌入 CRL 的 URI 时,IKE 可以自动检索 CRL。同样,在公钥证书中嵌入 DN(LDAP 服务器上的目录名称)项时,IKE 可以从指定的 LDAP 服务器检索并高速缓存 CRL。
有关公钥证书中的嵌入式 URI 和嵌入式 DN 项的示例,请参见如何处理证书撤销列表。
ikecert certdb -a 的 -a 选项将已粘贴的对象添加到系统上的适当证书数据库。有关更多信息,请参见IKE,使用公钥证书。
在系统控制台上,承担主管理员角色或成为超级用户。
添加从 PKI 组织收到的公钥证书。
# ikecert certdb -a Press the Return key Paste the certificate: -----BEGIN X509 CERTIFICATE----- … -----END X509 CERTIFICATE---- Press the Return key <Control>-D |
添加来自 PKI 组织的 CA。
# ikecert certdb -a Press the Return key Paste the CA: -----BEGIN X509 CERTIFICATE----- … -----END X509 CERTIFICATE---- Press the Return key <Control>-D |
如果 PKI 组织已发送撤销证书列表,则将 CRL 添加到 certrldb 数据库:
# ikecert certrldb -a Press the Return key Paste the CRL: -----BEGIN CRL----- … -----END CRL---- Press the Return key <Control>-D |
在 /etc/inet/ike/config 文件中使用 cert_root 关键字标识 PKI 组织。
使用 PKI 组织提供的名称。
例如,partym 系统上 ike/config 文件的显示可能与以下信息类似:
# Trusted root cert # This certificate is from Example PKI # This is the X.509 distinguished name for the CA that it issues. cert_root "C=US, O=ExamplePKI\, Inc., OU=PKI-Example, CN=Example PKI" ## Parameters that may also show up in rules. p1_xform { auth_method rsa_sig oakley_group 1 auth_alg sha1 encr_alg des } p2_pfs 2 { label "US-partym to JA-enigmax - Example PKI" local_id_type dn local_id "C=US, O=PartyCompany, OU=US-Partym, CN=Partym" remote_id "C=JA, O=EnigmaCo, OU=JA-Enigmax, CN=Enigmax" local_addr 192.168.13.213 remote_addr 192.168.116.16 p1_xform {auth_method rsa_sig oakley_group 2 auth_alg sha1 encr_alg aes} } |
auth_method 参数的所有变量都必须在同一行上。
在 enigma 系统上,创建一个类似的文件。
具体而言,enigma 的 ike/config 文件应该满足以下要求:
包括相同的 cert_root 值。
对于本地参数,使用 enigma 值。
对于远程参数,使用 partym 值。
为 label 关键字创建唯一值。此值必须与远程系统的 label 值不同。
… cert_root "C=US, O=ExamplePKI\, Inc., OU=PKI-Example, CN=Example PKI" … { label "JA-enigmax to US-partym - Example PKI" local_id_type dn local_id "C=JA, O=EnigmaCo, OU=JA-Enigmax, CN=Enigmax" remote_id "C=US, O=PartyCompany, OU=US-Partym, CN=Partym" local_addr 192.168.116.16 remote_addr 192.168.13.213 … |
选择适当的选项:
未提供 CRL
如果 PKI 组织未提供 CRL,则将关键字 ignore_crls 添加到 ike/config 文件。
# Trusted root cert … cert_root "C=US, O=ExamplePKI\, Inc., OU=PKI-Example,… ignore_crls … |
ignore_crls 关键字指示 IKE 不搜索 CRL。
提供了 CRL
如果 PKI 组织提供了 CRL 的中心分发点,则可以修改 ike/config 文件以指向该位置。
有关示例,请参见如何处理证书撤销列表。
在 ike/config 文件中使用 auth_method rsa_encrypt 时,必须将对等方的证书添加到 publickeys 数据库。
将证书发送给远程系统的管理员。
可以将证书粘贴到电子邮件中。
例如,partym 管理员将发送以下电子邮件:
To: admin@ja.enigmaexample.com From: admin@us.partyexample.com Message: -----BEGIN X509 CERTIFICATE----- MII… ----END X509 CERTIFICATE----- |
enigma 管理员将发送以下电子邮件:
To: admin@us.partyexample.com From: admin@ja.enigmaexample.com Message: -----BEGIN X509 CERTIFICATE----- MII … -----END X509 CERTIFICATE----- |
在每个系统上,将通过电子邮件发送的证书添加到本地 publickeys 数据库。
# ikecert certdb -a Press the Return key -----BEGIN X509 CERTIFICATE----- MII… -----END X509 CERTIFICATE----- Press the Return key <Control>-D |
RSA 加密的验证方法可防止窃听者知道 IKE 中的标识。由于 rsa_encrypt 方法隐藏对等方的标识,IKE 无法检索对等方的证书。因此,rsa_encrypt 方法要求 IKE 对等方知道彼此的公钥。
所以,在 /etc/inet/ike/config 文件中使用 rsa_encrypt 的 auth_method 时,必须将对等方的证书添加到 publickeys 数据库。添加证书后,publickeys 数据库包含每对通信系统的三个证书:
您的公钥证书
CA 证书
对等方的公钥证书
疑难解答-IKE 有效负荷(它包括这三个证书)可能变得过大而无法由 rsa_encrypt 加密。诸如“授权失败”和“有效负荷格式错误”之类的错误,可以指明 rsa_encrypt 方法无法对总有效负荷进行加密。使用仅需要两个证书的方法(如 rsa_sig)来减小有效负荷的大小。
在硬件上生成和存储公钥证书,与在系统上生成和存储公钥证书类似。在硬件上,ikecert certlocal 和 ikecert certdb 命令必须标识硬件。带有标记 ID 的 -T 选项向命令标识硬件。
必须配置硬件。
该硬件使用 /usr/lib/libpkcs11.so 库,除非 /etc/inet/ike/config 文件中的 pkcs11_path 关键字指向其他库。该库必须按照以下标准实现:RSA Security Inc. 推出的 PKCS #11 加密令牌接口 (Cryptographic Token Interface, Cryptoki),即 PKCS #11 库。
有关设置说明,请参见如何将 IKE 配置为查找 Sun Crypto Accelerator 4000 板。
在系统控制台上,承担主管理员角色或成为超级用户。
主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
远程登录会使安全关键型通信易于遭到窃听。即使以某种方式保护远程登录,系统的安全性也会降至远程登录会话的安全性。请使用 ssh 命令进行安全的远程登录。
选择以下选项之一:
对于 RSA,Sun Crypto Accelerator 4000 板最多支持 2048 位的密钥。对于 DSA,此板最多支持 1024 位的密钥。
对于自签名证书,请使用此语法。
# ikecert certlocal -ks -m 1024 -t rsa-md5 \ > -D "C=US, O=PartyCompany, OU=US-Partym, CN=Partym" \ > -a -T dca0-accel-stor IP=192.168.116.16 Creating hardware private keys. Enter PIN for PKCS#11 token: Type user:password |
-T 选项的参数是来自已连接 Sun Crypto Accelerator 4000 板的标记 ID。
# ikecert certlocal -kc -m 1024 -t rsa-md5 \ > -D "C=US, O=PartyCompany, OU=US-Partym, CN=Partym" \ > -a -T dca0-accel-stor IP=192.168.116.16 Creating hardware private keys. Enter PIN for PKCS#11 token: Type user:password |
有关 ikecert 命令的参数的说明,请参见 ikecert(1M) 手册页。
在系统提示输入 PIN 时,键入 Sun Crypto Accelerator 4000 用户、冒号和该用户的口令。
如果 Sun Crypto Accelerator 4000 板具有口令为 rgm4tigt 的用户 ikemgr,应键入以下内容:
Enter PIN for PKCS#11 token: ikemgr:rgm4tigt |
PIN 响应以明文形式存储在磁盘上。
键入口令后,将输出证书内容:
Enter PIN for PKCS#11 token: ikemgr:rgm4tigt -----BEGIN X509 CERTIFICATE----- MIIBuDCCASECAQAwSTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDFBhcnR5Q29tcGFu … oKUDBbZ9O/pLWYGr -----END X509 CERTIFICATE----- |
发送您的证书以供对方使用。
选择以下选项之一:
将自签名证书发送到远程系统。
可以将证书粘贴到电子邮件中。
将证书请求发送到处理 PKI 的组织。
按照 PKI 组织的说明提交证书请求。有关更详细的论述,请参见如何使用 CA 签名的证书配置 IKE中的步骤 3。
在系统上,编辑 /etc/inet/ike/config 文件以识别这些证书。
选择以下选项之一。
使用远程系统管理员为 cert_trust、remote_id 和 remote_addr 参数提供的值。例如,在 enigma 系统上,ike/config 文件的显示与以下信息类似:
# Explicitly trust the following self-signed certs # Use the Subject Alternate Name to identify the cert cert_trust "192.168.116.16" Local system's certificate Subject Alt Name cert_trust "192.168.13.213" Remote system's certificate Subject Alt name # Solaris 10 1/06 release: default path does not have to be typed in #pkcs11_path "/usr/lib/libpkcs11.so" Hardware connection # Solaris 10 release: use this path #pkcs11_path "/opt/SUNWconn/cryptov2/lib/libvpkcs11.so" … { label "JA-enigmax to US-partym" local_id_type dn local_id "C=JA, O=EnigmaCo, OU=JA-Enigmax, CN=Enigmax" remote_id "C=US, O=PartyCompany, OU=US-Partym, CN=Partym" local_addr 192.168.116.16 remote_addr 192.168.13.213 p1_xform {auth_method rsa_sig oakley_group 2 auth_alg sha1 encr_alg aes} } |
证书请求
将 PKI 组织提供的名称作为 cert_root 关键字的值键入。例如,enigma 系统上 ike/config 文件的显示可能与以下信息类似:
# Trusted root cert # This certificate is from Example PKI # This is the X.509 distinguished name for the CA that it issues. cert_root "C=US, O=ExamplePKI\, Inc., OU=PKI-Example, CN=Example PKI" # Solaris 10 1/06 release: default path does not have to be typed in #pkcs11_path "/usr/lib/libpkcs11.so" Hardware connection # Solaris 10 release: use this path #pkcs11_path "/opt/SUNWconn/cryptov2/lib/libvpkcs11.so" … { label "JA-enigmax to US-partym - Example PKI" local_id_type dn local_id "C=JA, O=EnigmaCo, OU=JA-Enigmax, CN=Enigmax" remote_id "C=US, O=PartyCompany, OU=US-Partym, CN=Partym" local_addr 192.168.116.16 remote_addr 192.168.13.213 p1_xform {auth_method rsa_sig oakley_group 2 auth_alg sha1 encr_alg aes} } |
在硬件中存放来自对方的证书。
按照在步骤 3 中作出的响应,响应 PIN 请求。
必须将公钥证书添加到生成私钥的那个连接硬件上。
自签名证书。
添加远程系统的自签名证书。在此示例中,证书存储在 DCA.ACCEL.STOR.CERT 文件中。
# ikecert certdb -a -T dca0-accel-stor < DCA.ACCEL.STOR.CERT Enter PIN for PKCS#11 token: Type user:password |
如果自签名证书将 rsa_encrypt 用作 auth_method 参数的值,则将对等方的证书添加到硬件存储。
添加组织从证书请求生成的证书,然后添加证书颁发机构 (certificate authority, CA)。
# ikecert certdb -a -T dca0-accel-stor < DCA.ACCEL.STOR.CERT Enter PIN for PKCS#11 token: Type user:password |
# ikecert certdb -a -T dca0-accel-stor < DCA.ACCEL.STOR.CA.CERT Enter PIN for PKCS#11 token: Type user:password |
要添加来自 PKI 组织的证书撤销列表 (certificate revocation list, CRL),请参见如何处理证书撤销列表。
证书撤销列表 (certificate revocation list, CRL) 包含来自证书颁发机构的过时证书或已损坏证书。CRL 的处理方式有四种。
如果 CA 组织未发出 CRL,则您必须指示 IKE 忽略 CRL。如何使用 CA 签名的证书配置 IKE的步骤 6 中显示了此选项。
可以指示 IKE 从一个 URI(uniform resource indicator,统一资源指示符)访问 CRL,该 URI 的地址嵌入到来自 CA 的公钥证书中。
可以指示 IKE 从 LDAP 服务器访问 CRL,该服务器的 DN(directory name,目录名称)项嵌入到来自 CA 的公钥证书中。
可以将 CRL 作为 ikecert certrldb 命令的参数提供。有关示例,请参见示例 23–7。
以下过程介绍如何指示 IKE 从中心分发点使用 CRL。
# ikecert certdb -lv certspec |
列出 IKE 证书数据库中的证书。
以详细模式列出证书。应谨慎使用此选项。
是一种与 IKE 证书数据库中的证书匹配的模式。
例如,以下证书是由 Sun Microsystems 颁发的。详细信息已更改。
# ikecert certdb -lv example-protect.sun.com Certificate Slot Name: 0 Type: dsa-sha1 (Private key in certlocal slot 0) Subject Name: <O=Sun Microsystems Inc, CN=example-protect.sun.com> Issuer Name: <CN=Sun Microsystems Inc CA (Cl B), O=Sun Microsystems Inc> SerialNumber: 14000D93 Validity: Not Valid Before: 2002 Jul 19th, 21:11:11 GMT Not Valid After: 2005 Jul 18th, 21:11:11 GMT Public Key Info: Public Modulus (n) (2048 bits): C575A…A5 Public Exponent (e) ( 24 bits): 010001 Extensions: Subject Alternative Names: DNS = example-protect.sun.com Key Usage: DigitalSignature KeyEncipherment [CRITICAL] CRL Distribution Points: Full Name: URI = #Ihttp://www.sun.com/pki/pkismica.crl#i DN = <CN=Sun Microsystems Inc CA (Cl B), O=Sun Microsystems Inc> CRL Issuer: Authority Key ID: Key ID: 4F … 6B SubjectKeyID: A5 … FD Certificate Policies Authority Information Access |
请注意 CRL Distribution Points 项。URI 项指示此组织的 CRL 在 Web 上是可用的。DN 项指示 CRL 在 LDAP 服务器上是可用的。在 IKE 访问 CRL 后,将高速缓存该 CRL 以供将来使用。
要访问 CRL,您需要到达分发点。
选择以下方法之一从中心分发点访问 CRL。
将关键字 use_http 添加到主机的 /etc/inet/ike/config 文件。例如,ike/config 文件的显示与以下信息类似:
# Use CRL from organization's URI use_http … |
将关键字 proxy 添加到 ike/config 文件。proxy 关键字将 URL 用作参数,如下所示:
# Use own web proxy proxy "http://proxy1:8080" |
在主机的 /etc/inet/ike/config 文件中,将 LDAP 服务器指定为 ldap-list 关键字的参数。您的组织提供 LDAP 服务器的名称。ike/config 文件中项的显示与以下信息类似:
# Use CRL from organization's LDAP ldap-list "ldap1.sun.com:389,ldap2.sun.com" … |
在证书到期之前,IKE 检索并高速缓存 CRL。
如果无法从中心分发点获取 PKI 组织的 CRL,则可以将该 CRL 手动添加到本地 certrldb 数据库。按照 PKI 组织的说明将 CRL 提取到文件中,然后使用 ikecert certrldb -a 命令将此 CRL 添加到数据库。
# ikecert certrldb -a < Sun.Cert.CRL |
下表包含将 IKE 配置为处理远程登录到中心站点的系统的过程的链接。
任务 |
说明 |
参考 |
---|---|---|
从站点外与中心站点进行通信 |
允许站点外系统与中心站点进行通信。站点外系统可能是移动系统。 | |
在接受来自移动系统的流量的中心系统上使用根证书和 IKE |
将网关系统配置为接受来自没有固定 IP 地址的系统的 IPsec 流量。 | |
在没有固定 IP 地址的系统上使用根证书和 IKE |
将移动系统配置为保护它传输到中心站点(如公司总部)的流量。 | |
在接受来自移动系统的流量的中心系统上使用自签名证书和 IKE |
使用自签名证书配置网关系统,以接受来自移动系统的 IPsec 流量。 | |
在没有固定 IP 地址的系统上使用自签名证书和 IKE |
使用自签名证书配置移动系统,以保护它传输到中心站点的流量。 |
在进行适当配置后,家庭办公室和膝上型移动计算机可以使用 IPsec 和 IKE 与其公司的中央计算机进行通信。利用与公钥证书验证方法组合的综合 IPsec 策略,离站系统可以保护它们传输到中心系统的流量。
IPsec 和 IKE 要求用唯一 ID 标识源和目标。对于没有唯一 IP 地址的站点外系统或移动系统,必须使用其他 ID 类型。可以使用诸如 DNS、DN 或 email 之类的 ID 类型唯一地标识系统。
对于具有唯一 IP 地址的站点外系统或移动系统,最好也应使用其他 ID 类型进行配置。例如,如果系统尝试从 NAT 盒 (NAT box) 之后连接到中心站点,则不会使用它们的唯一地址。NAT 盒 (NAT box) 指定一个中心系统无法识别的任意 IP 地址。
预先共享的密钥也不太适合用作移动系统的验证机制,因为预先共享的密钥需要固定的 IP 地址。使用自签名证书或来自 PKI 的证书,移动系统可以与中心站点进行通信。
在系统控制台上,承担主管理员角色或成为超级用户。
主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
远程登录会使安全关键型通信易于遭到窃听。即使以某种方式保护远程登录,系统的安全性也会降至远程登录会话的安全性。请使用 ssh 命令进行安全的远程登录。
将中心系统配置为识别移动系统。
设置 /etc/hosts 文件。
中心系统不必识别移动系统的特定地址。
# /etc/hosts on central central 192.xxx.xxx.x |
设置 ipsecinit.conf 文件。
中心系统需要一个允许很宽的 IP 地址范围的策略。随后,IKE 策略中的证书确保进行连接的系统是合法的。
# /etc/inet/ipsecinit.conf on central # Keep everyone out unless they use this IPsec policy: {} ipsec {encr_algs aes encr_auth_algs sha1 sa shared} |
设置 ike.config 文件。
DNS 标识中心系统。证书用于验证该系统。
## /etc/inet/ike/ike.config on central # Global parameters # # Find CRLs by URI, URL, or LDAP # Use CRL from organization's URI use_http # # Use web proxy proxy "http://somecache.domain:port/" # # Use LDAP server ldap_server "ldap-server1.domain.org,ldap2.domain.org:port" # # List CA-signed certificates cert_root "C=US, O=Domain Org, CN=Domain STATE" # # List self-signed certificates - trust server and enumerated others #cert_trust "DNS=central.domain.org" #cert_trust "DNS=mobile.domain.org" #cert_trust "DN=CN=Domain Org STATE (CLASS), O=Domain Org #cert_trust "email=root@central.domain.org" #cert_trust "email=user1@mobile.domain.org" # # Rule for mobile systems with certificate { label "Mobile systems with certificate" local_id_type DNS # Any mobile system who knows my DNS or IP can find me. local_id "central.domain.org" local_addr 192.xxx.xxx.x # Root certificate ensures trust, # so allow any remote_id and any remote IP address. remote_id "" remote_addr 0.0.0.0/0 p2_pfs 5 p1_xform {auth_method rsa_sig oakley_group 5 encr_alg blowfish auth_alg sha1 } } |
登录到每个移动系统,然后将该系统配置为查找中心系统。
设置 /etc/hosts 文件。
/etc/hosts 文件不需要移动系统的地址,但是可以提供一个地址。该文件必须包含中心系统的公共 IP 地址。
# /etc/hosts on mobile mobile 10.x.x.xx central 192.xxx.xxx.x |
设置 ipsecinit.conf 文件。
移动系统需要按照中心系统的公共 IP 地址来查找中心系统。这些系统必须配置相同的 IPsec 策略。
# /etc/inet/ipsecinit.conf on mobile # Find central {raddr 192.xxx.xxx.x} ipsec {encr_algs aes encr_auth_algs sha1 sa shared} |
设置 ike.config 文件。
标识符不能是 IP 地址。以下标识符对移动系统有效:
DN=ldap-directory-name
DNS=domain-name-server-address
email=email-address
证书用于验证移动系统。
## /etc/inet/ike/ike.config on mobile # Global parameters # # Find CRLs by URI, URL, or LDAP # Use CRL from organization's URI use_http # # Use web proxy proxy "http://somecache.domain:port/" # # Use LDAP server ldap_server "ldap-server1.domain.org,ldap2.domain.org:port" # # List CA-signed certificates cert_root "C=US, O=Domain Org, CN=Domain STATE" # # Self-signed certificates - trust me and enumerated others #cert_trust "DNS=mobile.domain.org" #cert_trust "DNS=central.domain.org" #cert_trust "DN=CN=Domain Org STATE (CLASS), O=Domain Org #cert_trust "email=user1@domain.org" #cert_trust "email=root@central.domain.org" # # Rule for off-site systems with root certificate { label "Off-site mobile with certificate" local_id_type DNS # NAT-T can translate local_addr into any public IP address # central knows me by my DNS local_id "mobile.domain.org" local_addr 0.0.0.0/0 # Find central and trust the root certificate remote_id "central.domain.org" remote_addr 192.xxx.xxx.x p2_pfs 5 p1_xform {auth_method rsa_sig oakley_group 5 encr_alg blowfish auth_alg sha1 } } |
将 IKE 配置读入内核。
IKE 可以从 NAT 盒 (NAT box) 之后启动协商。但是,IKE 的理想设置是在 NAT 盒 (NAT box) 没有介入的情况下进行的。在以下示例中,根证书已由 CA 颁发。已将 CA 证书放置在移动系统和中心系统上。中心系统接受来自 NAT 盒 (NAT box) 之后的系统的 IPsec 协商。main1 是可以接受来自站点外系统的连接的公司系统。有关如何设置站点外系统,请参见示例 23–9。
## /etc/hosts on main1 main1 192.168.0.100 |
## /etc/inet/ipsecinit.conf on main1 # Keep everyone out unless they use this IPsec policy: {} ipsec {encr_algs aes encr_auth_algs sha1 sa shared} |
## /etc/inet/ike/ike.config on main1 # Global parameters # # Find CRLs by URI, URL, or LDAP # Use CRL from organization's URI use_http # # Use web proxy proxy "http://cache1.domain.org:8080/" # # Use LDAP server ldap_server "ldap1.domain.org,ldap2.domain.org:389" # # List CA-signed certificate cert_root "C=US, O=ExamplePKI Inc, OU=PKI-Example, CN=Example PKI" # # Rule for off-site systems with root certificate { label "Off-site system with root certificate" local_id_type DNS local_id "main1.domain.org" local_addr 192.168.0.100 # Root certificate ensures trust, # so allow any remote_id and any remote IP address. remote_id "" remote_addr 0.0.0.0/0 p2_pfs 5 p1_xform {auth_method rsa_sig oakley_group 5 encr_alg blowfish auth_alg sha1} p1_xform {auth_method rsa_sig oakley_group 5 encr_alg aes auth_alg sha1} p1_xform {auth_method rsa_sig oakley_group 5 encr_alg blowfish auth_alg sha1} p1_xform {auth_method rsa_sig oakley_group 5 encr_alg aes auth_alg sha1} } |
在以下示例中,根证书已由 CA 颁发,并放置在移动系统和中心系统上。mobile1 将从本部连接到公司总部。Internet 服务提供商 (Internet service provider, ISP) 网络使用 NAT 盒 (NAT box) ,以允许 ISP 为 mobile1 指定专用地址。然后,NAT 盒 (NAT box) 将专用地址转换为与其他 ISP 网络节点共享的公共 IP 地址。公司总部不在 NAT 之后。有关如何在公司总部设置计算机,请参见示例 23–8。
## /etc/hosts on mobile1 mobile1 10.1.3.3 main1 192.168.0.100 |
## /etc/inet/ipsecinit.conf on mobile1 # Find main1 {raddr 192.168.0.100} ipsec {encr_algs aes encr_auth_algs sha1 sa shared} |
## /etc/inet/ike/ike.config on mobile1 # Global parameters # # Find CRLs by URI, URL, or LDAP # Use CRL from organization's URI use_http # # Use web proxy proxy "http://cache1.domain.org:8080/" # # Use LDAP server ldap_server "ldap1.domain.org,ldap2.domain.org:389" # # List CA-signed certificate cert_root "C=US, O=ExamplePKI Inc, OU=PKI-Example, CN=Example PKI" # # Rule for off-site systems with root certificate { label "Off-site mobile1 with root certificate" local_id_type DNS local_id "mobile1.domain.org" local_addr 0.0.0.0/0 # Find main1 and trust the root certificate remote_id "main1.domain.org" remote_addr 192.168.0.100 p2_pfs 5 p1_xform {auth_method rsa_sig oakley_group 5 encr_alg blowfish auth_alg sha1 } } |
在以下示例中,自签名证书已经颁发,并存放在移动系统和中心系统上。main1 是可以接受来自站点外系统的连接的公司系统。有关如何设置站点外系统,请参见示例 23–11。
## /etc/hosts on main1 main1 192.168.0.100 |
## /etc/inet/ipsecinit.conf on main1 # Keep everyone out unless they use this IPsec policy: {} ipsec {encr_algs aes encr_auth_algs sha1 sa shared} |
## /etc/inet/ike/ike.config on main1 # Global parameters # # Self-signed certificates - trust me and enumerated others cert_trust "DNS=main1.domain.org" cert_trust "jdoe@domain.org" cert_trust "user2@domain.org" cert_trust "user3@domain.org" # # Rule for off-site systems with trusted certificate { label "Off-site systems with trusted certificates" local_id_type DNS local_id "main1.domain.org" local_addr 192.168.0.100 # Trust the self-signed certificates # so allow any remote_id and any remote IP address. remote_id "" remote_addr 0.0.0.0/0 p2_pfs 5 p1_xform {auth_method rsa_sig oakley_group 5 encr_alg blowfish auth_alg sha1 } } |
在以下示例中,mobile1 将从本部连接到公司总部。证书已经颁发,并放置在移动系统和中心系统上。ISP 网络使用 NAT 盒 (NAT box) ,以允许 ISP 为 mobile1 指定专用地址。然后,NAT 盒 (NAT box) 将专用地址转换为与其他 ISP 网络节点共享的公共 IP 地址。公司总部不在 NAT 之后。有关如何在公司总部设置计算机,请参见示例 23–10。
## /etc/hosts on mobile1 mobile1 10.1.3.3 main1 192.168.0.100 |
## /etc/inet/ipsecinit.conf on mobile1 # Find main1 {raddr 192.168.0.100} ipsec {encr_algs aes encr_auth_algs sha1 sa shared} |
## /etc/inet/ike/ike.config on mobile1 # Global parameters # Self-signed certificates - trust me and the central system cert_trust "jdoe@domain.org" cert_trust "DNS=main1.domain.org" # # Rule for off-site systems with trusted certificate { label "Off-site mobile1 with trusted certificate" local_id_type email local_id "jdoe@domain.org" local_addr 0.0.0.0/0 # Find main1 and trust the certificate remote_id "main1.domain.org" remote_addr 192.168.0.100 p2_pfs 5 p1_xform {auth_method rsa_sig oakley_group 5 encr_alg blowfish auth_alg sha1 } } |
下表包含将已连接硬件的相关信息通知给 IKE 的过程的链接。只有将已连接硬件的相关信息通知 IKE,IKE 才能使用该硬件。要使用硬件,请按照使用公钥证书配置 IKE中的硬件过程操作。
您不必通知 IKE 有关片内 (on-chip) 硬件的信息。例如,UltraSPARC® T2 处理器提供加密加速。您不需要配置 IKE 来查找片内加速器。
任务 |
说明 |
参考 |
---|---|---|
将 IKE 密钥操作转移到 Sun Crypto Accelerator 1000 板 |
将 IKE 链接到 PKCS #11 库。 | |
将 IKE 密钥操作转移到 Sun Crypto Accelerator 4000 板并在该板上存储密钥 |
将 IKE 链接到 PKCS #11 库,并列出已连接硬件的名称。 |
公钥证书也可以存储在连接的硬件上。Sun Crypto Accelerator 1000 板仅提供存储。Sun Crypto Accelerator 4000 和 Sun Crypto Accelerator 6000 板提供存储,并允许将公钥操作从系统转移到板上。
以下过程假定 Sun Crypto Accelerator 1000 板已连接到系统。此过程还假定已安装板的软件,而且已配置该软件。有关说明,请参见《Sun Crypto Accelerator 1000 Board Version 2.0 Installation and User’s Guide》。
在系统控制台上,承担主管理员角色或成为超级用户。
主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
远程登录会使安全关键型通信易于遭到窃听。即使以某种方式保护远程登录,系统的安全性也会降至远程登录会话的安全性。请使用 ssh 命令进行安全的远程登录。
检查是否已链接 PKCS #11 库。
键入以下命令,以确定 PKCS #11 库是否已链接:
# ikeadm get stats Phase 1 SA counts: Current: initiator: 0 responder: 0 Total: initiator: 0 responder: 0 Attempted: initiator: 0 responder: 0 Failed: initiator: 0 responder: 0 initiator fails include 0 time-out(s) PKCS#11 library linked in from /usr/lib/libpkcs11.so # |
Solaris 10 1/06: 从此发行版开始,可以在 softtoken 密钥库中存储密钥。
有关 Solaris 加密框架提供的密钥库的信息,请参见 cryptoadm(1M) 手册页。有关使用密钥库的示例,请参见Example 23–12。
以下过程假定 Sun Crypto Accelerator 4000 板已连接到系统。此过程还假定已安装板的软件,而且已配置该软件。有关说明,请参见《Sun Crypto Accelerator 4000 Board Version 1.1 Installation and User’s Guide》。
如果使用的是 Sun Crypto Accelerator 6000 板,请参见《Sun Crypto Accelerator 6000 Board Version 1.1 User’s Guide》获取说明。
在系统控制台上,承担主管理员角色或成为超级用户。
主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
远程登录会使安全关键型通信易于遭到窃听。即使以某种方式保护远程登录,系统的安全性也会降至远程登录会话的安全性。请使用 ssh 命令进行安全的远程登录。
检查是否已链接 PKCS #11 库。
IKE 使用该库的例程在 Sun Crypto Accelerator 4000 板上处理密钥生成和密钥存储。键入以下命令,以确定 PKCS #11 库是否已链接:
$ ikeadm get stats … PKCS#11 library linked in from /usr/lib/libpkcs11.so $ |
对于 RSA,Sun Crypto Accelerator 4000 板最多支持 2048 位的密钥。对于 DSA,此板最多支持 1024 位的密钥。
查找已连接的 Sun Crypto Accelerator 4000 板的标记 ID。
$ ikecert tokens Available tokens with library "/usr/lib/libpkcs11.so": "Sun Metaslot " |
该库返回一个包含 32 个字符的标记 ID(也称为 keystore name(密钥库名称))。在此示例中,可以将 Sun Metaslot 标记与 ikecert 命令一起使用来存储和加速 IKE 密钥。
有关如何使用标记的说明,请参见如何在硬件上生成和存储公钥证书。
结尾空格是由 ikecert 命令自动填充的。
标记可以存储在磁盘上、连接板上或 Solaris 加密框架提供的 softtoken 密钥库中。softtoken 密钥库标记 ID 可能与以下信息类似。
$ ikecert tokens Available tokens with library "/usr/lib/libpkcs11.so": "Sun Metaslot " |
有关如何为 softtoken 密钥库创建口令短语,请参见 pktool(1) 手册页。
如下所示的命令可向 softtoken 密钥库添加证书。Sun.Metaslot.cert 是一个包含 CA 证书的文件。
# ikecert certdb -a -T "Sun Metaslot" < Sun.Metaslot.cert Enter PIN for PKCS#11 token: Type user:passphrase |
任务 |
说明 |
参考 |
---|---|---|
使密钥协商的效率更高 |
更改密钥协商参数。 | |
配置密钥协商以允许传输延迟 |
增大密钥协商参数。 | |
将密钥协商配置为快速成功或快速显示故障 |
减小密钥协商参数。 |
当 IKE 协商密钥时,传输速度可能会影响协商的成功。通常,无需更改 IKE 传输参数的缺省值。但是,在通过很脏的线路优化密钥协商时,或者再现问题时,您可能希望更改传输值。
在持续时间较长的情况下,IKE 可以通过不可靠的传输线路协商密钥。可以增大某些参数以使初始尝试成功。如果初始尝试未成功,则可以隔开后续尝试以便为成功提供更多时间。
通过缩短持续时间,可以利用可靠的传输线路。这样,可以更快捷地重试已失败的协商,以便加快协商速度。在诊断问题时,您可能还希望加快协商,以便尽早获得失败的结果。缩短持续时间也使阶段 1 SA 可用于其生命周期。
在系统控制台上,承担主管理员角色或成为超级用户。
主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
远程登录会使安全关键型通信易于遭到窃听。即使以某种方式保护远程登录,系统的安全性也会降至远程登录会话的安全性。请使用 ssh 命令进行安全的远程登录。
在每个系统上,修改 /etc/inet/ike/config 文件中的阶段 1 持续时间参数。
### ike/config file on system ## Global parameters # ## Phase 1 transform defaults # #expire_timer 300 #retry_limit 5 #retry_timer_init 0.5 (integer or float) #retry_timer_max 30 (integer or float) |
允许尚未完成的 IKE 阶段 1 协商在删除协商尝试之前延迟的秒数。缺省情况下,尝试延迟 30 秒。
异常中止任何 IKE 协商之前的重新传输次数。缺省情况下,IKE 尝试五次。
重新传输之间的初始时间间隔。在达到 retry_timer_max 值之前,此时间间隔以双倍递增。初始时间间隔为 0.5 秒。
重新传输之间的最大时间间隔(以秒为单位)。重新传输时间间隔在达到此限制时停止增加。缺省情况下,该限制为 30 秒。
将已更改的配置读入内核。
在以下示例中,系统已通过高流量传输线路连接到其 IKE 对等方。原始设置位于文件的注释中。新设置延长了协商时间。
### ike/config file on partym ## Global Parameters # ## Phase 1 transform defaults #expire_timer 300 #retry_limit 5 #retry_timer_init 0.5 (integer or float) #retry_timer_max 30 (integer or float) # expire_timer 600 retry_limit 10 retry_timer_init 2.5 retry_timer_max 180 |
在以下示例中,系统已通过小流量的高速线路连接到其 IKE 对等方。原始设置位于文件的注释中。新设置缩短了协商时间。
### ike/config file on partym ## Global Parameters # ## Phase 1 transform defaults #expire_timer 300 #retry_limit 5 #retry_timer_init 0.5 (integer or float) #retry_timer_max 30 (integer or float) # expire_timer 120 retry_timer_init 0.20 |