某些应用程序需要公钥/私钥对。在此过程中,将创建这些密钥对并存储它们。
使用以下方法之一。
基于文件的密钥是为从磁盘上的文件中直接读取密钥的应用程序而创建的。通常,直接使用 OpenSSL 加密库的应用程序要求您将应用程序的密钥和证书存储在文件中。
% pktool genkeypair keystore=file outkey=key-filename \ [format=der|pem] [keytype=rsa|dsa] [keylen=key-size]
在使用此方法之前,必须先完成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]
为密钥对指定标签。可以从密钥库中按其标签检索密钥对。
指定令牌名称。缺省情况下,令牌名称是 Sun Software PKCS#11 softtoken。
指定密钥对类型。对于椭圆曲线 (elliptic curve, ec) 类型,可选择性地指定曲线名称。曲线名称作为输出列出到 listcurves 选项。
指定密钥的长度(位)。该数字必须可以被 8 整除。
列出可用作 ec 密钥类型的 curve= 选项值的椭圆曲线名称。
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]
值 nss 指定密钥存储位置的 NSS 类型。
为密钥对指定标签。可以从密钥库中按其标签检索密钥对。
指定令牌名称。缺省情况下,令牌是 Sun Software PKCS#11 softtoken。
指定 NSS 数据库的目录路径。缺省情况下,directory 是当前目录。
指定 NSS 数据库的前缀。缺省为无前缀。
指定密钥对类型。对于椭圆曲线类型,(可选)指定曲线名称。曲线名称作为输出列出到 listcurves 选项。
指定密钥的长度(位)。该数字必须可以被 8 整除。
列出可用作 ec 密钥类型的 curve= 选项值的椭圆曲线名称。
根据密钥的存储位置,使用以下命令之一:
% pktool list keystore=file objtype=key infile=key-filename Found n keys. Key #1 - keytype:location (keylen)
$ pktool list objtype=key Enter PIN for keystore: Found n keys. Key #1 - keytype:location (keylen)
% pktool list keystore=nss dir=directory objtype=key
在以下示例中,用户首次创建 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