Sun Java System Application Server Enterprise Edition 8.2 管理指南

使用证书和 SSL

关于证书文件

安装 Application Server 时将生成一个适用于内部测试的 JSSE(Java Secure Socket Extension,Java 安全套接口扩展)或 NSS(Network Security Service,网络安全服务)格式的数字证书。默认情况下,Application Server 将其证书信息存储在 domain-dir/config 目录下的证书数据库中:

更改证书文件的位置

为开发提供的密钥库和信任库文件存储在 domain-dir/config 目录中。

使用管理控制台依次展开 server-config 节点 >“JVM 设置”>“JVM 选项”选项卡,可以添加或修改证书文件新位置的值字段。


-Dcom.sun.appserv.nss.db=${com.sun.aas.instanceRoot}/NSS-database-directory

其中,NSS-database-directory 是 NSS 数据库的位置。

使用 Java 安全套接口扩展 (Java Secure Socket Extension, JSSE) 工具

使用 keytool 可以设置和使用 JSSE(Java Secure Socket Extension,Java 安全套接口扩展)数字证书。在 Platform Edition 和 Enterprise Edition 中,客户机端(应用程序客户机端或独立客户机端)均使用 JSSE 格式。

J2SE SDK 附带了 keytool,管理员可以使用它来管理公钥/私钥对和关联证书。还允许用户高速缓存正与其通信的另一方的公钥(以证书形式)。

要运行 keytool,必须先配置 shell 环境以使 J2SE /bin 目录位于路径中;或者必须在命令行中提供此工具的完整路径。有关 keytool 的更多信息,请参见 http://java.sun.com/j2se/1.5.0/docs/tooldocs/solaris/keytool.html 上的 keytool 文档。

使用 keytool 实用程序

以下示例说明了使用 JSSE 工具处理证书的相关用法:

使用 keytool 实用程序生成证书

使用 keytool 可以生成、导入和导出证书。默认情况下,keytool 将在其运行所在的目录中创建一个密钥库文件。

  1. 转至要运行证书的目录。

    始终在包含密钥库和信任库文件的目录中生成证书,默认目录为 domain-dir/config。有关更改这些文件位置的信息,请参见更改证书文件的位置

  2. 输入以下 keytool 命令以在密钥库文件 keystore.jks 中生成证书:


    keytool -genkey -alias keyAlias-keyalg RSA
     -keypass changeit
     -storepass changeit
    -keystore keystore.jks

    使用任一唯一的名称作为您的 keyAlias。如果您已更改密钥库或私钥密码的默认值,请将以上命令中的 changeit 替换为新密码。

    将显示一个要求您输入姓名、组织和其他信息的提示,keytool 将使用这些信息来生成证书。

  3. 输入以下 keytool 命令以将生成的证书导出到文件 server.cer(或 client.cer,如果您愿意):


    keytool -export -alias keyAlias-storepass changeit
     -file server.cer
     -keystore keystore.jks
  4. 如果要求证书授权机构签名的证书,请参见使用 keytool 实用程序为数字证书签名

  5. 要创建信任库文件 cacerts.jks 并将证书添加到信任库中,请输入以下 keytool 命令:


    keytool -import -v -trustcacerts
    -alias keyAlias
     -file server.cer
    -keystore cacerts.jks
     -keypass changeit
  6. 如果您已更改密钥库或私钥密码的默认值,请将以上命令中的 changeit 替换为新密码。

    工具将显示有关证书的信息并提示您是否要信任该证书。

  7. 键入 yes,然后按 Enter 键。

    然后,keytool 将显示与下面类似的信息:


    Certificate was added to keystore
    [Saving cacerts.jks]
  8. 重新启动 Application Server。

使用 keytool 实用程序为数字证书签名

创建数字证书之后,拥有者必须为其签名以防止伪造。电子商务站点或身份验证对其很重要的那些站点可以从知名的证书授权机构 (CA) 购买证书。如果无需考虑验证,例如当专用安全通信可以满足全部需求时,则可节省获取 CA 证书所花费的时间和费用并使用自签名证书。

  1. 按照 CA Web 站点上的说明进行操作来生成证书密钥对。

  2. 下载生成的证书密钥对。

    将证书保存在包含密钥库和信任库文件的目录中,默认目录为 domain-dir/config。请参见更改证书文件的位置

  3. 在 shell 中,转至包含证书的目录。

  4. 使用 keytool 将证书导入到本地密钥库和本地信任库(如有必要)。


    keytool -import -v -trustcacerts
    -alias keyAlias
     -file server.cer
    -keystore cacerts.jks
     -keypass changeit
    -storepass changeit

    如果密钥库或私钥密码不是默认密码,请将以上命令中的 changeit 替换为新密码。

  5. 重新启动 Application Server。

使用 keytool 实用程序删除证书

要删除现有证书,请使用 keytool -delete 命令,例如:

keytool -delete
 -alias keyAlias
 -keystore keystore-name
 -storepass password

使用网络安全服务 (NSS) 工具

在 Enterprise Edition 中,在服务器端使用网络安全服务 (Network Security Service, NSS) 数字证书可以管理存储私钥和证书的数据库。对于客户机端(应用程序客户机端或独立客户机端),均使用使用 Java 安全套接口扩展 (Java Secure Socket Extension, JSSE) 工具中介绍的 JSSE 格式。

通过网络安全服务 (NSS) 管理安全性的工具包括:

这些工具位于 install-dir/lib/ 目录中。下面的环境变量用于指出 NSS 安全性工具的位置:

在示例中,证书通用名 (Common Name, CN) 是客户机或服务器的名称。在 SSL 握手时也会使用 CN,以比较证书名称和生成证书名的主机名。如果证书名称与主机名不匹配,在 SSL 握手时会产生警告或异常。在某些示例中,使用证书通用名 CN=localhost 是为了方便起见,这样所有用户都可以使用该证书,而不必用他们自己的真实主机名创建一个新证书。

以下各节中的示例说明使用 NSS 工具处理证书的相关用法:

使用 certutil 实用程序

在运行 certutil 之前,请确保 LD_LIBRARY_PATH 指向运行此实用程序所需的库的位置。此位置可以通过 asenv.conf(产品范围的配置文件)中 AS_NSS_LIB 的值来标识。

证书数据库工具 certutil 是一个 NSS 命令行实用程序,可以创建和修改 Netscape Communicator cert8.dbkey3.db 数据库文件。还可以列出、生成、修改或删除 cert8.db 文件中的证书,以及创建或更改密码、生成新的公钥和私钥对、显示密钥数据库的内容或删除 key3.db 文件中的密钥对。

密钥和证书管理进程通常以在密钥数据库中创建密钥开始,然后在证书数据库中生成和管理证书。位于以下网址的文档说明了使用 NSS(包括 certutil 实用程序的语法)管理证书和密钥数据库:http://www.mozilla.org/projects/security/pki/nss/tools/certutil.html

下表中的每一项都给出了一个使用 NSS 和 JSSE 安全性工具来创建和/或管理证书的示例。

使用 pk12util 实用程序导入和导出证书

pk12util 是一个命令行实用程序,用于以 PKCS12 格式在证书/密钥数据库和文件之间导入和导出密钥和证书。PKCS12 是公钥加密标准 (Public-Key Cryptography Standards, PKCS) #12 个人信息交换语法标准。有关 pk12util 实用程序的更多说明,请参见 http://www.mozilla.org/projects/security/pki/nss/tools/pk12util.html

使用 modutil 添加和删除 PKCS11 模块

安全性模块数据库工具 modutil 是一个命令行实用程序,用于管理 secmod.db 文件中或硬件令牌中的 PKCS #11(Cryptographic Token Interface Standard,加密令牌接口标准)模块信息。您可以使用此工具添加和删除 PKCS #11 模块、更改密码、设置默认值、列出模块内容、启用或禁用插槽、启用或禁用 FIPS-140-1 兼容性以及指定加密操作的默认提供者。此工具还可以创建 key3.dbcert7.dbsecmod.db 安全性数据库文件。有关此工具的更多信息,请参见 http://www.mozilla.org/projects/security/pki/nss/tools/modutil.html

对 Application Server 使用硬件加密加速器

您可以使用硬件加速器令牌来提高加密性能并提供安全密钥存储功能。此外,还可以通过智能卡为最终用户提供移动安全密钥存储。

当 Sun Java System Application Server 8.1 和 8.2 Standard Edition 或 Enterprise Edition 在 Java 2 Platform, Standard Edition(J2SE 平台)5.0 上运行时,支持针对 SSL 或 TLS 通信使用 PKCS#11 令牌,以及使用网络安全服务 (Network Security Service, NSS) 工具来管理密钥和 PKCS#11 令牌。本节介绍 Application Server 如何提供此支持,并指导您完成相关配置的过程。

J2SE 5.0 PKCS#11 提供者可以轻松与 Application Server 运行时集成。通过这些提供者,您可以使用硬件加速器以及 Application Server 中的其他 PKCS#11 令牌来提高性能,并保护 SSL 或 TLS 通信中固有的私钥。

本节包括以下主题:

关于配置硬件加密加速器

Sun Java System Application Server 8.1 和 8.2 Standard Edition 或 Enterprise Edition 已针对 Sun Crypto Accelerator 1000 (SCA-1000) 和 SCA-4000 进行了测试。

Application Server 与 J2SE 5.0 结合使用时,可以与 PKCS#11 令牌进行通信。Application Server 附带有 NSS PKCS#11 令牌库(对于 NSS 内部 PKCS#11 模块,通常称为 NSS 软令牌)和 NSS 命令行管理工具。有关更多详细信息,请参见使用网络安全服务 (NSS) 工具

使用 NSS 工具可以在 PKCS#11 令牌中创建密钥和证书,使用 J2SE PKCS#11 提供者可以在运行时访问令牌密钥和证书。PKCS#11 提供者是用作本地 PKCS#11 库包装器的加密服务提供者。PKCS#11 令牌通常是指所有具有本地 PKCS#11 接口的硬件令牌和软件令牌。硬件令牌是指以物理设备(例如硬件加速器及智能卡)实现的 PKCS#11 令牌。软件令牌是指完全以软件实现的 PKCS#11 令牌。


注 –

如果在 J2SE 1.4.x 平台上运行 Application Server,则仅支持一种 PKCS#11 令牌,即 NSS 软令牌。


对于 Microsoft Windows 环境,将 NSS 库的位置 AS_NSS 以及 NSS 工具目录 AS_NSS_BIN 添加到 PATH 环境变量中。为简单起见,本节中所述的过程仅使用 UNIX 命令。您应在适当的情况下将 UNIX 变量替换为 Windows 变量。

配置硬件加密加速器包括两个主要过程:

配置 PKCS#11 令牌

本节介绍如何使用 NSS 安全性工具 modutil 来配置 PKCS#11 令牌。可以使用以下过程配置 PKCS#11 令牌。

输入以下命令(在一行中输入全部内容):

modutil -dbdir AS_NSS_DB -nocertdb -force -add moduleName -libfile
 absolute_path_of_pkcs11_library -mechanisms list_of_security_mechanisms

其中,AS_NSS_DB 是 NSS 数据库目录(如同使用域管理服务器 (Domain Administration Server, DAS) 时的 AS_DOMAIN_CONFIG

例如,要配置硬件加速器令牌,请输入以下命令(在一行中输入全部内容):

modutil -dbdir AS_NSS_DB -nocertdb -force -add "Sun Crypto Accelerator" -libfile
 /opt/SUNWconn/crypto/lib/libpkcs11.so -mechanisms RSA:DSA:RC4:DES

在本例中,硬件加速器为 SCA–1000 加密加速器。默认情况下,相应的 PKCS#11 库位于 /opt/SUNWconn/crypto/lib/libpkcs11.so 中。

mechanisms 必须是可用于令牌中的加密机制的完整列表。要仅使用少数可用的加密机制,请参见配置 J2SE 5.0 PKCS#11 提供者。有关所有支持的机制的列表,请参见 NSS Security Tools 站点 http://www.mozilla.org/projects/security/pki/nss/tools 上的 modutil 文档。

下面的示例假设在安装令牌时指定的令牌名称为 mytoken

要检验硬件加速器配置是否正确,请输入以下命令:

modutil -list -dbdir AS_NSS_DB

标准输出类似于以下内容:


Using database directory /var/opt/SUNWappserver/domains/domain1/config ...

Listing of PKCS#11 Modules
-----------------------------------------------------------
  1. NSS Internal PKCS#11 Module
         slots: 2 slots attached
        status: loaded

         slot: NSS Internal Cryptographic Services                            
        token: NSS Generic Crypto Services

         slot: NSS User Private Key and Certificate Services                  
        token: NSS Certificate DB

  2. Sun Crypto Accelerator
        library name: /opt/SUNWconn/crypto/lib/libpkcs11.so
         slots: 1 slot attached
        status: loaded

         slot: Sun Crypto Accelerator:mytoken
        token: mytoken
-----------------------------------------------------------

 

管理密钥和证书

本节介绍几个使用 certutilpk12util 创建和管理密钥和证书的常用过程。有关certutilpk12util 的详细信息,请参见使用网络安全服务 (NSS) 工具以及 NSS Security Tools 站点 http://www.mozilla.org/projects/security/pki/nss/tools 上的文档。


注 –

通过在 java.security 属性文件(位于 Java 运行时的 JAVA_HOME/jre/lib/security 目录中)中配置 PKCS#11 提供者,您还可以使用 J2SE keytool 实用程序来管理密钥和证书。有关使用 keytool 的详细信息,请参见位于 http://java.sun.com/j2se/1.5.0/docs/guide/secuirty/p11guide.html 的《Java PKCS#11 Reference Guide》。


本节包括以下数个主题:

列出密钥和证书

使用私钥和证书

可以使用 certutil 创建自签名证书以及导入或导出证书。要导入或导出私钥,请使用 pk12util 实用程序。有关更多详细信息,请参见使用网络安全服务 (NSS) 工具


注意 – 注意 –

在 Application Server 中,请勿直接使用 NSS 工具 certutilmodutil 修改 NSS 密码。如果这样做,Application Server 中的安全性数据可能会被破坏。


配置 J2SE 5.0 PKCS#11 提供者

Application Server 依靠 J2SE PKCS#11 提供者在运行时访问位于 PKCS#11 令牌中的密钥和证书。默认情况下,Application Server 将针对 NSS 软令牌来配置 J2SE PKCS#11 提供者。本节介绍如何覆盖 J2SE PKCS#11 提供者的默认配置。

在 Application Server 中,将针对每个 PKCS#11 令牌生成以下默认 PKCS#11 配置参数。

这些配置符合《Java PKCS#11 Reference Guide》中所述的语法。


注 –

除了必须唯一之外,对名称参数没有任何要求。某些早期版本的 J2SE 5.0 仅支持字母数字字符。


您可以通过创建自定义配置文件来覆盖默认配置参数。例如,可以在 SCA–1000 中明确禁用 RSA 加密器和 RSA 密钥对生成器。有关禁用 RSA 加密器和 RSA 密钥对生成器的详细信息,请参见 http://www.mozilla.org/projects/security/pki/nss/tools

要创建自定义配置文件,请执行以下操作:

  1. 使用以下代码创建名为 install-dir/mypkcs11.cfg 的配置文件并保存此文件。


    name=HW1000
    library=/opt/SUNWconn/crypto/lib/libpkcs11.so
    slotListIndex=0
    disabledMechanisms = {
    	CKM_RSA_PKCS
    	CKM_RSA_PKCS_KEY_PAIR_GEN
    }
    omitInitialize=true
  2. 如果有必要,请更新 NSS 数据库。在这种情况下,更新 NSS 数据库以便它禁用 RSA。

    运行以下命令:


    modutil -undefault "Sun Crypto Accelerator" -dbdir AS_NSS_DB -mechanisms RSA

    mechanisms 列表中的算法名称与默认配置中的算法名称不同。有关 NSS 中有效 mechanisms 的列表,请参见 NSS 安全性工具站点 http://www.mozilla.org/projects/security/pki/nss/tools 上的 modutil 文档。

  3. 通过在适当位置添加属性使用该更改来更新服务器,如下所示:


    <property name="mytoken" value="&InstallDir;/mypkcs11.cfg"/>

    此属性的位置可以为以下位置之一:

    • 如果提供者用于 DAS 或服务器实例,请在相关的 <security-service> 下添加此属性。

    • 如果提供者用于节点代理,请在 domain.xml 文件中相关的 <node-agent> 元素下添加此属性。

  4. 重新启动 Application Server。

    自定义配置将在重新启动后生效。