JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris 管理:安全服务     Oracle Solaris 11 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

第 1 部分安全性概述

1.  安全性服务(概述)

第 2 部分系统、文件和设备安全性

2.  管理计算机安全性(概述)

3.  控制对系统的访问(任务)

4.  病毒扫描服务(任务)

5.  控制对设备的访问(任务)

6.  使用基本审计报告工具(任务)

7.  控制对文件的访问(任务)

第 3 部分角色、权限配置文件和特权

8.  使用角色和特权(概述)

9.  使用基于角色的访问控制(任务)

10.  Oracle Solaris 中的安全属性(参考)

第 4 部分加密服务

11.  加密框架(概述)

12.  加密框架(任务)

13.  密钥管理框架

管理公钥技术

密钥管理框架实用程序

KMF 策略管理

KMF 插件管理

KMF 密钥库管理

使用密钥管理框架(任务)

使用密钥管理框架(任务列表)

如何使用 pktool gencert 命令创建证书

如何将证书导入密钥库

如何以 PKCS #12 格式导出证书和私钥

如何使用 pktool setpin 命令生成口令短语

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

如何使用 pktool signcsr 命令签署证书请求

如何在 KMF 中管理第三方插件

第 5 部分验证服务和安全通信

14.  网络服务验证(任务)

15.  使用 PAM

16.  使用 SASL

17.  使用 安全 Shell(任务)

18.  安全 Shell(参考)

第 6 部分Kerberos 服务

19.  Kerberos 服务介绍

20.  规划 Kerberos 服务

21.  配置 Kerberos 服务(任务)

22.  Kerberos 错误消息和故障排除

23.  管理 Kerberos 主体和策略(任务)

24.  使用 Kerberos 应用程序(任务)

25.  Kerberos 服务(参考)

第 7 部分在 Oracle Solaris 中审计

26.  审计(概述)

27.  规划审计

28.  管理审计(任务)

29.  审计(参考)

词汇表

索引

使用密钥管理框架(任务)

本节介绍如何使用 pktool 命令管理公钥对象,例如口令、口令短语、文件、密钥库、证书和 CRL。

使用密钥管理框架(任务列表)

通过密钥管理框架 (Key Management Framework, KMF) 可以集中管理公钥技术。

任务
说明
参考
创建证书。
创建供 PKCS #11、NSS 或 SSL 使用的证书。
导出证书。
创建包含证书及其支持密钥的文件。可以使用口令保护该文件。
导入证书。
从其他系统导入证书。
从其他系统导入 PKCS #12 格式的证书。
生成口令短语。
生成访问 PKCS #11 密钥库或 NSS 密钥库所用的口令短语。
生成对称密钥。
生成用于加密文件、创建文件的 MAC 和应用程序的对称密钥。
生成密钥对。
生成用于应用程序的公钥/私钥对。
生成 PKCS #10 CSR。
生成要外部证书颁发机构 (CA) 签署的 PKCS #10 证书签名请求 (certificate signing request, CSR)。
pktool(1) 手册页
签署 PKCS #10 CSR。
签署 PKCS #10 CSR。
将插件添加到 KMF 中。
安装、修改和列出插件。此外,还从 KMF 中删除插件。

如何使用 pktool gencert 命令创建证书

此过程可创建自签名证书,并将该证书存储在 PKCS #11 密钥库中。在此操作过程中,还将创建一个 RSA 公钥/私钥对。私钥与该证书一起存储在密钥库中。

  1. 生成自签名证书。
    % pktool gencert [keystore=keystore] label=label-name \
    subject=subject-DN serial=hex-serial-number
    keystore=keystore

    按公钥对象类型指定密钥库。该值可以是 nsspkcs11ssl。此关键字是可选的。

    label=label-name

    指定颁发者为证书提供的唯一名称。

    subject=subject-DN

    指定证书的标识名。

    serial=hex-serial-number

    指定十六进制格式序列号。证书的颁发者可以选择该序列号,例如 0x0102030405

  2. 验证密钥库的内容。
    % pktool list
    Found number certificates.
    1. (X.509 certificate)
          Label:  label-name
          ID: Fingerprint that binds certificate to private key
          Subject: subject-DN
          Issuer:  distinguished-name
          Serial:  hex-serial-number
    n. ...

    此命令可列出密钥库中的所有证书。在下面的示例中,密钥库只包含一个证书。

示例 13-1 使用 pktool 创建自签名证书

在下面的示例中,My Company 的用户创建了一个自签名证书,并将该证书存储在 PKCS #11 对象的密钥库中。该密钥库最初是空的。如果尚未初始化此密钥库,则软令牌的 PIN 为 changeme

% pktool gencert keystore=pkcs11 label="My Cert" \
subject="C=US, O=My Company, OU=Security Engineering Group, CN=MyCA" \
serial=0x000000001
Enter pin for Sun Software PKCS#11 softtoken:Type PIN for token
% pktool list
Found 1 certificates.
1. (X.509 certificate)
      Label: My Cert
      ID: 12:82:17:5f:80:78:eb:44:8b:98:e3:3c:11:c0:32:5e:b6:4c:ea:eb
      Subject: C=US, O=My Company, OU=Security Engineering Group, CN=MyCA
      Issuer: C=US, O=My Company, OU=Security Engineering Group, CN=MyCA
      Serial: 0x01

如何将证书导入密钥库

此过程介绍如何将包含以 PEM 或原始 DER 编码的 PKI 信息的文件导入密钥库。有关导出过程的信息,请参见示例 13-4

  1. 导入证书。
    % pktool import keystore=keystore infile=infile-name label=label-name
  2. 如果要导入私有 PKI 对象,需要在系统提示时提供口令。
    1. 在提示符下提供文件的口令。

      如果要导入的是私有 PKI 信息(例如 PKCS #12 格式的导出文件),则需要为该文件提供口令。您要导入的文件的创建者会向您提供 PKCS #12 口令。

      Enter password to use for accessing the PKCS12 file:Type PKCS #12 password
    2. 在提示符下键入密钥库的口令。
      Enter pin for Sun Software PKCS#11 softtoken: Type PIN for token
  3. 检验密钥库的内容。
    % pktool list
    Found number certificates.
    1. (X.509 certificate)
          Label:  label-name
          ID: Fingerprint that binds certificate to private key
          Subject: subject-DN
          Issuer:  distinguished-name
          Serial:  hex-serial-number
    2. ...

示例 13-2 将 PKCS #12 文件导入密钥库

在下面的示例中,用户从第三方导入了一个 PKCS #12 文件。pktool import 命令可从 gracedata.p12 文件提取私钥和证书,并将它们存储在用户的首选密钥库中。

% pktool import keystore=pkcs11 infile=gracedata.p12 label=GraceCert
Enter password to use for accessing the PKCS12 file:Type PKCS #12 password
Enter pin for Sun Software PKCS#11 softtoken: Type PIN for token
Found 1 certificate(s) and 1 key(s) in gracedata.p12
% pktool list
Found 1 certificates.
1. (X.509 certificate)
        Label: GraceCert
        ID: 12:82:17:5f:80:78:eb:44:8b:98:e3:3c:11:c0:32:5e:b6:4c:ea:eb
        Subject: C=US, O=My Company, OU=Security Engineering Group, CN=MyCA
        Issuer: C=US, O=My Company, OU=Security Engineering Group, CN=MyCA
        Serial: 0x01

示例 13-3 将 X.509 证书导入密钥库

在下面的示例中,用户将 PEM 格式的 X.509 证书导入用户的首选密钥库。此公共证书不受口令保护。用户的公共密钥库也不受口令保护。

% pktool import keystore=pkcs11 infile=somecert.pem label="TheirCompany Root Cert"
% pktool list
Found 1 certificates.
1. (X.509 certificate)
        Label: TheirCompany Root Cert
        ID: 21:ae:83:98:24:d1:1f:cb:65:5b:48:75:7d:02:47:cf:98:1f:ec:a0
        Subject: C=US, O=TheirCompany, OU=Security, CN=TheirCompany Root CA
        Issuer: C=US, O=TheirCompany, OU=Security, CN=TheirCompany Root CA
        Serial: 0x01

如何以 PKCS #12 格式导出证书和私钥

可以创建一个 PKCS #12 格式的文件,用于将私钥及其关联的 X.509 证书导出到其他系统。对该文件的访问受口令保护。

  1. 找到要导出的证书。
    % pktool list
    Found number certificates.
    1. (X.509 certificate)
          Label:  label-name
          ID: Fingerprint that binds certificate to private key
          Subject: subject-DN
          Issuer:  distinguished-name
          Serial:  hex-serial-number
    2. ...
  2. 导出密钥和证书。

    使用 pktool list 命令生成的密钥库和标签。为导出文件提供文件名。如果文件名包含空格,需要用双引号将其括起来。

    % pktool export keystore=keystore outfile=outfile-name label=label-name
  3. 使用口令保护导出文件。

    在提示符下键入密钥库的当前口令。此时,即会为导出文件创建口令。接收者在导入该文件时必须提供此口令。

    Enter pin for Sun Software PKCS#11 softtoken: Type PIN for token
    Enter password to use for accessing the PKCS12 file:Create PKCS #12 password

    提示 - 将口令与导出文件分开发送。建议的最佳做法是不通过发送数据来提供口令,例如通过打电话。


示例 13-4 以 PKCS #12 格式导出证书和私钥

在下面的示例中,用户将私钥及其关联的 X.509 证书导出到一个标准的 PKCS #12 文件中。可将此文件导入到其他密钥库中。PKCS #11 口令可保护源密钥库。PKCS #12 口令用于保护 PKCS #12 文件中的私有数据。导入该文件时需要提供此口令。

% pktool list
Found 1 certificates.
1. (X.509 certificate)
      Label: My Cert
      ID: 12:82:17:5f:80:78:eb:44:8b:98:e3:3c:11:c0:32:5e:b6:4c:ea:eb
      Subject: C=US, O=My Company, OU=Security Engineering Group, CN=MyCA
      Issuer: C=US, O=My Company, OU=Security Engineering Group, CN=MyCA
      Serial: 0x01
% pktool export keystore=pkcs11 outfile=mydata.p12 label="My Cert"
Enter pin for Sun Software PKCS#11 softtoken: Type PIN for token
Enter password to use for accessing the PKCS12 file:Create PKCS #12 password

然后,用户打电话给接收者,提供 PKCS #12 口令。

如何使用 pktool setpin 命令生成口令短语

可以为密钥库中的对象以及密钥库本身生成口令短语。访问该对象或密钥库时需要提供此口令短语。有关为密钥库中的对象生成口令短语的示例,请参见示例 13-4

  1. 生成访问密钥库所用的口令短语。
    % pktool setpin keystore=nss|pkcs11 dir=directory
  2. 应答提示。

    如果尚未为密钥库设置口令,请按回车键创建口令。

    Enter current token passphrase:Press the Return key
    Create new passphrase:Type the passphrase that you want to use
    Re-enter new passphrase:Retype the passphrase
    Passphrase changed.

    密钥库现在受口令短语保护了。如果丢失了口令短语,您将无法访问该密钥库中的对象。

示例 13-5 使用口令短语保护密钥库

下面的示例说明了如何为 NSS 数据库设置口令短语。由于尚未创建口令短语,用户需要在第一个提示处按回车键。

% pktool setpin keystore=nss dir=/var/nss
Enter current token passphrase:Press the Return key
Create new passphrase:    has8n0NdaH
Re-enter new passphrase:  has8n0NdaH
Passphrase changed.

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

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

  1. 可选如果计划使用密钥库,请创建密钥库。
  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 密钥库中。

      在使用此方法之前,必须先完成步骤 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 作为其主加密接口的服务器使用。例如,Oracle iPlanet Web Server 将 NSS 数据库用于对象存储。

      在使用此方法之前,必须先完成步骤 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. 可选检验密钥是否存在。

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

    • 检验 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

示例 13-6 使用 pktool 命令创建密钥对

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

# pktool setpin
Create new passphrase:Easily remembered, hard-to-detect password
Re-enter new passphrase:Retype password
Passphrase changed.
% cryptoadm list -vm | grep PAIR
...
CKM_DSA_KEY_PAIR_GEN         512  1024 .  .  .
CKM_RSA_PKCS_KEY_PAIR_GEN    256  4096 .  .  .
...
CKM_RSA_PKCS_KEY_PAIR_GEN    512  2048 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

Found 1 keys.
Key #1 - keypair:  specialappkeypair (2048 bits)

示例 13-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

Found 2 keys.
Key #1 - keypair:  specialappkeypair (2048 bits)
Key #2 - keypair:  eckeypair (c2tnb431r1)

如何使用 pktool signcsr 命令签署证书请求

此过程用于签署 PKCS #10 证书签名请求 (certificate signing request, CSR)。CSR 可以是 PEM 或 DER 格式。签署过程颁发 X.509 v3 证书。要生成 PKCS #10 CSR,请参见 pktool(1) 手册页。

开始之前

您是证书颁发机构 (certificate authority, CA),您已收到一个 CSR,该请求存储在文件中。

  1. pktool signcsr 命令所需的参数收集以下信息:
    signkey

    如果已将签名者的密钥存储在 PKCS #11 密钥库中,则 signkey 是检索此私钥的标签

    如果已将签名者的密钥存储在 NSS 密钥库或文件密钥库中,则 signkey 是保存此私钥的文件名。

    csr

    指定 CSR 的文件名。

    serial

    指定已签名证书的序列号。

    outcer

    指定已签名证书的文件名。

    issuer

    指定采用标识名 (distinguished name, DN) 格式的 CA 颁发者名称。

    有关 signcsr 子命令的可选参数的信息,请参见 pktool(1) 手册页。

  2. 签署请求和颁发证书。

    例如,以下命令可使用 PKCS #11 系统信息库中的签名者密钥签署证书。

    # pktool signcsr signkey=CASigningKey \
    csr=fromExampleCoCSR \
    serial=0x12345678 \
    outcert=ExampleCoCert2010 \
    issuer="O=Oracle Corporation, \ OU=Oracle Solaris Security Technology, L=Redwood City, ST=CA, C=US, \ CN=rootsign Oracle"

    以下命令使用文件中的签名者密钥签署证书。

    # pktool signcsr signkey=CASigningKey \
    csr=fromExampleCoCSR \
    serial=0x12345678 \
    outcert=ExampleCoCert2010 \
    issuer="O=Oracle Corporation, \ OU=Oracle Solaris Security Technology, L=Redwood City, ST=CA, C=US, \ CN=rootsign Oracle"
  3. 将该证书发送给请求方。

    您可以使用电子邮件、Web 站点或其他机制将该证书传送给请求方。

    例如,您可以使用电子邮件将 ExampleCoCert2010 文件发送给请求方。

如何在 KMF 中管理第三方插件

通过向插件提供密钥库名称来标识该插件。将插件添加到 KMF 中时,软件会按其密钥库名称标识它。可以定义该插件以接受选项。此过程包括如何从 KMF 中删除插件。

  1. 安装插件。
    % /usr/bin/kmfcfg install keystore=keystore-name \
    modulepath=path-to-plugin [option="option-string"]

    其中

    keystore-name-指定您提供的密钥库的唯一名称。

    path-to-plugin-指定 KMF 插件的共享库对象的完整路径。

    option-string-指定共享库对象的可选参数。

  2. 列出插件。
    % kmfcfg list plugin
    keystore-name:path-to-plugin [(built-in)] | [;option=option-string]
  3. 要删除插件,请先卸载该插件,然后检验是否已删除。
    % kmfcfg uninstall keystore=keystore-name
    % kmfcfg plugin list

示例 13-8 使用选项调用 KMF 插件

在以下示例中,管理员将 KMF 插件存储在站点专用目录中。定义该插件以接受 debug 选项。管理员添加插件,然后验证该插件是否已安装。

# /usr/bin/kmfcfg install keystore=mykmfplug \
modulepath=/lib/security/site-modules/mykmfplug.so
# kmfcfg list plugin
KMF plugin information:
-----------------------
pkcs11:kmf_pkcs11.so.1 (built-in)
file:kmf_openssl.so.1 (built-in)
nss:kmf_nss.so.1 (built-in)
mykmfplug:/lib/security/site-modules/mykmfplug.so
# kmfcfg modify plugin keystore=mykmfplug option="debug"
# kmfcfg list plugin
KMF plugin information:
-----------------------
...
mykmfplug:/lib/security/site-modules/mykmfplug.so;option=debug

该插件现在在调试模式下运行。