WebLogic 安全性编程

     上一页  下一页    在新窗口中打开目录     
在此处开始内容

使用证书路径生成以及验证

WebLogic Security Service 提供查找和验证 X509 证书链的证书查找和验证(Certificate Lookup and Validation,简称 CLV)API。

证书路径是一种可以将证书链存储到内存的 JDK 类。术语“证书路径”也指用于定位和验证证书链的 JDK 架构和框架。CLV 框架可扩展和完善了 JDK 证书路径功能。证书路径提供程序依赖于 WebLogic 和 JDK 接口的紧密集成。

应用程序代码可以使用 WebLogic Server 提供的默认证书路径提供程序,以生成和验证证书链,或者使用任何自定义证书路径提供程序。

本部分包含下列主题:

 


证书路径生成

要使用应用程序中的证书路径生成器,请执行下列步骤:

  1. 实例化 CertPathSelector
  2. 实例化 CertPathBuilderParameters
  3. 使用 JDK CertPathBuilder 接口

实例化 CertPathSelector

CertPathSelector 接口 (weblogic.security.pk.CertPathSelector) 包含用于定位和验证证书路径的选择条件。因为有许多方法可以查找证书路径,所以为每种类型的选择条件都实现派生类。

每个选择器类都有一个或者多个用于检索选择数据的方法,以及一个构造方法。

weblogic.security.pk中实现 CertPathSelector 接口的类(一个类对应一种受支持类型的证书链查找)如下所示:

注意: 选择器是否受支持取决于已配置的证书路径提供程序。已配置的证书路径提供程序则由管理员决定。

WebLogic 证书路径提供程序仅使用 EndCertificateSelector 选择器。

清单 10-1 显示的是一个对选择器进行选择的示例。

清单 10-1 生成证书链选择器
// 您已经拥有结束证书
// 并且还希望用它查找和
// 验证相应的证书链
X509Certificate endCertificate = ...
// 生成证书链选择器
CertPathSelector selector = new EndCertificateSelector(endCertificate);

实例化 CertPathBuilderParameters

CertPathBuilderParameters的实例作为 CertPathParameters对象传递到 JDK 的 CertPathBuilder.build()方法。

提供下列构造方法和方法:

CertPathBuilderParameters

public CertPathBuilderParameters(String realmName, CertPathSelector selector, X509Certificate[] trustedCAs, ContextHandler context)
构造 CertPathBuilderParameters。

必须提供领域名称。要提供领域名称,请首先获取域的 SecurityConfigurationMBean。然后,获取 SecurityConfigurationMBean 的默认领域特性,也就是领域 MBean。最后,获取领域 Mbean 的名称特性。必须使用运行时 JMX Mbean 服务器获取领域名称。 必须提供selector。使用 weblogic.security.pk.CertPathSelector接口派生类之一(如实例化 CertPathSelector中所述)指定用于定位和验证证书路径的选择条件。

如果有可信 CA,则指定此 CA。否则,将使用服务器的可信 CA。这些只是对已配置的证书路径生成器和证书路径验证器的提示。这些生成器和验证器可能使用或者不使用这些可信的 CA,具体取决于其查找/验证算法。 ContextHandler 用于传入名称/值对的可选列表,已配置的 CertPathBuilder 和 CertPathValidator 可能使用名称/值对查找和验证证书链。它和传递到其他类型安全提供程序的上下文处理程序是对称的。将上下文设置为 null 表明没有上下文参数。

clone

Object clone()
此接口是不可克隆的。

清单 10-2显示的是一个传递CertPathBuilderParameter 的实例的示例。

清单 10-2 传递 CertPathBuilderParameters 的实例
// 生成证书链选择器
CertPathSelector selector = new EndCertificateSelector(endCertificate);
String realm = _;
// 根据需要创建并填充上下文处理程序,或为空
ContextHandler context = _;
// 根据需要传入可信 CA 列表,或为空
X509Certificate[] trustedCAs = _;
// 生成参数
CertPathBuilderParams params =
new CertPathBuilderParameters(realm, selector, context, trustedCAs);

使用 JDK CertPathBuilder 接口

java.security.cert.CertPathBuilder 接口是 CertPathBuilder类的 API。要使用 JDK CertPathBuilder 接口,请执行下列操作:

  1. 调用静态 CertPathBuilder.getInstance方法,以检索 CLV 框架的 CertPathBuilder。必须将“WLSCertPathBuilder”指定为传递到调用的算法名称。
  2. 获得 CertPathBuilder 对象后,即对返回的 CertPathBuilder 调用“生成”方法。该方法使用一个参数 - CertPathParameters,该参数用于表示要查找的证书链以及验证该证书链的方式。

    必须将 weblogic.security.pk.CertPathBuilderParameters的实例作为 CertPathParameters 对象传递到 JDK 的 CertPathBuilder.build() 方法,如实例化 CertPathBuilderParameters中所述。
  3. 如果成功,则在实现 CertPathBuilderResult 接口的对象中返回结果(包括生成的证书路径)。生成器决定返回的证书路径的数量。
  4. 如果不成功,而且参数不是 WebLogic CertPathBuilderParameters,或已配置的 CertPathBuilder不支持选择器,或领域名称不匹配服务器启动时的默认领域名称,CertPathBuilder 生成方法将引发 InvalidAlgorithmParameterException。

    如果找不到证书路径,或者找到的证书路径无效,则 CertPathBuilder 生成方法将引发 CertPathBuilderException。

查找证书链的示例代码流

清单 10-3 查找证书链
import weblogic.security.pk.CertPathBuilderParameters;
import weblogic.security.pk.CertPathSelector;
import weblogic.security.pk.EndCertificateSelector;
import weblogic.security.service.ContextHandler;
import java.security.cert.CertPath;
import java.security.cert.CertPathBuilder;
import java.security.cert.X509Certificate;
// 您已经拥有结束证书
// 并且还希望用它查找和
// 验证相应的证书链
X509Certificate endCertificate = ...
// 生成证书链选择器
CertPathSelector selector = new EndCertificateSelector(endCertificate);
String realm = _;
// 根据需要创建并填充上下文处理程序
ContextHandler context = _;
// 根据需要传入可信 CA 列表
X509Certificate[] trustedCAs = _;
// 生成参数
CertPathBuilderParams params =
new CertPathBuilderParameters(realm, selector, context, trustedCAs);
// 获取 WLS CertPathBuilder
CertPathBuilder builder =
CertPathBuilder.getInstance("WLSCertPathBuilder");
// 用它来查找和验证证书链
CertPath certpath = builder.build(params).getCertPath();
X509Certificate[] chain =
certpath.getCertificates().toArray(new X509Certificate[0]);

 


证书路径验证

要使用应用程序中的证书路径验证器,请执行下列步骤:

  1. 实例化 CertPathValidatorParameters
  2. 使用 JDK CertPathValidator 接口

实例化 CertPathValidatorParameters

CertPathValidatorParameters的实例作为 CertPathParameters对象传递到 JDK 的 CertPathValidator.validate()方法。

提供下列构造方法和方法:

CertPathValidatorParameters

public CertPathValidatorParameters(String realmName,                                  X509Certificate[] trustedCAs,                                  ContextHandler context)
构造 CertPathValidatorParameters。

必须提供领域名称。要提供领域名称,请首先获取域的 SecurityConfigurationMBean。然后,获取 SecurityConfigurationMBean 的默认领域特性,也就是领域 MBean。最后,获取领域 Mbean 的名称特性。必须使用运行时 JMX Mbean 服务器获取领域名称。 如果有可信 CA,请指定此 CA。否则,将使用服务器的可信 CA。这些只是对已配置的证书路径生成器和证书路径验证器的提示。这些生成器和验证器可能使用或者不使用这些可信的 CA,具体取决于其查找/验证算法。 ContextHandler 用于传入名称/值对的可选列表,已配置的 CertPathBuilder 和 CertPathValidator 可能使用名称/值对查找和验证证书链。它和传递到其他类型安全提供程序的上下文处理程序是对称的。将上下文设置为 null 表明没有上下文参数。

clone

Object clone()
此接口是不可克隆的。

清单 10-4显示的是一个传递CertPathValidatorParameters 的实例的示例。

清单 10-4 传递 CertPathValidatorParameters 的实例
// 获取 WLS CertPathValidator
CertPathValidator validator =
CertPathValidator.getInstance("WLSCertPathValidator");
String realm = _;
// 根据需要创建并填充上下文处理程序,或为空
ContextHandler context = _;
// 根据需要传入可信 CA 列表,或为空
X509Certificate[] trustedCAs = _;
// 生成参数(为默认安全领域)
CertPathValidatorParams params =
new CertPathValidatorParams(realm, context, trustedCAs);

使用 JDK CertPathValidator 接口

java.security.cert.CertPathValidator 接口是 CertPathValidator类的 API。要使用 JDK CertPathValidator 接口,请执行下列操作:

  1. 调用静态 CertPathValidator.getInstance 方法,以检索 CLV 框架的 CertPathValidator。必须将“WLSCertPathValidator”指定为传递到调用的算法名称。
  2. 获得 CertPathValidator 对象后,则对已返回的 CertPathValidator 调用“验证”方法。此方法使用一个参数 – CertPathParameters,指出应该如何进行验证。

    必须将 weblogic.security.pk.CertPathValidatorParameters的实例作为 CertPathParameters 对象传递到 JDK 的 CertPathValidator.validate() 方法,如实例化 CertPathValidatorParameters中所述。
  3. 如果成功,则将在实现 CertPathValidatorResult 接口的对象中返回结果。
  4. 如果不成功,而且参数不是 WebLogic CertPathValidatorParameters,或领域名称不匹配服务器启动时的默认领域名称,CertPathValidator.validate() 方法将引发 InvalidAlgorithmParameterException。

    如果证书路径中的证书未排序(结束证书必须是第一个证书),或证书路径无效,CertPathValidator 验证方法将引发 CertPathValidatorException。

验证证书链的示例代码流

清单 10-5 执行附加验证
import weblogic.security.pk.CertPathValidatorParams;
import weblogic.security.service.ContextHandler;
import java.security.cert.CertPath;
import java.security.cert.CertPathValidator;
import java.security.cert.X509Certificate;
// 您已经拥有未经验证的 X509 证书链
// 并且希望对其进行验证
X509Certificate[] chain = ...
// 将证书链转换为 CertPath
CertPathFactory factory = CertPathFactory.getInstance("X509");
ArrayList list = new ArrayList(chain.length);
for (int i = 0; i < chain.length; i++) {
list.add(chain[i]);
}
CertPath certPath = factory.generateCertPath(list);
// 获取 WLS CertPathValidator
CertPathValidator validator =
CertPathValidator.getInstance("WLSCertPathValidator");
String realm = _;
// 根据需要创建并填充上下文处理程序,或为空
ContextHandler context = _;
// 根据需要传入可信 CA 列表,或为空
X509Certificate[] trustedCAs = _;
// 生成参数(为默认安全领域)
CertPathValidatorParams params =
new CertPathValidatorParams(realm, context, trustedCAs);
// 用它来验证证书链
validator.validate(certPath, params);

  返回顶部       上一页  下一页