在 Oracle® Solaris 11.2 中确保网络安全

退出打印视图

更新时间: 2014 年 9 月
 
 

如何使用自签名公钥证书配置 IKEv1

在此过程中,您可以创建一个称作证书对的公钥/私钥和证书。私钥存储于本地证书数据库中的磁盘上,可以使用 ikecert certlocal 命令进行引用。公钥和证书存储在公共证书数据库中。可以使用 ikecert certdb 命令进行引用。您将与对等方系统交换此公共证书。两个证书用于验证 IKEv1 传输。

自签名证书比 CA 颁发的公共证书所需的开销少,但不太易于扩展。不同于 CA 颁发的证书,自签名证书必须由两位交换证书的管理员进行验证。

开始之前

您必须成为分配有 "Network IPsec Management"(网络 IPsec 管理)权限配置文件的管理员。有关更多信息,请参见在 Oracle Solaris 11.2 中确保用户和进程的安全 中的使用所指定的管理权限

如果执行远程管理,请参见Example 7–1在 Oracle Solaris 11.2 中管理安全 Shell 访问 中的如何使用安全 Shell 远程管理 ZFS,了解进行安全远程登录的说明。

  1. 在每个 IKEv1 系统上,在 ike.privatekeys 数据库中创建自签名证书。

    有关 ikecert certlocal 命令的参数,请参见 ikecert(1M) 手册页。

    1. 例如,partym 系统上命令的显示与以下内容类似:
      # ikecert certlocal -ks -m 2048 -t rsa-sha512 \
      -D "O=exampleco, OU=IT, C=US, CN=partym" \
      -A IP=192.168.13.213
      Creating private key.
      Certificate added to database.
      -----BEGIN X509 CERTIFICATE-----
      MIIC1TCCAb2gAwIBAgIEfdZgKjANBgkqhkiG9w0BAQUFADAaMRgwFgYDVQQDEw9T
      a...+
      zBGi4QkNdI3f
      -----END X509 CERTIFICATE-----

      其中,

      –ks

      创建自签名证书。

      –m keysize

      指定密钥的大小。

      –t keytype

      指定要使用的算法类型。

      –D dname

      指定证书主题的 X.509 标识名 (distinguished name, DN)。有关示例,请参见在 IKE 中使用公钥证书

      –A altname

      指定证书的替代名称或昵称。altname 的格式为 tag=value。有效标记是 IPDNSemailDN


      注 -  –D–A 选项的值是仅标识证书而非任何系统的名称,例如 192.168.13.213。事实上,由于这些值为证书昵称,必须在带外验证对等方系统上是否安装了正确的证书。
    2. enigma 系统上命令的显示与以下内容类似:
      # ikecert certlocal -ks -m 2048 -t rsa-sha512 \
      -D "O=exampleco, OU=IT, C=US, CN=enigma" \
      -A IP=192.168.116.16
      Creating private key.
      Certificate added to database.
      -----BEGIN X509 CERTIFICATE-----
      MIIC1TCCAb2gAwIBAgIEBl5JnjANBgkqhkiG9w0BAQUFADAaMRgwFgYDVQQDEw9T
      ...
      y85m6LHJYtC6
      -----END X509 CERTIFICATE-----
  2. 保存证书并将它发送到远程系统。

    输出为证书的公共部分的编码版本。您可以安全地将此证书粘贴到电子邮件中。接收方必须在带外验证其是否安装了正确的证书,如Step 4 中所述。

    1. 例如,将 partym 证书的公共部分发送给 enigma 管理员。
      To: admin@enigma.ja.example.com
      From: admin@party.us.example.com
      Message: -----BEGIN X509 CERTIFICATE-----
      MIIC1TCCAb2gAwIBAgIEfdZgKjANBgkqhkiG9w0BAQUFADAaMRgwFgYDVQQDEw9T
      a...+
      zBGi4QkNdI3f
      -----END X509 CERTIFICATE------
    2. enigma 管理员将向您发送 enigma 证书的公共部分。
      To: admin@party.us.example.com
      From: admin@enigma.ja.example.com
      Message: ----BEGIN X509 CERTIFICATE-----
      MIIC1TCCAb2gAwIBAgIEBl5JnjANBgkqhkiG9w0BAQUFADAaMRgwFgYDVQQDEw9T
      ...
      y85m6LHJYtC6
      -----END X509 CERTIFICATE-----
  3. 在每个系统上,将接收到的证书添加到公钥数据库中。
    1. 将管理员的电子邮件保存到能以 root 身份读取的文件中。
    2. 将该文件重定向到 ikecert 命令。
      # ikecert certdb -a < /tmp/certificate.eml 

      该命令将导入 BEGINEND 标记之间的文本。

  4. 与另一位管理员一起验证证书是否来自该管理员。

    例如,可以致电其他管理员,以验证您拥有的其公共证书的散列是否与仅他们拥有的其私钥证书的散列匹配。

    1. 列出 partym 中存储的证书。

      在以下示例中,Note 1 指示了 slot 0 中证书的 distinguished name, DN(标识名)。slot 0 中的私钥具有相同的散列(请参见 Note 3),因此这些证书具有相同的证书对。要使用公共证书,必须具有匹对的证书对。certdb 子命令可列出公共部分,而 certlocal 子命令可列出私密部分。

      partym # ikecert certdb -l
      
      Certificate Slot Name: 0   Key Type: rsa
      	(Private key in certlocal slot 0)
      	Subject Name: <O=exampleco, OU=IT, C=US, CN=partym>Note 1
      	Key Size: 2048
      	Public key hash: 80829EC52FC5BA910F4764076C20FDCF
      
      Certificate Slot Name: 1   Key Type: rsa
      	(Private key in certlocal slot 1)
      	Subject Name: <O=exampleco, OU=IT, C=US, CN=Ada>
      	Key Size: 2048
      	Public key hash: FEA65C5387BBF3B2C8F16C019FEBC388
      partym # ikecert certlocal -l
      Local ID Slot Name: 0   Key Type: rsa
      	Key Size: 2048
      	Public key hash: 80829EC52FC5BA910F4764076C20FDCFNote 3
      
      Local ID Slot Name: 1   Key Type: rsa-sha512
              Key Size: 2048
              Public key hash: FEA65C5387BBF3B2C8F16C019FEBC388
      
      Local ID Slot Name: 2   Key Type: rsa
      	Key Size: 2048
      	Public key hash: 2239A6A127F88EE0CB40F7C24A65B818

      此检查操作已验证 partym 系统具有有效的证书对。

    2. 验证 enigma 系统是否具有 partym 的公共证书。

      您可通过电话读取公钥散列。

      将上一步骤中 partym 上 Note 3 的散列与 enigma 上 Note 4 的散列进行比较。

      enigma # ikecert certdb -l
      
      Certificate Slot Name: 0   Key Type: rsa
              (Private key in certlocal slot 0)
              Subject Name: <O=exampleco, OU=IT, C=US, CN=Ada>
              Key Size: 2048
              Public key hash: 2239A6A127F88EE0CB40F7C24A65B818
      
      Certificate Slot Name: 1   Key Type: rsa
              (Private key in certlocal slot 1)
              Subject Name: <O=exampleco, OU=IT, C=US, CN=enigma>
              Key Size: 2048
              Public key hash: FEA65C5387BBF3B2C8F16C019FEBC388
      
      Certificate Slot Name: 2   Key Type: rsa
              (Private key in certlocal slot 2)
              Subject Name: <O=exampleco, OU=IT, C=US, CN=partym>
              Key Size: 2048
              Public key hash: 80829EC52FC5BA910F4764076C20FDCFNote 4

      存储于 enigma 的公共证书数据库中的最后一个证书的公钥散列和主题名称与上一步骤中 partym 的私密证书匹配。

  5. 在每个系统上,信任这两个证书。

    编辑 /etc/inet/ike/config 文件以识别证书。

    远程系统的管理员提供 cert_trustremote_addrremote_id 参数的值。

    1. 例如,在 partym 系统上,ike/config 文件的显示与以下内容类似:
      # Explicitly trust the self-signed certs
      # that we verified out of band. The local certificate
      # is implicitly trusted because we have access to the private key.
      
      cert_trust "O=exampleco, OU=IT, C=US, CN=enigma"
      # We could also use the Alternate name of the certificate,
      # if it was created with one.  In this example, the Alternate Name
      # is in the format of an IP address:
      # cert_trust "192.168.116.16"
      
      ## Parameters that may also show up in rules.
      
      p1_xform 
        { auth_method preshared oakley_group 5 auth_alg sha256 encr_alg 3des }
      p2_pfs 5
      
      {
       label "US-partym to JA-enigma"
       local_id_type dn
       local_id "O=exampleco, OU=IT, C=US, CN=partym"
       remote_id "O=exampleco, OU=IT, C=US, CN=enigma"
      
       local_addr  192.168.13.213
      # We could explicitly enter the peer's IP address here, but we don't need
      # to do this with certificates, so use a wildcard address. The wildcard
      # allows the remote device to be mobile or behind a NAT box
       remote_addr 0.0.0.0/0
      
      
       p1_xform
        {auth_method rsa_sig oakley_group 2 auth_alg sha256 encr_alg aes}
      }
    2. enigma 系统上,在 ike/config 文件中添加本地参数的 enigma 值。

      对于远程参数,请使用 partym 值。确保本地系统上 label 关键字的值是唯一的。

      …
      {
       label "JA-enigma to US-partym"
       local_id_type dn
       local_id "O=exampleco, OU=IT, C=US, CN=enigma"
       remote_id "O=exampleco, OU=IT, C=US, CN=partym"
      
       local_addr  192.168.116.16
       remote_addr 0.0.0.0/0
      
       p1_xform
        {auth_method rsa_sig oakley_group 2 auth_alg sha256 encr_alg aes}
      }
  6. 在对等方系统上,启用 IKEv1。
    partym # svcadm enable ipsec/ike:default
    enigma # svcadm enable ipsec/ike

接下来的步骤

如果建立 IPsec 策略未完成,请返回到 IPsec 过程以启用或刷新 IPsec 策略。有关保护 VPN 的 IPsec 策略的示例,请参见使用 IPsec 保护 VPN。有关 IPsec 策略的其他示例,请参见如何使用 IPsec 保护两台服务器之间的网络通信