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

退出打印视图

更新时间: 2014 年 9 月
 
 

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

在此过程中,请创建一个公钥证书并签名。私钥和证书存储在 IKEv2 的 PKCS #11 softtoken 密钥库中。将公钥证书发送给 IKE 对等方,随后对等方会发来它们的公共证书。

在所有使用自签名证书的 IKE 系统上执行此过程。

开始之前

要使用证书,必须完成如何为 IKEv2 公钥证书创建并使用密钥库

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

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

  1. 在密钥库中创建一个自签名证书。

    有关 ikev2cert gencert 命令参数的说明,请查看 pktool(1) 手册页中的 pktool gencert keystore=pkcs11 子命令。

    有关 subject 参数的格式,请参见在 IKE 中使用公钥证书


    注 -  给证书分配一个标签。此标签用来标识本地密钥库中的证书及其相应的密钥。
    1. 例如,partym 系统上命令的显示与以下内容类似:
      # pfbash
      	# ikev2cert gencert \
      	label="ITpartym" \
      	subject="O=exampleco, OU=IT, C=US, CN=partym" \
      	serial=0x87654321
          keytype=rsa
          keylen=2048
      	Enter PIN for Sun Software PKCS#11 softtoken: xxxxxxxx

      以下错误消息表明键入了错误的 PIN 或密钥库未初始化:

      Error creating certificate and keypair:
      	keystore error: CKR_PIN_INCORRECT
      	libkmf error: KMF_ERR_AUTH_FAILED
      
      	Error creating certificate and keypair:
      	keystore error: CKR_PIN_EXPIRED: PIN expired and must be changed
      	libkmf error: KMF_ERR_BAD_PARAMETER: invalid parameter

      提示  -  显示的 pktool 命令语法表明部分证书项键入错误。检查命令是否使用了禁用的算法、缺少双引号和等号以及存在其他拼写错误。找到无效参数的策略之一是检索命令,然后每次删除一个参数。
    2. enigma 系统上命令的显示与以下内容类似:
      # ikev2cert gencert \
      	label=ITenigma \
      	subject="O=exampleco, OU=IT, C=US, CN=enigma" \
      	serial=0x86428642
          keytype=rsa
          keylen=2048
      	Enter PIN for Sun Software PKCS#11 softtoken: xxxxxxxx
  2. (u53ef选) 列出密钥和证书。
    enigma # /usr/sbin/ikev2cert list objtype=both
    	Enter PIN for Sun Software PKCS#11 softtoken: xxxxxxxx
    	No.     Key Type        Key Len.        Key Label
    	----------------------------------------------------
    	Asymmetric private keys:
    	1)      RSA                             ITenigma
    	Asymmetric public keys:
    	1)      RSA                             ITenigma
    	Certificates:
    	1) X.509 certificate
    		Label: ITenigma
    		Subject: C=US, O=exampleco, OU=IT, CN=enigma
    		Issuer: C=US, O=exampleco, OU=IT, CN=enigma
    		Not Before: April 10 21:49:00 2014 GMT
    		Not After: April 10 21:49:00 2015 GMT
    		Serial: 0x86426420
    		Signature Algorithm: sha1WithRSAEncryption
    		X509v3 Subject Key Identifier:
    			34:7a:3b:36:c7:7d:4f:60:ed:ec:4a:96:33:67:f2:ac:87:ce:35:cc
    		SHA1 Certificate Fingerprint:
    			68:07:48:65:a2:4a:bf:18:f5:5b:95:a5:01:42:c0:26:e3:3b:a5:30

    提示  -  缺省的散列算法是 SHA1。要使用更强大的签名算法创建证书,请使用 keytype 选项和不同的散列算法,例如 keytype=rsa hash=sha384。有关选项,请参见 pktool(1) 手册页。
  3. 向另一个系统提供证书。
    1. 在每个系统上,仅将证书导出到文件。

      outformat=pem 选项可确保公共证书以适合直接导入的格式放置在文件中。标签会标识密钥库中的证书。

      # cd /tmp
      	# ikev2cert export objtype=cert outformat=pem outfile=filename label=label
      	Enter PIN for Sun Software PKCS#11 softtoken:xxxxxxxx
    2. 通过电子邮件、sftpssh 将证书发送到另一个系统。

      例如,如果您管理两个系统,可使用 sftp 命令将证书从另一个系统带过来。

      enigma # sftp jdoe@partym:/tmp/ITpartym.pem /tmp/ITpartym.pem.cert
      	partym # sftp jdoe@enigma:/tmp/ITenigma.pem /tmp/ITenigma.pem.cert

      此时会提示您输入口令。在本示例中,jdoe 必须提供一个口令。

  4. 检验证书是否完全相同。

    您需要确保在将证书装入密钥库之前收到了正确的证书。

    1. 在每个系统上创建一个导出文件摘要。

      例如,partym 管理员通过电子邮件将包含 partym 的证书的文件摘要发送给另一个管理员。enigma 管理员通过电子邮件发送 enigma 证书文件摘要。

      partym # digest -a sha1 /tmp/ITpartym.pem
      	c6dbef4136c0141ae62110246f288e5546a59d86
      
      	enigma # digest -a sha1 ITenigma.pem
      	6b288a6a6129d53a45057065bd02b35d7d299b3a
      	
    2. 在另一个系统上,对包含来自第一个系统的证书的文件运行 digest 命令。
      enigma # digest -a sha1 /tmp/ITpartym.pem.cert
      	c6dbef4136c0141ae62110246f288e5546a59d86
      
      	partym # digest -a sha1 /tmp/ITenigma.pem.cert
      	6b288a6a6129d53a45057065bd02b35d7d299b3a

      这些摘要必须匹配。如果不匹配,则将无法将文件导入密钥库。关于另一种检验证书有效性的方法,请参见Example 9–3

  5. 检验之后,将另一个系统的证书导入您的密钥库。

    将证书导入密钥库时,必须为证书分配一个标签,用来唯一标识您系统上的证书。标签会将公钥与其公钥证书相关联。

    enigma# ikev2cert import label=ITpartym1 infile=/tmp/ITpartym.pem.cert
    partym# ikev2cert import label=ITenigma1 infile=/tmp/ITenigma.pem.cert
  6. (u53ef选) 列出密钥库中的对象。

    比较此列表及Step 2 中的列表。例如,在 enigma 密钥库中,添加了 partym 证书。

    enigma # /usr/sbin/ikev2cert list objtype=both
    	Enter PIN for Sun Software PKCS#11 softtoken: xxxxxxxx
    	No.     Key Type        Key Len.        Key Label
    	----------------------------------------------------
    	Asymmetric private keys:
    	1)      RSA                             ITenigma
    	Asymmetric public keys:
    	1)      RSA                             ITenigma
    	Certificates:
    	1) X.509 certificate
    		Label: ITenigma
    		Subject: C=US, O=exampleco, OU=IT, CN=enigma
    		Issuer: C=US, O=exampleco, OU=IT, CN=enigma
    		Not Before: April 10 21:49:00 2014 GMT
    		Not After: April 10 21:49:00 2015 GMT
    		Serial: 0x86426420
    		Signature Algorithm: sha1WithRSAEncryption
    		X509v3 Subject Key Identifier:
    			34:7a:3b:36:c7:7d:4f:60:ed:ec:4a:96:33:67:f2:ac:87:ce:35:cc
    		SHA1 Certificate Fingerprint:
    			68:07:48:65:a2:4a:bf:18:f5:5b:95:a5:01:42:c0:26:e3:3b:a5:30
    
    	2) X.509 certificate
    		Label: ITpartym1
    		Subject: C=US, O=exampleco, OU=IT, CN=partym
    		Issuer: C=US, O=exampleco, OU=IT, CN=partym
    		Not Before: April 10 21:40:00 2014 GMT
    		Not After: April 10 21:40:00 2015 GMT
    		Serial: 0x87654321
    		Signature Algorithm: sha1WithRSAEncryption
    		X509v3 Subject Key Identifier:
    			ae:d9:c8:a4:19:68:fe:2d:6c:c2:9a:b6:06:55:b5:b5:d9:d9:45:c6
    		SHA1 Certificate Fingerprint:
    			83:26:44:29:b4:1f:af:4a:69:0d:87:c2:dc:f4:a5:1b:4f:0d:36:3b
  7. 在每个系统上,使用 IKEv2 规则中的证书。

    使用 pfedit 命令编辑 /etc/inet/ike/ikev2.config 文件。

    1. 例如,在 partym 系统上,ikev2.config 文件中规则的显示与以下内容类似:
      ##  ... Global transform that applies to any rule without a declared transform
      	ikesa_xform { dh_group 21 auth_alg sha512 encr_alg aes }
      	##  ... Any self-signed
      	## end-entity certificates must be present in the keystore or
      	## they will not be trusted.
      	{
      	 label "partym-enigma"
      	 auth_method cert
      	 local_id DN = "O=exampleco, OU=IT, C=US, CN=partym"
      	 remote_id DN = "O=exampleco, OU=IT, C=US, CN=enigma"
      	}
      	...
    2. enigma 系统上,将 enigma 证书的 DN 用作 ikev2.config 文件中 local_id 的值。

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

      …
      	ikesa_xform { dh_group 21 auth_alg sha512 encr_alg aes }
      	…
      	{
      	 label "enigma-partym"
      	 auth_method cert
      	 local_id DN = "O=exampleco, OU=IT, C=US, CN=enigma"
      	 remote_id DN = "O=exampleco, OU=IT, C=US, CN=partym"
      	}
      	...
  8. (u53ef选) 在每个系统上,检查 ikev2.config 文件的有效性。
    # /usr/lib/inet/inikev2.d -c

    修复任何拼写错误或差错,然后继续。

  9. 在每个系统上,检查 IKEv2 服务实例的状态。
    # svcs ikev2
    	STATE          STIME    FMRI
    	disabled       Sep_07   svc:/network/ipsec/ike:ikev2
  10. 在每个系统上,启用 IKEv2 服务实例。
    partym # svcadm enable ipsec/ike:ikev2
    
    	enigma # svcadm enable ipsec/ike:ikev2
示例 9-2  创建一个生命周期有限的自签名证书

在本示例中,管理员指定证书有效期为两年。

# ikev2cert gencert \
	 > label=DBAuditV \
	 > serial=0x12893467235412 \
	 > subject="O=exampleco, OU=DB, C=US, CN=AuditVault" \
	 > altname=EMAIL=auditV@example.com \ 
	 > keytype=ec curve=secp521r1 hash=sha512 \
     > lifetime=2-year
示例 9-3  根据指纹验证公钥证书

在本示例中,管理员使用证书指纹验证证书。此方法的缺点是,管理员必须在查看指纹之前将对等方的证书导入密钥库。

管理员导入证书,使用 ikev2cert list objtype=cert 命令列出证书,然后在输出内容中复制证书指纹,将其发送给另一个系统管理员。

SHA1 Certificate Fingerprint:
             83:26:44:29:b4:1f:af:4a:69:0d:87:c2:dc:f4:a5:1b:4f:0d:36:3b

如果验证失败,导入证书的管理员必须将证书及其公钥从密钥库删除。

# ikev2cert delete label=label-name
       Enter PIN for Sun Software PKCS#11 softtoken: xxxxxxxx
       1 public key(s) found, do you want to delete them (y/N) ? y
       1 certificate(s) found, do you want to delete them (y/N) ? y

接下来的步骤

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