Solaris 开发者安全性指南

附录 F 打包和签署加密提供者

本附录介绍如何对 Solaris 加密提供者应用程序和模块进行打包。其中包含以下主题:

对加密提供者应用程序和模块打包

在 Solaris 操作系统中,应用程序软件是在称为软件包的单元中提供的。软件包是分发和安装软件产品所需的文件集合。软件包通常是在完成应用程序代码开发后由应用程序开发者设计和生成的。有关软件应用程序打包的一般信息,请参见《Application Packaging Developer’s Guide》

加密提供者打包有两个附加要求:

符合美国政府出口法

美国政府限制出口开放式加密接口(也称为有漏洞加密)。由于此限制,所有的提供者供应商都必须获得美国政府的出口批准。供应商需要向 Sun Microsystems, Inc. 申请证书,以表明符合出口法。随后,供应商即可通过电子方式签署提供者并提供包含证书的软件。

在出口审批过程中,加密的强度决定可以使用软件的国家/地区。美国政府为美国制造的加密产品定义了两种出口类别:

如果您的提供者已获非零售批准,即说明该提供者符合零售批准条件。通过禁止某些调用程序(如 IPsec)使用提供者,可以获得零售批准。在这种情况下,Sun 为受限使用和无限制使用提供了两种不同的证书。可以在证书申请过程(申请提供者签署证书)中指明这种情况。此外,还必须生成和签署特殊的激活文件,并将其与提供者一同提供。请参见生成要零售出口的激活文件

对用户级提供者应用程序打包

用户级加密提供者应用程序的第三方开发者需要完成以下过程:

  1. 从 Sun Microsystems, Inc 获取证书。然后签署库。请参见向提供者中添加签名

  2. 随软件包一起提供证书。证书必须置于 /etc/crypto/certs 目录中。

  3. pkcs11conf 类添加到 pkginfo 文件的 CLASSES 字符串中。应该添加以下行:

    CLASS=none pkcs11conf
  4. etc/crypto 目录中创建输入文件 pkcs11.conf

    用户级提供者的输入文件名为 pkcs11.conf。此文件指定提供者的路径。pkcs11.conf 对该项使用以下语法:

    filename
    

    该项为文件的绝对路径,如 /opt/lib/$ISA/myProviderApp.so。运行 pkgadd 时会将此文件添加到配置文件中。请注意路径名中的 $ISA 表达式。根据需要,$ISA 指向应用程序的 32 位版本或 64 位版本。

  5. 将以下行添加到软件包的原型文件中:

    e pkcs11conf etc/crypto/pkcs11conf 0644 root sys

对内核级提供者模块打包

内核级加密提供者模块的第三方开发者可以完成以下过程:

  1. 从 Sun Microsystems, Inc 获取证书。然后,签署内核软件模块或设备驱动程序。请参见向提供者中添加签名

  2. 随软件包一起提供证书。证书应该置于 /etc/crypto/certs 目录中。

  3. kcfconf 类添加到 pkginfo 文件的 CLASSES 字符串中。 应该添加以下行:

    CLASS=none kcfconf
  4. /etc/crypto 目录中创建输入文件 kcf.conf。此文件用于将软件和硬件插件添加到内核配置文件中。

    • 如果提供者是具有加密机制的内核软件模块,请对该项使用以下语法:

      provider-name:supportedlist=mech1,mech2,...
      provider-name

      内核软件模块的基本名称

      mech*

      列表中的加密机制的名称

      以下项是内核软件模块的示例:

      des:supportedlist=CKM_DES_CBC,CKM_DES_ECB,CKM_DES_CFB
    • 如果提供者是加密机制(如加速器卡)的设备驱动程序,则对该项使用以下语法:

      driver_names=devicedriver1,devicedriver2,...
      devicedriver*

      加密设备的设备驱动程序名称。

      以下项是设备驱动程序的示例:

      driver_names=dca

向提供者中添加签名

本节介绍如何向提供者中添加数字签名,以使提供者可以在框架内工作。本节还介绍如何验证是否已正确签署了提供者。提供者可以为以下对象之一:PKCS #11 库、执行算法的可装入内核模块或硬件加速器的设备驱动程序。

Procedure申请提供者签署证书

通常,提供者的开发者需要申请证书。不过,作为站点安全策略的一部分,将指派系统管理员处理此申请。

  1. 请使用 elfsign request 命令向 Sun 申请证书。

    该命令在生成证书申请的同时会生成一个私钥。


    % elfsign request -k private-keyfile -r certificate-request
    
    private-keyfile

    指向私钥位置的路径。随后,系统管理员针对 Solaris 加密框架签署提供者时需要此密钥。该目录应该是安全的。请使用与包含 Sun 证书的目录不同的目录。

    certificate-request

    证书申请的路径。

    以下示例说明如何将典型申请提交给 Sun:


    % elfsign request \
    
    -k /securecrypt/private/MyCompany.private.key \
    
    -r /reqcrypt/MyCompany.certrequest
    
    
    
    Enter Company Name / Stock Symbol or some other globally unique identifier.
    
    This will be the prefix of the Certificate DN:MYCORP
    
    
    
    The government of the United States of America restricts the export of 
    
    "open cryptographic interfaces", also known as "crypto-with-a-hole".
    
    Due to this restriction, all providers for the Solaris cryptographic
    
    framework must be signed, regardless of the country of origin.
    
    
    
    The terms "retail" and "non-retail" refer to export classifications 
    
    for products manufactured in the USA.  These terms define the portion of the
    
    world where the product may be shipped.  Roughly speaking, "retail" is 
    
    worldwide (minus certain excluded nations) and "non-retail" is domestic 
    
    only (plus some highly favored nations).  If your provider is subject to
    
    USA export control, then you must obtain an export approval (classification)
    
    from the government of the USA before exporting your provider.  It is
    
    critical that you specify the obtained (or expected, when used during 
    
    development) classification to the following questions so that your provider
    
    will be appropriately signed.
    
    
    
    Do you have retail export approval for use without restrictions based
    
    on the caller (for example, IPsec)? [Yes/No] N
    
    
    
    If you have non-retail export approval for unrestricted use of your
    
    provider by callers, are you also planning to receive retail approval
    
    restricting which export sensitive callers (for example, IPsec) may
    
    use your provider? [Y/N] Y
    

    私钥置于指定的文件名(例如 /etc/crypto/private/MyCompany.private.key 文件)中。证书申请也置于指定的文件名(例如 /reqcrypt/MyCompany.certrequest 文件)中。

  2. 将证书申请提交给 Sun。

    将证书申请发送到以下电子邮件地址: solaris-crypto-req@sun.com

    Sun 将根据证书申请文件生成证书。然后将证书的副本发送回来。

  3. 将从 Sun 收到的证书存储在 /etc/crypto/certs 目录中。

    为了安全起见,应该将私钥和证书申请存储在另外的目录中。

Procedure签署提供者

通常,提供者的开发者需要签署提供者。不过,作为站点安全策略的一部分,将指派系统管理员签署此开发者的二进制文件。

    签署提供者。使用 elfsign sign 命令、Sun 颁发的证书,以及用于从 Sun 申请证书的私钥。


    % elfsign sign -k private-keyfile -c Sun-certificate -e provider-object
    
    -k

    包含用于生成证书申请(已发送给 Sun)的私钥的文件。

    -c

    Sun 根据证书申请所颁发的证书的路径。

    -e

    指向待签名的、将在 Solaris 加密框架中使用的提供者或二进制文件的路径。

    以下示例说明如何签署提供者。


    % elfsign sign \
    
    -k /securecrypt/private/MyCompany.private.key \
    
    -c /etc/crypto/certs/MyCompany
    
    -e /path/to/provider.object
    

    请注意,使用 elfsign sign 会更改指定位置中的对象。如果需要该对象的未签名版本,则在应用 elfsign sign 之前应该将该对象复制到其他位置。

Procedure验证是否已签署提供者

  1. 收集 Sun 颁发的证书和已签名提供者的路径。

  2. 验证是否使用 elfsign verify 命令正确签署了提供者。

    以下示例说明假设证书位于缺省目录 /etc/crypto/certs/MyCompany 中时进行的验证。


    % elfsign verify \
    
    -e /path/to/MyProvider.so.1
    
    elfsign: verification of /path/to/MyProvider.so.1 passed

    以下示例说明如何将证书存储在非缺省目录中。


    % elfsign verify \
    
    -c /path/to/MyCerts  \
    
    -e /path/to/MyProvider.so.1
    
    elfsign: verification of /path/to/MyProvider.so.1 passed

    以下示例说明如何验证使用受限制的证书签署的提供者。


    % elfsign verify \
    
    -e /path/to/MyRestrictedProvider.so.1
    
    elfsign: verification of /path/to/MyRestrictedProvider.so.1 passed, \
    but restricted.

Procedure生成要零售出口的激活文件

在针对国内使用和受限制的国际使用提供同一提供者时,此过程非常有用。可以使用对所有消费方都有使用限制的证书密钥来签署提供者。对于使用提供者时不受基于调用程序限制的那些消费方而言,可以生成和包括允许与 IPsec 一同使用的特殊激活文件。激活文件应该与提供者位于相同的目录中。激活文件的命名约定是将驱动程序名称与扩展名 .esa 组合起来,例如 /kernel/drv/vca.esa

    签署提供者。使用 elfsign sign 命令、Sun 颁发的证书,以及用于从 Sun 申请证书的私钥。


    % elfsign sign -a -k private-keyfile -c Sun-certificate -e provider-object
    
    -a

    生成已签署的 ELF 签名激活 (.esa) 文件。当加密提供者需要非零售出口批准和零售批准时,可以使用此选项。通过限制与出口有关的调用程序(如 IPsec),可以获得零售批准。此选项假设以前已使用受限制的证书签署了提供者二进制文件。

    -k

    包含用于生成证书申请(已发送给 Sun Microsystems, Inc)的私钥的文件。

    -c

    Sun 根据证书申请所颁发的证书的路径。

    -e

    指向待签名的、将在 Solaris 加密框架中使用的提供者或二进制文件的路径。

    以下示例说明如何签署提供者。


    % elfsign sign \
    
    -a \
    
    -k /securecrypt/private/MyCompany.private.key \
    
    -c /etc/crypto/certs/MyCompany
    
    -e /path/to/provider.object