跳过导航链接 | |
退出打印视图 | |
手册页第 1M 部分:系统管理命令 Oracle Solaris 11 Information Library (简体中文) |
- 处理计算机文件系统上的公钥证书数据库
ikecert certlocal [-a | -e | -h | -k | -l | -r | -U | -C | -L] [[-p] -T PKCS#11 token identifier] [option_specific_arguments]...
ikecert certdb [-a | -e | -h | -l | -r | -U | -C | -L] [[-p] -T PKCS#11 token identifier] [option_specific_arguments]...
ikecert certrldb [-a | -e | -h | -l | -r] [option_specific_arguments]...
ikecert tokens
ikecert 命令处理计算机文件系统上的公钥证书数据库。请参见下面的“文件”部分。
ikecert 有三个子命令分别对应于三个主要系统信息库,还有一个子命令用于列出可用硬件令牌:
certlocal,用于处理私钥系统信息库
certdb,用于处理公钥系统信息库
certrldb,用于处理证书撤销列表 (certificate revocation list, CRL) 系统信息库。
tokens,用于显示给定 PKCS#11 库的可用 PKCS#11 令牌。
支持的唯一 PKCS#11 库和硬件是 Sun Cryptographic Accelerator 4000。
除 tokens 以外,每个子命令都需要一个选项,后面可能跟有一个或多个特定于选项的参数。
tokens 子命令列出 /etc/inet/ike/config 中指定的 PKCS#11 库中的所有可用令牌。
所支持的选项如下:
当随 certlocal 子命令一起指定时,此选项将私钥安装(添加)到 Internet 密钥交换 (Internet Key Exchange, IKE) 本地 ID 数据库中。密钥数据从标准输入读取,并且采用仅限 Solaris 的格式或未加密的 PKCS#8 DER 格式。自动检测密钥格式。无法识别 PEM 格式的 PKCS#8 密钥文件和受口令保护的加密格式的文件,但可以使用 OpenSSL 中提供的工具对这些文件进行相应转换。
当对应的公共证书已不在 IKE 数据库中时,此选项不能用于 PKCS#11 硬件对象。当同时导入公共证书和私钥时,必须首先使用 certdb 子命令导入公共证书。
当随 certdb 子命令一起指定时,此选项从标准输入读取证书,并将其添加到 IKE 证书数据库。该证书必须是采用 PEM Base64 或 ASN.1 BER 编码的 X.509 证书。证书采用其标识名称。
此选项可采用下列两种方法之一将证书导入到 PKCS#11 硬件密钥存储:使用 certlocal -kc 选项创建匹配的公钥对象和现有私钥对象,或者如果明确指定了 PKCS#11 令牌,则使用 -T 选项。
当随 certrldb 子命令一起指定时,此选项将 CRL 安装(添加)到 IKE 数据库中。CRL 从标准输入读取。
当随 certlocal 子命令一起指定时,此选项从 IKE 本地 ID 数据库中提取私钥。密钥数据写入到标准输出。插槽指定要提取的私钥。私钥仅以二进制/ber 格式提取。
使用此选项时应格外小心。请参见下面的“安全”部分。
此选项不适用于 PKCS#11 硬件对象。
当与 -f pkcs8 结合使用时,将以未加密的 PKCS#8 格式提取私钥。
当随 certdb 子命令一起指定时,此选项从与 certspec 匹配的 IKE 证书数据库中提取证书,并将其写入到标准输出。output-format 选项指定编码格式。有效选项包括 PEM 和 BER。它会提取第一个匹配的标识。缺省输出格式为 PEM。
当随 certrldb 子命令一起指定时,此选项从 IKE 数据库提取 CRL。密钥数据写入到标准输出。certspec 指定提取的 CRL。将提取数据库中的第一个匹配 CRL。有关 certspec 模式的详细信息,请参见下面的“说明”。
当随 certlocal 子命令一起指定时,此选项生成一个 IKE 公钥/私钥对,并将其添加到本地 ID 数据库。此外,它还会生成证书请求,并将其发送到标准输出。有关上述选项的详细信息,请参见附注以获取有关 dname 参数的详细信息,并参见“替代名称”了解有关此命令的 altname 参数的详细信息。
如果指定了 -T,硬件令牌将生成密钥对。
如果与 -T 一起指定了 -p,则会将 PKCS#11 令牌个人识别码存储在明确磁盘上,并具有受 root 保护的文件权限。如果未指定,用户必须在运行 in.iked(1M) 时使用 ikeadm(1M) 解除令牌的锁定。
当随 certlocal 子命令一起指定时,此选项生成一个公钥/私钥对,并将其添加到本地 ID 数据库。此外,此选项还会生成一个自签名证书,并将其安装到证书数据库。有关此命令的 dname 和 altname 参数的详细信息,请参见下面的“说明”部分。
如果指定了 -T,硬件令牌将生成密钥对,并将自签名证书存储到此硬件中。
当随 certrldb 子命令一起指定时,此选项列出本地 ID 数据库中的私钥。-v 选项将输出切换到详细模式,在此模式下将输出完整证书。
使用 -v 选项时应格外小心。请参见下面的“安全”部分。-v 选项不适用于 PKCS#11 硬件对象。
当随 certdb 子命令一起指定时,此选项列出 IKE 证书数据库中与 certspec 匹配的的证书(如果指定了任何模式)。此列表显示证书的标识字符串以及私钥(如果位于密钥数据库中)。-v 将输出切换到详细模式,在此模式下将输出完整证书。
如果匹配的证书位于硬件令牌上,则还会列出令牌 ID。
当随 certrldb 子命令一起指定时,此选项列出 IKE 数据库中的 CRL 以及位于此数据库中且与颁发机构名称匹配的所有证书。certspec 可用于指定列出特定 CRL。-v 选项将输出切换到详细模式,在此模式下将输出完整证书。有关 certspec 模式的详细信息,请参见下文的“附注”部分。
当随 certlocal 子命令一起指定时,此选项删除指定插槽中的本地 ID。如果存在对应的公钥,则不会删除此 ID。如果此插槽被视为“已损坏”或无法识别,则也会删除此 ID。
如果对 PKCS#11 硬件对象调用了此选项,则还会删除 PKCS#11 公钥和私钥对象。如果已使用 certdb -r 删除公钥对象,则不会导致问题。
从 IKE 证书数据库删除证书。会删除与指定证书模式匹配的证书。不会删除 certlocal 数据库中与这些证书对应的任何私钥。这会删除第一个匹配的标识。
如果模式指定了一个插槽,并且此插槽被视为“已损坏”或无法识别,则也会删除该插槽。
如果对 PKCS#11 硬件对象调用了此选项,则还会删除证书和 PKCS#11 公钥对象。如果已使用 certlocal -r 删除公钥对象,则不会导致问题。
当随 certrldb 子命令一起指定时,此选项删除具有给定 certspec 的 CRL。
当随 certlocal 子命令和 -T 标志一起指定时,此选项会解除 PKCS#11 私钥对象与 IKE 数据库之间的链接。系统不会尝试访问硬件 Keystore 或者验证或删除令牌上的私钥对象,而仅仅取消此对象与 IKE 数据库之间的关联。
当随 certdb 子命令和 -T 标志一起指定时,此选项会解除 PKCS#11 证书对象与 IKE 数据库之间的链接。系统不会尝试访问硬件 Keystore 或者验证或删除令牌上的证书或公钥对象,而仅仅取消这些对象与 IKE 数据库之间的关联。
当随 certlocal 子命令一起指定时,此选项从磁盘上的 Keystore 将私钥(及其相应证书)和公钥复制到其 PKCS#11 令牌指定的硬件 Keystore。此子命令尝试创建其中每个组件,即使某个组件创建失败也是如此。在所有情况下,仍会保留磁盘上的原始私钥和公共证书,因此必须单独删除它们。某些硬件 Keystore(例如,符合 FIPS-140 的设备)可能不支持以此种方式迁移私钥对象。
当随 certdb 子命令一起指定时,此选项将与给定 certspec 匹配的证书及相应公钥从磁盘上的 Keystore 复制到其 PKCS#11 令牌指定的硬件 Keystore。系统仍会保留原始公共证书,因此必须根据需要单独删除这些证书。
如果指定了 -p,则会将 PKCS#11 令牌个人识别码存储在明确磁盘上,并具有受 root 保护的文件权限。如果未指定,用户必须在运行 in.iked(1M) 时使用 ikeadm(1M) 解除令牌的锁定。
当随 certlocal 子命令一起指定时,此选项将现有令牌上的私钥对象链接到 IKE 数据库。此对象本身保留在令牌中。此选项只是让 IKE 基础结构了解对象是否存在,就像最初使用 Solaris IKE 实用程序在令牌上创建了此对象一样。
当随 certdb 子命令一起指定时,此选项将现有令牌上的证书对象链接到 IKE 数据库。此对象本身保留在令牌中。此选项只是让 IKE 基础结构了解对象是否存在,就像最初使用 Solaris IKE 实用程序在令牌上创建了此对象一样。
如果指定了 -p,则会将 PKCS#11 令牌个人识别码存储在明确磁盘上,并具有受 root 保护的文件权限。如果未指定,用户必须在运行 in.iked(1M) 时使用 ikeadm(1M) 解除令牌的锁定。
支持的参数如下:
指定与证书规范匹配的模式。有效 certspec 包括“主题名称”、“颁发机构名称”和“主题替代名称”。
上述各项可指定与给定 certspec 值匹配且不与其他 certspec 值匹配的证书。要指定不应存在于证书中的 certspec 值,请在该标记前加 !。
有效 certspec 包括:
<Subject Names> SUBJECT=<Subject Names> ISSUER=<Issuer Names> SLOT=<Slot Number in the certificate database> Example:"ISSUER=C=US, O=SUN" IP=1.2.3.4 !DNS=example.com Example:"C=US, O=CALIFORNIA" IP=5.4.2.1 DNS=example.com
替代名称的有效参数如下:
IP=<IPv4 address> DNS=<Domain Name Server address> EMAIL=<email (RFC 822) address> URI=<Uniform Resource Indicator value> DN=<LDAP Directory Name value> RID=<Registered Identifier value>
可以指定不带关键字标记的有效插槽编号。也可以发布具有关键字标记的替代名称。
证书的主体替代名称。-A 选项后的参数应采用标记=值格式。有效标记包括 IP、DNS、EMAIL、URI、DN 和 RID(请参见下面的示例)。
证书主题的 X.509 标识名。它通常具有以下格式:C=country,O=organization,OU=organizational unit,CN=common name。有效标记包括:C、O、OU 和 CN。
编码输出格式,包括 pem(表示 PEM Base64)或 ber(表示 ASN.1 BER)。如果未指定 -f,则采用 pem。
证书有效期结束时间。如果未指定 -F 标志,有效期结束时间则为自有效期开始时间起的四年后。有关有效日期和时间语法的说明,请参见“说明”部分。
密钥大小。此大小可以为 512、1024、2048、3072 或 4096。使用下面的命令可确定 Solaris 加密框架支持的密钥大小:
% cryptoadm list -vm
pkcs11_softtoken(5) 中介绍了上面的命令所显示的机制。如果您的系统具有硬件加速,该硬件支持的机制将在各提供器的单独部分中列出。机制可以是下列机制之一:
CKM_RSA_PKCS_KEY_PAIR_GEN CKM_DSA_KEY_PAIR_GEN CKM_DH_PKCS_KEY_PAIR_GEN
注 - 某些硬件仅支持某些密钥大小。例如,Sun Cryptographic Accelerator 4000 的 Keystore(当使用下面的 -T 选项时)最多仅对 RSA 支持 2048 位密钥,并对 DSA 支持 1024 位密钥。
证书有效期开始时间。如果未指定 -S 标志,则将当前日期和时间用作有效期开始时间。有关有效日期和时间语法的说明,请参见下面的“说明”部分。
密钥类型。密钥类型可以是 rsa-sha1、rsa-md5 或 dsa-sha1。
硬件密钥存储的 PKCS#11 令牌标识符。此选项指定符合 PKCS#11 标准的硬件设备实例。PKCS#11 库必须在 /etc/inet/ike/config 中指定。(请参见 ike.config(4)。)
令牌标识符是包含 32 个字符的由空格补充的字符串。如果给定令牌的长度小 32 个字符,则会使用空格自动填充此令牌。
如果系统中存在多个 PKCS#11 库,请记住一次只能在 /etc/inet/ike/config 中指定一个 PKCS#11 库。一个 PKCS#11 库实例可能对应多个令牌(每个令牌具有单独的密钥存储)。
此命令可将公钥-密钥对的私钥保存到文件中。如果恶意方通过某种方式获取了私钥,以任何途径泄露私钥都可能会导致攻击。
PKCS#11 硬件对象功能可克服磁盘上私钥的某些缺点。由于 IKE 是系统设备,因此不需要在引导时进行用户介入。但是,仍需要令牌的个人识别码。因此,PKCS#11 令牌的个人识别码存储在磁盘上的加密密钥通常所在的位置。通过使用硬件密钥存储,仍然无法拥有密钥,只有在主机面临安全风险时使用密钥才会导致问题,因此此设计决策可被接受。若不使用个人识别码,ikecert 安全性会降低为 PKCS#11 实现的安全性。因此,还应当仔细检查 PKCS#11 实现。
有关其他信息,请参见由 Matt Blaze 撰写的后文(摘自 Bruce Schneier 编著的Applied Cryptography: Protocols, Algorithms, and Source Code in C)。
示例 1 生成自签名证书
下面是自签名证书的示例:
example# ikecert certlocal -ks -m 512 -t rsa-md5 -D "C=US, O=SUN" -A IP=1.2.3.4 Generating, please wait... Certificate generated. Certificate added to database. -----BEGIN X509 CERTIFICATE----- MIIBRDCB76ADAgECAgEBMA0GCSqGSIb3DQEBBAUAMBsxCzAJBgNVBAYTAlVTMQww CgYDVQQKEwNTVU4wHhcNMDEwMzE0MDEzMDM1WhcNMDUwMzE0MDEzMDM1WjAbMQsw CQYDVQQGEwJVUzEMMAoGA1UEChMDU1VOMFowDQYJKoZIhvcNAQEBBQADSQAwRgJB APDhqpKgjgRoRUr6twTMTtSuNsReEnFoReVer!ztpXpQK6ybYlRH18JIqU/uCV/r 26R/cVXTy5qc5NbMwA40KzcCASOjIDAeMAsGA1UdDwQEAwIFoDAPBgNVHREECDAG hwQBAgMEMA0GCSqGSIb3DQEBBAUAA0EApTRD23KzN95GMvPD71hwwClukslKLVg8 f1xm9ZsHLPJLRxHFwsqqjAad4j4wwwriiUmGAHLTGB0lJMl8xsgxag== -----END X509 CERTIFICATE-----
示例 2 生成 CA 请求
生成 CA 请求的语法与生成自签名证书的基本相同。二者之间的唯一区别在于使用选项 -c 而非 -s,并且证书数据为 CA 请求。
example# ikecert certlocal -kc -m 512 -t rsa-md5 \ -D "C=US, O=SUN" -A IP=1.2.3.4
示例 3 使用硬件密钥存储的 CA 请求
下面的示例展示如何使用 -T 选项指定令牌。
example# # ikecert certlocal -kc -m 1024 -t rsa-md5 -T vca0-keystore \ -D "C=US, O=SUN" -A IP=1.2.3.4
将返回下列退出值:
成功完成。
出现错误。在标准错误中写入相应错误消息。
私钥。私钥必须在 /etc/inet/ike/publickeys/ 中具有匹配的同名公钥证书。
公钥证书。这些名称仅对匹配私钥名称至关重要。
公钥证书撤销列表。
参考此文件以获取 PKCS#11 库的路径名。
有关以下属性的说明,请参见 attributes(5):
|
ikeadm(1M)、in.iked(1M)、getdate(3C)、ike.config(4)、attributes(5)、pkcs11_softtoken(5)
由 Bruce Schneier 编著的Applied Cryptography: Protocols, Algorithms, and Source Code in C第 2 版。John Wiley & Sons 出版。纽约。1996 年。
由 RSA Labs 编著,PKCS#11 v2.11:Cryptographic Token Interface Standards,2001 年 11 月。
下面提供了使用 -F 或 -S 标志时的有效日期和时间语法。
对于相对日期,此语法如下所示:
{+,-}[Ns][Nm][Nh][Nd][Nw][NM][Ny]
其中:
表示整数
表示秒
表示分钟
表示小时
表示天
表示星期
表示月
表示年
这些参数可按任意顺序指定。例如,“+3d12h”表示从现在开始的三天半后的时间,“-3y2M”表示三年两个月以前。
所有具有固定值的参数都可以以绝对秒数的形式相加。具有可变秒数的月和年使用日历时间计算。长度不固定的月和年定义为,加一年或一个月表示下一年或下个月的同一天。例如,如果现在为 2005 年 1 月 26 日,并且证书应在从今天起的 3 年零 1 个月后过期,那么到期日期(有效期结束时间)将为 2008 年 2 月 26 日。系统会相应地处理溢出。例如,从 2005 年 1 月 31 日起一个月后的时间为 2005 年 3 月 3 日,这是因为 2 月仅包含 28 天。
对于绝对日期,接受文件 /etc/datemsk 中包含的日期格式的语法(有关详细信息,请参见 getdate(3C))。前面带有“+”或“-”的任何日期字符串均被视为相对于当前时间的时间,而其他字符串则视为绝对日期。此外,系统还会执行合理性检查,确保有效期结束日期大于有效期开始日期。例如,下面的命令将创建一个证书,使其开始日期为 1 天零 2 小时以前,结束日期为当地时间 2007 年 1 月 22 日 12:00:00。
# ikecert certlocal -ks -t rsa-sha1 -m 1024 \ -D "CN=mycert, O=Sun, C=US" \ -S -1d2h -F "01/22/2007 12:00:00"
由于 in.iked(1M) 只能在全局区域和专用 IP 区域中运行,因此该命令在共享 IP 区域中不起作用。