系统管理指南:IP 服务

使用预先共享的密钥配置 IKE

使用预先共享的密钥是验证 IKE 的最简单方法。如果要将两个系统配置为使用 IKE,而且您是这两个系统的管理员,则使用预先共享的密钥是一个良好的选择。但是,与公钥证书不同,预先共享的密钥与特定的 IP 地址相关联。预先共享的密钥不能用于移动系统或可能重新编号的系统。此外,在使用预先共享的密钥时,不能将 IKE 计算转移到连接的硬件。

Procedure如何使用预先共享的密钥配置 IKE

IKE 实现提供了采用可变密钥长度的算法。所选的密钥长度是由站点安全性确定的。通常,密钥越长,提供的安全性就越高。

以下过程使用系统名称 enigmapartym。请用您的系统名称替换名称 enigmapartym

  1. 在系统控制台上,承担主管理员角色或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”


    注 –

    远程登录会使安全关键型通信易于遭到窃听。即使以某种方式保护远程登录,系统的安全性也会降至远程登录会话的安全性。请使用 ssh 命令进行安全的远程登录。


  2. 在每个系统上,将文件 /etc/inet/ike/config.sample 复制到文件 /etc/inet/ike/config

  3. 在每个系统上的 ike/config 文件中输入规则和全局参数。

    此文件中的规则和全局参数应该允许系统的 ipsecinit.conf 文件中的 IPsec 策略可以成功实施。以下是与如何使用 IPsec 保证两个系统之间的通信安全中的 ipsecinit.conf 示例配合使用的 ike/config 示例。

    1. 例如,在 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 参数的所有变量都必须在同一行上。


    2. 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
      }
      
  4. 在每个系统上,检验该文件的语法。


    # /usr/lib/inet/in.iked -c -f /etc/inet/ike/config
    
  5. 生成随机数以用作加密材料。

    如果站点具有随机数生成器,请使用该生成器。在 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


  6. 利用步骤 5 的输出构造一个密钥。


    f47cb0f432e14480951095f82b735ba80a9467d08f92c88068b6a40e

    此过程中的验证算法是 SHA–1,如步骤 3 所示。散列的大小(即验证算法输出的大小)确定预先共享密钥的最小建议大小。SHA–1 算法的输出是 160 位或 40 个字符。示例密钥的长度是 56 个字符,这将提供其他加密材料供 IKE 使用。

  7. 在每个系统上创建文件 /etc/inet/secret/ike.preshared

    在每个文件中放置预先共享的密钥。

    1. 例如,在 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
      	}
    2. 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
      	}

    注 –

    每个系统上的预先共享密钥必须完全相同。



示例 23–1 为运行不同操作系统的两个系统生成相同的加密材料

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 给其他管理员打电话。


Procedure如何刷新 IKE 预先共享密钥

此过程假定您希望按固定的时间间隔替换现有的预先共享密钥。

  1. 在系统控制台上,承担主管理员角色或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”


    注 –

    远程登录会使安全关键型通信易于遭到窃听。即使以某种方式保护远程登录,系统的安全性也会降至远程登录会话的安全性。请使用 ssh 命令进行安全的远程登录。


  2. 生成随机数,并构造适当长度的密钥。

    有关详细信息,请参见如何在 Solaris 系统上生成随机数。如果要为 Solaris 系统生成预先共享的密钥,而且此系统与需要 ASCII 的操作系统通信,请参见示例 23–1

  3. 将当前密钥替换为新密钥。

    例如,在主机 enigmapartym 上,将 /etc/inet/secret/ike.preshared 文件中 key 的值替换为一个相同长度的新数值。

  4. 将新密钥读入内核。

    • 从 Solaris 10 4/09 发行版开始,请刷新 ike 服务。


      # svcadm refresh ike
      
    • 如果您运行的是 Solaris 10 4/09 发行版之前的发行版,请中止并重新启动 in.iked 守护进程。

      1. 检查 in.iked 守护进程的权限级别。


        # /usr/sbin/ikeadm get priv
        Current privilege level is 0x0, base privileges enabled

        如果该命令返回权限级别 0x10x2,则您可以更改加密材料。级别 0x0 不允许执行修改或查看加密材料的操作。缺省情况下,in.iked 守护进程按权限级别 0x0 运行。

      2. 如果权限级别是 0x0,请先中止再重新启动该守护进程。

        守护进程重新启动时,它将读取新版本的 ike.preshared 文件。


        # pkill in.iked
        # /usr/lib/inet/in.iked
        
      3. 如果权限级别是 0x10x2,则读入新版本的 ike.preshared 文件。


        # ikeadm read preshared
        

Procedure如何查看 IKE 预先共享密钥

缺省情况下,ikeadm 命令会阻止您在阶段 1 SA 的转储中查看实际密钥。在调试期间查看密钥很有用。

要查看实际密钥,您必须提高守护进程的权限级别。有关权限级别的说明,请参见IKE 管理命令


注 –

要在 Solaris 10 4/09 发行版之前的发行版中执行此过程,请参见示例 23–2


开始之前

已配置 IKE,并且 ike 服务正在运行。

  1. 查看 IKE 预先共享密钥。


    # ikeadm
    ikeadm> dump preshared
    
  2. 如果出现错误,请提高 in.iked 守护进程的权限级别。

    1. 提高 SMF 系统信息库中 in.iked 守护进程的权限级别。


      # svcprop -p config/admin_privilege ike
      base
      # svccfg -s ike setprop config/admin_privilege=keymat
      
    2. 提高正在运行的 in.iked 守护进程的权限级别。


      # svcadm refresh ike ; svcadm restart ike
      
    3. (可选的)确认权限级别为 keymat


      # svcprop -p config/admin_privilege ike
      keymat
    4. 通过再次运行步骤 1 查看密钥。

  3. 将 IKE 守护进程恢复为 base 权限级别。

    1. 查看密钥后,将权限级别恢复为缺省级别。


      # svccfg -s ike setprop config/admin_privilege=base
      
    2. 刷新 IKE,然后再重新启动 IKE。


      # svcadm refresh ike ; svcadm restart ike
      

示例 23–2 在 Solaris 10 4/09 发行版之前的发行版中检验 IKE 预先共享密钥

在以下示例中,管理员要在运行的不是当前 Solaris 发行版的 Solaris 系统中查看密钥。管理员想要检验该系统中的密钥是否与通信系统中的密钥完全相同。检验两个系统中的密钥是否完全相同后,管理员将权限级别恢复为 0。


Procedure如何为 ipsecinit.conf 中的新策略项添加 IKE 预先共享密钥

如果在 IPsec 和 IKE 正在运行时添加 IPsec 策略项,则必须将新的策略和 IKE 规则读入内核。从 Solaris 10 4/09 发行版开始,添加新密钥后,要重新启动 policy 服务并刷新 ike 服务。


注 –

要在 Solaris 10 4/09 发行版之前的发行版中执行此过程,请参见示例 23–3


开始之前

此过程将假定以下内容:

  1. 在系统控制台上,承担主管理员角色或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”


    注 –

    远程登录会使安全关键型通信易于遭到窃听。即使以某种方式保护远程登录,系统的安全性也会降至远程登录会话的安全性。请使用 ssh 命令进行安全的远程登录。


  2. 在此系统中,生成随机数,并构造一个 64 位到 448 位的密钥。

    有关详细信息,请参见如何在 Solaris 系统上生成随机数。如果要为 Solaris 系统生成预先共享的密钥,而且此系统与需要 ASCII 的操作系统通信,请参见示例 23–1

  3. 以某种方法将密钥发送给远程系统的管理员。

    需要同时添加相同的预先共享密钥。密钥的安全性仅与传输机制的安全性相同。带外机制(如已注册的邮件或受保护的传真机)是最佳的。您也可以使用 ssh 会话管理这两个系统。

  4. 为 IKE 创建一个规则以管理 enigmaada 的密钥。

    1. 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
      	}
    2. 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
      }
  5. 确保 IKE 预先共享密钥在重新引导时是可用的。

    1. 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
      }
    2. 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
      }
  6. 在每个系统上,重新启动 IPsec 策略服务以保证所添加的接口的安全。


    # svcadm restart policy
    
  7. 在每个系统上,刷新 ike 服务。


    # svcadm refresh ike
    
  8. 检验系统是否可以进行通信。

    请参见如何检验 IKE 预先共享密钥是否完全相同


示例 23–3 为新的 IPsec 策略项添加 IKE 预先共享密钥

在以下示例中,管理员要将预先共享密钥添加到运行的不是当前 Solaris 发行版的 Solaris 系统。管理员遵循前面的过程来修改 ike/configike.preshared 文件,然后生成密钥并联系远程系统。管理员使用不同的命令将新的 IPsec 策略和 IKE 规则读入内核。


Procedure如何检验 IKE 预先共享密钥是否完全相同

如果通信系统上的预先共享密钥不是完全相同的,则系统无法进行验证。

开始之前

在要测试的两个系统之间已配置并启用 IPsec。您运行的是当前 Solaris 10 发行版。


注 –

要在 Solaris 10 4/09 发行版之前的发行版中执行此过程,请参见示例 23–2


  1. 在系统控制台上,承担主管理员角色或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”


    注 –

    远程登录会使安全关键型通信易于遭到窃听。即使以某种方式保护远程登录,系统的安全性也会降至远程登录会话的安全性。请使用 ssh 命令进行安全的远程登录。


  2. 在每个系统上,检查 in.iked 守护进程的权限级别。


    # svcprop -p config/admin_privilege ike
    base
    • 如果权限级别为 keymat,请继续执行步骤 3

    • 如果权限级别为 basemodkeys,请提高权限级别。

      然后,刷新并重新启动 ike 服务。


      # svccfg -s ike setprop config/admin_privilege=keymat
      # svcadm refresh ike ; svcadm restart ike
      # svcprop -p config/admin_privilege ike
      keymat
  3. 在每个系统上,查看预先共享密钥的信息。


    # 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).
  4. 比较两个转储。

    如果预先共享的密钥不是完全相同的,则在 /etc/inet/secret/ike.preshared 文件中将一个密钥替换为另一个密钥。

  5. 检验完成后,在每个系统中将权限级别恢复为缺省级别。


    # svccfg -s ike setprop config/admin_privilege=base
    # svcadm restart ike