在此过程中,请创建一个公钥证书并签名。私钥和证书存储在 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,了解进行安全远程登录的说明。
有关 ikev2cert gencert 命令参数的说明,请查看 pktool(1) 手册页中的 pktool gencert keystore=pkcs11 子命令。
有关 subject 参数的格式,请参见在 IKE 中使用公钥证书。
# 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
# 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
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
outformat=pem 选项可确保公共证书以适合直接导入的格式放置在文件中。标签会标识密钥库中的证书。
# cd /tmp # ikev2cert export objtype=cert outformat=pem outfile=filename label=label Enter PIN for Sun Software PKCS#11 softtoken:xxxxxxxx
例如,如果您管理两个系统,可使用 sftp 命令将证书从另一个系统带过来。
enigma # sftp jdoe@partym:/tmp/ITpartym.pem /tmp/ITpartym.pem.cert partym # sftp jdoe@enigma:/tmp/ITenigma.pem /tmp/ITenigma.pem.cert
此时会提示您输入口令。在本示例中,jdoe 必须提供一个口令。
例如,partym 管理员通过电子邮件将包含 partym 的证书的文件摘要发送给另一个管理员。enigma 管理员通过电子邮件发送 enigma 证书文件摘要。
partym # digest -a sha1 /tmp/ITpartym.pem c6dbef4136c0141ae62110246f288e5546a59d86 enigma # digest -a sha1 ITenigma.pem 6b288a6a6129d53a45057065bd02b35d7d299b3a
enigma # digest -a sha1 /tmp/ITpartym.pem.cert c6dbef4136c0141ae62110246f288e5546a59d86 partym # digest -a sha1 /tmp/ITenigma.pem.cert 6b288a6a6129d53a45057065bd02b35d7d299b3a
这些摘要必须匹配。如果不匹配,则将无法将文件导入密钥库。关于另一种检验证书有效性的方法,请参见Example 9–3。
将证书导入密钥库时,必须为证书分配一个标签,用来唯一标识您系统上的证书。标签会将公钥与其公钥证书相关联。
enigma# ikev2cert import label=ITpartym1 infile=/tmp/ITpartym.pem.cert
partym# ikev2cert import label=ITenigma1 infile=/tmp/ITenigma.pem.cert
比较此列表及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
使用 pfedit 命令编辑 /etc/inet/ike/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" } ...
对于远程参数,请使用 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" } ...
# /usr/lib/inet/inikev2.d -c
修复任何拼写错误或差错,然后继续。
# svcs ikev2 STATE STIME FMRI disabled Sep_07 svc:/network/ipsec/ike:ikev2
partym # svcadm enable ipsec/ike:ikev2 enigma # svcadm enable ipsec/ike:ikev2
在本示例中,管理员指定证书有效期为两年。
# 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 保护两台服务器之间的网络通信。