信任管理器对 X.509 证书信任决策的控制
可以使用信任管理器来验证由同代发送的安全套接字层 (SSL) 证书,此过程包括验证签名和检查证书的截止日期。Java™ 安全套接字扩展 (JSSE) 信任管理器在 SSL 握手期间确定远程同级是否可信。
WebSphere® Application Server 能够在 SSL 连接期间调用多个信任管理器。缺省信任管理器执行标准证书验证;定制信任管理器插件则运行定制的验证(例如,主机名验证)。有关更多信息,请参阅示例:开发定制信任管理器以便制定定制 SSL 信任决策
在服务器端 SSL 配置中配置了信任管理器时,服务器将调用 isClientTrusted 方法。在客户机端 SSL 配置中配置了信任管理器时,客户机将调用 isServerTrusted 方法。并且会将同代证书链传递给这些方法。如果信任管理器选择不信任同代信息,那么可能会产生异常以强制使握手失败。
(可选)WebSphere Application Server 提供了 com.ibm.wsspi.ssl.TrustManagerExtendedInfo 接口,以便可以将其他信息传递给信任管理器。有关更多信息,请参阅 com.ibm.wsspi.ssl.TrustManagerExtendedInfo 接口。
缺省 IbmX509 信任管理器
<trustManagers xmi:id="TrustManager_1132357815717" name="IbmX509" provider="IBMJSSE2"
algorithm="IbmX509" managementScope="ManagementScope_1132357815717"/>
信任管理器提供了一个签署者证书来验证在握手期间发送的同代证书。添加至 SSL 配置的信任库的签署者必须是值得信任的。如果不信任签署者或者不想让其他人连接至您的服务器,那么可考虑从认证中心 (CA) 移除缺省根证书。如果不能验证任何证书的来源,那么也可以移除这些证书。缺省 IbmPKIX 信任管理器
可以使用缺省 IbmPKIX 信任管理器来替代 IbmX509 信任管理器,如以下代码样本中所示:<trustManagers xmi:id="TrustManager_1132357815719" name="IbmPKIX" provider="IBMJSSE2"
algorithm="IbmPKIX" trustManagerClass="" managementScope="ManagementScope_1132357815717">
<additionalTrustManagerAttrs xmi:id="DescriptiveProperty_1132357815717"
name="com.ibm.security.enableCRLDP" value="true" type="boolean"/>
<additionalTrustManagerAttrs xmi:id="DescriptiveProperty_1132357815718"
name="com.ibm.jsse2.checkRevocation" value="true" type="boolean"/>
</trustManagers>
<trustManagers xmi:id="TrustManager_managementNode_2" name="IbmPKIX" provider=
"IBMJSSE2" algorithm="IbmPKIX" trustManagerClass=""
managementScope="ManagementScope_managementNode_1">
<additionalTrustManagerAttrs xmi:id="DescriptiveProperty_1" name="com.ibm.se
curity.enableCRLDP" value="false" type="boolean" displayNameKey="" nlsRangeKey="
" hoverHelpKey="" range="" inclusive="false" firstClass="false"/>
<additionalTrustManagerAttrs xmi:id="DescriptiveProperty_2" name="com.ibm.js
se2.checkRevocation" value="false" type="boolean" displayNameKey="" nlsRangeKey=
"" hoverHelpKey="" range="" inclusive="false" firstClass="false"/>
<additionalTrustManagerAttrs xmi:id="DescriptiveProperty_3" name="ocsp.enabl
e" value="false" type="String" displayNameKey="" nlsRangeKey="" hoverHelpKey=""
range="" inclusive="false" firstClass="false"/>
<additionalTrustManagerAttrs xmi:id="DescriptiveProperty_4" name="ocsp.respo
nderURL" value="http://ocsp.example.net:80" type="String" displayNameKey=""
nlsRangeKey="" hoverHelpKey="" range="" inclusive="false" firstClass="false"/>
<additionalTrustManagerAttrs xmi:id="DescriptiveProperty_5" name="ocsp.respo
nderCertSubjectName" value="" type="String" displayNameKey="" nlsRangeKey="" hov
erHelpKey="" range="" inclusive="false" firstClass="false"/>
<additionalTrustManagerAttrs xmi:id="DescriptiveProperty_6" name="ocsp.respo
nderCertIssuerName" value="" type="String" displayNameKey="" nlsRangeKey="" hove
rHelpKey="" range="" inclusive="false" firstClass="false"/>
<additionalTrustManagerAttrs xmi:id="DescriptiveProperty_7" name="ocsp.respo
nderCertSerialNumber" value="" type="String" displayNameKey="" nlsRangeKey="" ho
verHelpKey="" range="" inclusive="false" firstClass="false"/>
</trustManagers>
请参阅示例:使用缺省 IbmPKIX 信任管理器启用证书撤销检查,以获取有关使用缺省 IbmPKIX 信任管理器的其他信息。
IbmPKIX 信任管理器除了具有标准证书验证功能以外,还可以检查 OCSP 属性以及包含证书撤销列表 (CRL) 分发点的证书。此过程称为扩展 CRL 检查。当选择信任管理器时,会自动将它的相关属性设置为 Java 系统属性,以便让 IBMCertPath 和 IBMJSSE2 提供程序知道已启用了 CRL 检查。
Ibmx509 和 IbmPKIX 信任管理器之间的差别
- 无论客户机/服务器信任哪些证书,IbmX509 信任管理器都将验证整个证书链。但是,即使您告知 IbmPKIX 信任管理器您要信任某证书,IbmPKIX 信任管理器也不会验证该证书。IbmPKIX 信任管理器将仅验证从您信任的证书已签名的证书到叶证书的所有证书。此外,
- IbmX509 要求任何根 CA 证书必须具有 BASIC CONSTRAINTS 扩展。否则,无法将该证书用作根 CA 证书。IbmPKIX 对于根 CA 证书没有此 BASIC CONSTRAINTS 要求。
- IbmX509 信任管理器将执行签名验证和证书到期检查以验证证书。. IbmPKIX 信任管理器也将执行这些验证,并且还将执行更高级的“证书撤销列表”(CRL) 检查,此检查将确定认证中心 (CA) 是否已撤销证书。
- 如果存在 CRL 分发点 (DP) 扩展,那么在接收到证书时,IbmPKIX 信任管理器会自动获得 CRL。
此外,可以使用在线证书状态协议 (OCSP) 对证书有效性执行在线检查。但是,要具备此功能,将要求您设置其他系统属性,如 Java Certification Path API Programmer's Guide 中所述,在 IBM® developerWorks® Web 站点上提供了此指南。
定制信任管理器
可以定义一个定制信任管理器来根据环境需要执行其他信任检查。例如,在某一环境中,您可以只启用来自同一“传输控制协议”(TCP) 子网的连接。com.ibm.wsspi.ssl.TrustManagerExtendedInfo 接口提供有关不是由标准 Java 安全套接字扩展 (JSSE) javax.net.ssl.X509TrustManager 接口提供的连接的扩展信息。已配置的 trustManagerClass 属性确定运行时已将哪个类实例化,如以下代码样本中所示:<trustManagers xmi:id="TrustManager_1132357815718" name="CustomTrustManager"
trustManagerClass="com.ibm.ws.ssl.core.CustomTrustManager"
managementScope="ManagementScope_1132357815717"/>
trustManagerClass 属性必须实现 javax.net.ssl.X509TrustManager 接口(还可以选择实现 com.ibm.wsspi.ssl.TrustManagerExtendedInfo 接口)。禁用缺省信任管理器
在某些情况下,您可能不想执行由缺省信任管理器 IbmX509 和 IbmPKIX 提供的标准证书验证。例如,您可能使用一种在内部自动运行的测试基础结构,而不用担心 SSL 客户机或服务器认证、完整性或机密性。以下样本代码显示了一个基本定制信任管理器,例如 com.ibm.ws.ssl.core.CustomTrustManager,其属性设置为 true。com.ibm.ssl.skipDefaultTrustManagerWhenCustomDefined=true
可以在客户机的 ssl.client.props 文件顶部的全局属性中设置此属性,或者在服务器的 security.xml 定制属性文件中设置此属性。当禁用缺省信任管理器时,尽管已经配置了它,但是必须配置一个定制信任管理器以防止服务器调用缺省信任管理器。禁用缺省信任管理器并不是一项普通操作。务必先在测试环境中对已禁用缺省信任管理器的系统进行测试。有关设置定制信任管理器的更多信息,请参阅 为 SSL 创建定制信任管理器配置。