在 Oracle® Solaris 11.2 中管理加密和证书

退出打印视图

更新时间: 2014 年 9 月
 
 

如何使用 pktool genkeypair 命令生成密钥对

某些应用程序需要公钥/私钥对。在此过程中,将创建这些密钥对并存储它们。

  1. (u53ef选) 如果计划使用密钥库,请创建密钥库。
  2. 创建密钥对。

    使用以下方法之一。

    • 创建密钥对,然后将该密钥对存储在文件中。

      基于文件的密钥是为从磁盘上的文件中直接读取密钥的应用程序而创建的。通常,直接使用 OpenSSL 加密库的应用程序要求您将应用程序的密钥和证书存储在文件中。


      注 -  file 密钥库不支持椭圆曲线 (elliptic curve, ec) 密钥和证书。
      % pktool genkeypair keystore=file outkey=key-filename \
      [format=der|pem] [keytype=rsa|dsa] [keylen=key-size]
      keystore=file

      file 指定密钥存储位置的文件类型。

      outkey=key-filename

      指定存储密钥对的文件的名称。

      format=der|pem

      指定密钥对的编码格式。der 输出是二进制的,pem 输出为 ASCII。

      keytype=rsa|dsa

      指定可存储在 file 密钥库中的密钥对的类型。有关定义,请参见 DSARSA

      keylen=key-size

      指定密钥的长度(位)。该数字必须可以被 8 整除。要确定可能的密钥大小,请使用 cryptoadm list -vm 命令。

    • 创建密钥对并将其存储在 PKCS #11 密钥库中。

      在使用此方法之前,必须先完成Step 1

      PKCS #11 密钥库用于将对象存储在硬件设备上。该设备可以是插入到加密框架的 Sun Crypto Accelerator 6000 卡、受信任的平台模块 (trusted platform module, TPM) 设备或智能卡。PKCS #11 还可以用于将对象存储在 softtoken,或基于软件的令牌中,从而将这些对象存储在磁盘上的专用子目录中。有关更多信息,请参见 pkcs11_softtoken (5) 手册页。

      可以从密钥库中按指定的标签检索密钥对。

      % pktool genkeypair label=key-label \
      [token=token[:manuf[:serial]]] \
      [keytype=rsa|dsa|ec]  [curve=ECC-Curve-Name]]\
      [keylen=key-size] [listcurves]
      label=key-label

      为密钥对指定标签。可以从密钥库中按其标签检索密钥对。

      token=token[:manuf[:serial]]

      指定令牌名称。缺省情况下,令牌名称是 Sun Software PKCS#11 softtoken

      keytype=rsa|dsa|ec [curve=ECC-Curve-Name]

      指定密钥对类型。对于椭圆曲线 (elliptic curve, ec) 类型,可选择性地指定曲线名称。曲线名称作为输出列出到 listcurves 选项。

      keylen=key-size

      指定密钥的长度(位)。该数字必须可以被 8 整除。

      listcurves

      列出可用作 ec 密钥类型的 curve= 选项值的椭圆曲线名称。

    • 生成密钥对并将其存储在 NSS 密钥库中。

      NSS 密钥库由依赖 NSS 作为其主加密接口的服务器使用。

      在使用此方法之前,必须先完成Step 1

      % pktool keystore=nss genkeypair label=key-nickname \
      [token=token[:manuf[:serial]]] \
      [dir=directory-path] [prefix=database-prefix] \
      [keytype=rsa|dsa|ec] [curve=ECC-Curve-Name]] \
      [keylen=key-size] [listcurves]
      keystore=nss

      nss 指定密钥存储位置的 NSS 类型。

      label=nickname

      为密钥对指定标签。可以从密钥库中按其标签检索密钥对。

      token=token[:manuf[:serial]]

      指定令牌名称。缺省情况下,令牌是 Sun Software PKCS#11 softtoken

      dir=directory

      指定 NSS 数据库的目录路径。缺省情况下,directory 是当前目录。

      prefix=database-prefix

      指定 NSS 数据库的前缀。缺省为无前缀。

      keytype=rsa|dsa|ec [curve=ECC-Curve-Name]

      指定密钥对类型。对于椭圆曲线类型,(可选)指定曲线名称。曲线名称作为输出列出到 listcurves 选项。

      keylen=key-size

      指定密钥的长度(位)。该数字必须可以被 8 整除。

      listcurves

      列出可用作 ec 密钥类型的 curve= 选项值的椭圆曲线名称。

  3. (u53ef选) 检验密钥是否存在。

    根据密钥的存储位置,使用以下命令之一:

    • 检验 key-filename 文件中的密钥。
      % pktool list keystore=file objtype=key infile=key-filename
      Found n keys.
      Key #1 - keytype:location (keylen)
    • 检验 PKCS #11 密钥库中的密钥。
      $ pktool list objtype=key
      Enter PIN for keystore:
      Found n keys.
      Key #1 - keytype:location (keylen)
    • 检验 NSS 密钥库中的密钥。
      % pktool list keystore=nss dir=directory objtype=key
示例 4-6  使用 pktool 命令创建密钥对

在以下示例中,用户首次创建 PKCS #11 密钥库。确定 RSA 密钥对的密钥大小后,用户生成应用程序的密钥对。最后,用户验证该密钥对是否在密钥库中。用户注意到 RSA 密钥对的第二个实例可以存储在硬件上。由于用户未指定 token 参数,因此该密钥对存储为 Sun Software PKCS#11 softtoken

# pktool setpin
Create new passphrase:
Re-enter new passphrase:Retype password
Passphrase changed.
% cryptoadm list -vm | grep PAIR
...
CKM_DSA_KEY_PAIR_GEN       512  3072 .  .  .  .  .  .  .  .  .  X  .  .  .  .
CKM_RSA_PKCS_KEY_PAIR_GEN  256  8192 .  .  .  .  .  .  .  .  .  X  .  .  .  .
...
CKM_RSA_PKCS_KEY_PAIR_GEN  256  2048 X  .  .  .  .  .  .  .  .  X  .  .  .  .
ecc: CKM_EC_KEY_PAIR_GEN,CKM_ECDH1_DERIVE,CKM_ECDSA,CKM_ECDSA_SHA1
% pktool genkeypair label=specialappkeypair keytype=rsa keylen=2048
Enter PIN for Sun Software PKCS#11 softtoken  :Type password

% pktool list
Enter PIN for Sun Software PKCS#11 softtoken  :Type password
No.      Key Type      Key Len.      Key Label
----------------------------------------------------
Asymmetric public keys:
1        RSA                         specialappkeypair
示例 4-7  创建使用椭圆曲线算法的密钥对

在以下示例中,用户将椭圆曲线 (elliptic curve, ec) 密钥对添加到密钥库中,指定曲线名称并验证该密钥对是否在密钥库中。

% pktool genkeypair listcurves
secp112r1, secp112r2, secp128r1, secp128r2, secp160k1
.
.
.
c2pnb304w1, c2tnb359v1, c2pnb368w1, c2tnb431r1, prime192v2
prime192v3
% pktool genkeypair label=eckeypair keytype=ec curves=c2tnb431r1
% pktool list
Enter PIN for Sun Software PKCS#11 softtoken  :Type password
No.  Key Type  Key Len.  Key Label
----------------------------------------------------
Asymmetric public keys:
1    ECDSA               eckeypair