SSL 中的缺省链式证书配置

WebSphere® Application Server 进程首次启动时,安全套接字层 (SSL) 运行时将初始化 SSL 配置中指定的缺省密钥库和信任库。

缺省情况下,创建概要文件期间创建的链式证书的有效期为 1 年。 用于签署缺省链式证书的缺省根证书的有效期范围为 15 年。 可在创建概要文件期间定制缺省证书和根证书的有效期范围。 此类型的链式证书的一个优点是只有来自根证书的签署者才需要建立信任。 使用同一根证书重新生成链式证书时,使用该根签署者证书获取信任的客户机不会丢失他们的信任。

缺省密钥库和信任库属性

WebSphere Application Server 在创建概要文件期间创建 key.p12 缺省密钥库文件和 trust.p12 缺省信任库文件。 另外,还将在 key.p12 文件中创建缺省的链证书。 并且会从 key.p12 文件中抽取链式证书的根签署者或公用密钥并将其添加到 trust.p12 文件中。 如果在进程启动期间这些文件不存在,那么会在启动期间进行重新创建。

缺省密钥库和缺省信任库的后缀分别为 DefaultKeyStoreDefaultTrustStore,您可以凭此确定这两个文件。 另外,在 SSL 配置中,必须将 fileBased 属性设置为 true,以便运行时环境只使用缺省密钥库和缺省信任库。

[AIX Solaris HP-UX Linux Windows][IBM i]在基本应用程序服务器上,缺省密钥和信任库存储在配置库的节点目录中。 例如,将使用 AppSrv01 概要文件名称, myhostNode01Cell 名称和 myhostNode01 节点名创建缺省 key.p12trust.p12 商店。 密钥库和信任库分别位于下列目录中:
  • C:\WebSphere\AppServer\profiles\AppSrv01\config\cells\myhostNode01Cell \nodes\myhostNode01\key.p12
  • C:\WebSphere\AppServer\profiles\AppSrv01\config\cells\myhostNode01Cell \nodes\myhostNode01\trust.p12
[z/OS]在基本应用程序服务器上,缺省密钥和信任密钥库存储在配置库的节点目录中。 例如,将使用缺省概要文件名称, myhostNode01Cell 名称和 myhostNode01 节点名创建缺省 key.p12trust.p12 商店。 密钥库和信任库分别位于下列目录中:
  • ${WAS_INSTALL_ROOT}/profile/default/config/cells/myhostNode01Cell/nodes/myhostNode01/key.p12
  • ${WAS_INSTALL_ROOT}/profile/default/config/cells/myhostNode01Cell/nodes/myhostNode01/trust.p12

对于 WebSphere Application Server生成的所有缺省密钥库,缺省密码为 WebAS 。 在进行初始配置之后,您应更改缺省密码,以便获得一个更安全的环境。

缺省链证书

创建概要文件期间,系统会创建服务器的缺省链式证书以及用于签署缺省链式证书的根自签名证书。
根证书属性:
信息
type 自签名
size 2048
签名算法 SHA256withRSA
SubjectDN cn=${hostname},ou= 根证书,ou= <节点名>,ou= <单元名称>,o=IBM,c= 美国
生存期 15 年
缺省证书属性:
信息
type 链式(由根证书签署)
size 2048
签名算法 SHA256withRSA
SubjectDN cn=${hostname},ou= <节点名>,ou= <单元名称>,o=IBM,c= 美国
生存期 1 年
[8.5.5.18 或更高版本]主题备用名称 DNS SubjectDN 的 cn 值
[8.5.5.18 或更高版本]扩展密钥用法 ServerAuth_Id (1.3.6.1.5.5.7.3.1) , ClientAuth_Id (1.3.6.1.5.5.7.3.2)

您可以仅通过删除 /config/etc中的 *.p12 文件来重新创建具有不同信息的证书。 将下一个代码示例中的四个属性更改为您希望证书包含的值,然后重新启动进程。 这将使 /config 中的服务器证书有别于 /etc 中的客户机证书。

以下代码示例中的证书属性在 ssl.client.props 文件中存在,但在服务器配置中不存在。 但是,通过在管理控制台中将这些值添加为定制安全性属性,就可以在服务器配置中使用这些值。 单击安全性 > 全局安全性 > 定制属性以更改下列属性:
com.ibm.ssl.defaultCertReqAlias=default_alias
com.ibm.ssl.defaultCertReqSubjectDN=cn=${hostname},ou=myhostNode01,ou=myhostNode01Cell,o=IBM,c=US
com.ibm.ssl.defaultCertReqDays=365
com.ibm.ssl.defaultCertReqKeySize=1024
com.ibm.ssl.rootCertSubjectDN=cn=${hostname},ou=Root Certificate, ou=myhostNode01,
ou=myhostNode01Cell,o=IBM,c=US
com.ibm.ssl.rootCertValidDays=7300
com.ibm.ssl.rootCertAlias=root
com.ibm.ssl.rootCertKeySize=1024
在更改属性之后,完成下列操作:
  1. 删除 Deployment Manager 的缺省 key.p12 密钥库和 trust.p12 信任库文件,这两个文件包含缺省的链证书。 如果密钥库和信任库文件不存在,那么 WebSphere Application Server 会自动生成这些文件,并使用先前列示的属性值创建新的缺省证书。
  2. 删除根密钥库(即 root-key.p12 文件),以便重新生成包含上述属性的根证书。
  3. 重新启动 Deployment Manager、它的节点以及所有服务器。
  4. 使用根证书对每个节点进行签名。
    • 如果节点尚未进行联合,请使用 addNode 命令将每个节点联合到 Deployment Manager。 这将使用单元的根证书来重新生成节点的缺省证书。
    • 如果节点已联合完毕,请使用单元的根证书来更新每个节点的证书。 您可以使用管理控制台或 renewCertificate 命令来更新证书。 有关更多信息,请参阅有关更新证书以及 renewCertificate 命令的文档。

如果已存在 default_alias 值,那么运行时会对它追加 _#,其中数字符号 (#) 是一个逐渐递增的数字,一直递增到它在密钥库中唯一为止。 ${hostname} 是一个变量,它会被解析为最初创建该变量所在的主机名。 链式证书的缺省截止日期是从创建日期开始算起的一年之后。

运行时使用证书到期监视器来监视链式证书的到期日期。 当这些链证书进入到期阈值范围时(到期阈值通常是到期前的 30 天),这些链证书将随任何签署者证书一起被替换。 仅当 Java™ 运行时环境策略文件不受限制 (即,未导出) 时,才能将缺省密钥大小增大到超过 1024 位。 有关更多信息,请参阅 SSL 中的证书到期监视

新的基本应用程序服务器进程的缺省密钥库和信任库配置

以下样本代码显示基本应用程序服务器的缺省 SSL 配置。 突出显示了对缺省密钥库和信任库文件的引用。
<repertoire xmi:id="SSLConfig_1" alias="NodeDefaultSSLSettings" 
managementScope="ManagementScope_1">
<setting xmi:id="SecureSocketLayer_1" clientAuthentication="false" 
securityLevel="HIGH" enabledCiphers="" jsseProvider="IBMJSSE2" sslProtocol="SSL_TLS" 
keyStore="KeyStore_1" trustStore="KeyStore_2" trustManager="TrustManager_1" 
keyManager="KeyManager_1"/>
</repertoire>

缺省密钥库

在以下样本代码中,用来表示缺省密钥库的密钥库对象类似于 XML 对象。
<keyStores xmi:id="KeyStore_1" name="NodeDefaultKeyStore"
password="{xor}349dkckdd=" provider="IBMJCE" location="${WAS_INSTALL_ROOT}/config
/cells/myhostNode01Cell/nodes/myhostNode01/key.p12" type="PKCS12" fileBased="true" 
hostList="" initializeAtStartup="true" managementScope="ManagementScope_1"/>
NodeDefaultKeyStore 密钥库包含用来表示安全端点标识的个人证书。 任何密钥库引用都可以使用 ${WAS_INSTALL_ROOT} 变量,运行时会扩展该变量。 PKCS12 缺省密钥库类型采用最易于进行互操作的格式,这意味着它可以导入到大多数浏览器中。 myhostNode01Cell 密码已进行编码。 管理范围负责确定哪个服务器运行时将密钥库配置装入内存中,如以下代码样本中所示:
<managementScopes xmi:id="ManagementScope_1" scopeName="
(cell):myhostNode01Cell:(node):myhostNode01" scopeType="node"/>

对于任何存储在 security.xml 文件中并且其管理范围在当前进程范围之外的配置对象而言,它们不会被装入到当前进程中。 而是由 myhostNode01 节点中包含的服务器来装入管理范围。 任何位于特定节点上的应用程序服务器都可以查看密钥库配置。

在列示 key.p12 文件的内容以显示链式证书时,请注意,专有名称 (DN) 的公共名 (CN) 是驻留机器的主机名。 通过进行此列示,您可以按 URL 连接来验证主机名。 另外,可以从定制信任管理器中验证主机名。 有关更多信息,请参阅 信任管理器对 X.509 证书信任决策的控制

缺省密钥库的内容

以下样本代码显示密钥工具列表中缺省 key.p12 文件的内容: [AIX Solaris HP-UX Linux Windows][IBM i]
keytool -list -v -keystore c:\WebSphere\AppServer\profile\AppSrv01\profiles\config
\cells\myhostNode01Cell\nodes\myhostNode01\key.p12 -storetype PKCS12 -storepass *****
[z/OS]
${profile_root}\config\cells\${cellname}\nodes\${nodename}>  keytool -list
-v -keystore ${WAS_INSTALL_ROOT}/profile/default/config/cells/myhostNode01Cell
/nodes/myhostNode01/key.p12 -storetype PKCS12 -storepass *****
Keystore type: PKCS12
Keystore provider: IBMJCE

Your keystore contains 1 entry

Alias name: default
Creation date: Dec 31, 1969
Entry type: keyEntry
Certificate chain length: 2
Certificate[1]:
Owner: CN=myhost.austin.ibm.com, OU=myhostNode01Cell, OU=myhostNode01, O=IBM, C=US
Issuer: CN=myhost.austin.ibm.com, OU=Root Certificate, OU=myhostNode01Cell, OU=myhostNode01, O=IBM, C=US
Serial number: 4e48f29aafea6
Valid from: 2/7/08 1:03 PM until: 2/6/09 1:03 PM
Certificate fingerprints:
  MD5:  DB:FE:65:DB:40:13:F4:48:A4:CE:2F:4F:60:A5:FF:2C
  SHA1: A1:D4:DD:4B:DE:7B:45:F7:4D:AA:6A:FC:92:38:78:53:7A:99:F1:DC
Certificate[2]:
Owner: CN=myhost.austin.ibm.com, OU=Root Certificate, OU=myhostNode01Cell, OU=myhostNode01, O=IBM, C=US
Issuer: CN=myhost.austin.ibm.com, OU=Root Certificate, OU=myhostNode01Cell, OU=myhostNode01, O=IBM, C=US
Serial number: 4e48e5fd4eae3
Valid from: 2/7/08 1:03 PM until: 2/2/28 1:03 PM
Certificate fingerprints:
  MD5:  A5:9B:05:78:CF:AB:89:94:C9:2E:F1:87:34:B3:FC:75
  SHA1: 43:74:B6:C7:FA:C1:0F:19:F2:51:2B:17:60:0D:34:93:55:BF:D5:D2

*******************************************
*******************************************

缺省别名和 keyEntry 输入类型表明,专用密钥与公用密钥存储在一起,这表示完整的个人证书。 该证书由CN=myhost.austin.ibm.com, OU=myhostNode01Cell, OU=myhostNode01, O=IBM, C=US 拥有,并且由缺省根证书 (由CN=myhost.austin.ibm.com, OU=Root Certificate, OU=myhostNode01Cell, OU=myhostNode01, O=IBM, C=US 拥有) 发放。缺省情况下,该证书自创建之日起有效期为一年。

另外,在一些交换签署者的情况下,通过证书指纹可以确保发送的证书未被修改。 指纹 (证书的散列算法输出) 由 WebSphere Application Server 运行时在客户机端的自动签署者交换期间显示。 客户机端的指纹必须与服务器上显示的指纹相同。 运行时通常会使用 SHA1 散列算法来生成证书指纹。

缺省信任库

在以下样本代码中,密钥库对象表示缺省的 trust.p12 信任库。 信任库包含进行信任决策时所需的签署者证书。
<keyStores xmi:id="KeyStore_2" name="NodeDefaultTrustStore" 
password="{xor}349dkckdd=" provider="IBMJCE" location="${WAS_INSTALL_ROOT}
/config/cells/myhostNode01Cell/nodes/myhostNode01/trust.p12" type="PKCS12" 
fileBased="true" hostList="" initializeAtStartup="true" managementScope="ManagementScope_1"/>

缺省信任库的内容

以下样本代码在 keytool 列表中显示缺省 trust.p12 信任库的内容。 对于样本链式证书而言,在缺省情况下,根证书签署者包括在存储库中。 根签署者别名和 trustedCertEntry 条目类型表明此证书是公用密钥。 专用密钥未存储在此信任库中。 [AIX Solaris HP-UX Linux Windows][IBM i]
keytool -list -v -keystore c:\WebSphere\AppServer\profile\AppSrv01\profiles\config\cells\myhostNode01Cell
\nodes\myhostNode01\trust.p12 -storetype PKCS12 -storepass *****
[z/OS]
${profile_root}\config\cells\${cellname}\nodes\${nodename}>  keytool -list
-v -keystore ${WAS_INSTALL_ROOT}/profile/default/config/cells/myhostNode01Cell
/nodes/myhostNode01/trust.p12 -storetype PKCS12 -storepass ***** 
Keystore type: PKCS12
Keystore provider: IBMJCE

Your keystore contains 2 entries

Alias name: root
Creation date: Dec 31, 1969
Entry type: trustedCertEntry

Owner: CN=myhost.austin.ibm.com, OU=Root Certificate, OU=myhostNode01Cell, OU=myhostNode01, O=IBM, C=US
Issuer: CN=myhost.austin.ibm.com, OU=Root Certificate, OU=myhostNode01Cell, OU=myhostNode01, O=IBM, C=US
Serial number: 4e48e5fd4eae3
Valid from: 2/7/08 1:03 PM until: 2/2/28 1:03 PM
Certificate fingerprints:
   MD5:  A5:9B:05:78:CF:AB:89:94:C9:2E:F1:87:34:B3:FC:75
   SHA1: 43:74:B6:C7:FA:C1:0F:19:F2:51:2B:17:60:0D:34:93:55:BF:D5:D2