安全套接字层客户机证书认证

想要使用安全套接字层 (SSL) 协议与服务器建立安全连接的客户机软件通过利用 SSL 协议或者称为传输层安全性 (TLS) 的增强协议来执行与 SSL 证书进行 SSL 握手。 个人证书可以表示服务器,也可以表示特定客户机,并由认证中心 (CA) 签名以确保正确标识该个人证书。

SSL 确保管理员有可用的 CA 签署者证书,用来为个人证书签名,并且该证书存储在客户机和/或服务器信任库中。 在使用 SSL 证书进行连接握手期间,将进行 SSL 客户机证书认证。

在此过程中,必须进行下列事件:
  • 服务器端必须确定是否将进行客户机认证。 必须在服务器的 SSL 配置中启用客户机认证;如果使用了 ORB 间协议 (IIOP),那么还必须在公共安全互操作性 V2 (CSIv2) 配置中启用客户机认证。
  • 必须在全局安全性中(而不是在安全域中)进行 CSIv2 配置。
  • 必须从客户机的密钥库中抽取客户机的签署者证书,并将其添加至服务器的信任库。
  • 必须从服务器的密钥库中抽取服务器的签署者证书,并将其添加至客户机的信任库。

配置WebSphere用于客户端身份验证的服务器

如果服务器端请求客户端发送证书,则会发生客户端证书认证。 A WebSphere®服务器上可以配置 SSL 配置上的客户端证书身份验证。 此配置影响WebSphere当它仅充当服务器时,而不是当它充当客户端时。

要使用管理控制台在 SSL 配置中配置客户机证书认证,请完成下列步骤:
  1. 点击安全> SSL 证书和密钥管理> SSL 配置
  2. 选择 SSL 配置。
  3. 在“其他属性”下,选择保护质量 (QoP) 设置。
  4. 在“客户端身份验证”下,选择Required
  5. 点击OK保存更改。

您还可以使用 modifySSLConfig 命令并将 -clientAuthentication 标志设置为 true 以启用客户机认证。 看SSLConfigCommands指挥组AdminTask对象以获取有关此命令的更多信息..

要使用管理控制台对 CSIv2 入站连接配置客户机证书认证,请完成下列步骤:
  1. 点击安全>全球安全
  2. 在 RMI/IIOP 安全性下,选择CSIv2 inbound communications
  3. 在里面CSIv2传输层部分,在客户端证书身份验证下,选择Required
  4. 点击OK保存更改

您还可以使用 configureCSIInbound 命令并将 -clientCertAuth 标志设置为必需以对 CSIv2 启用客户机认证。 请参阅 AdminTask 对象的 SecurityConfigurationCommands 命令组以了解有关此命令的更多信息。

如果设置了客户端以进行客户机认证,那么必须将客户机的签署者证书添加至服务器的信任库。 当证书文件中具有客户机的证书时,可以将其添加至服务器的信任库。

要使用管理控制台将签署者添加至服务器的信任库,请完成下列步骤:
  1. 点击安全> SSL 证书和密钥管理>密钥库和证书
  2. 选择所配置的用于进行客户机认证的信任库。
  3. 在“其他属性”下,选择“签署者证书”。
  4. 单击 Add
  5. 在“别名”字段中,输入您用以存储证书的别名。
  6. 在“文件名”框中,输入证书文件的完整路径。
  7. 点击OK保存更改

您还可以使用 addSignerCertificate 命令将签署者添加至服务器的信任库。 请参阅 AdminTask 对象的 SignerCertificateCommands 命令组以了解有关此命令的更多信息。

如果您正在集群环境中使用客户机认证,那么必须为该集群中的服务器所在的每个节点配置客户机认证。

设置客户端以进行客户机认证

客户机:

管理客户机、瘦客户机或者纯客户机的密钥库中必须具有个人证书。 这WebSphere客户端默认密钥库是在WebSphere Application Server已安装其中已有个人证书。 可以在 ssl.client.props 文件中的 com.ibm.ssl.keyStore 属性中找到此密钥库。 客户端密钥存储不受以下机构管理: WebSphere Application Server,因此密钥管理实用程序(iKeyman) 或 Java™ keytool 实用程序可用于将证书提取到证书文件。

要使用 iKeyman 来抽取证书,请完成下列步骤:
  1. 启动 iKeyman。
  2. 选择密钥数据库文件>打开
  3. 输入密钥库文件的路径。 可以从 ssl.client.props 文件中获取此路径。
  4. 单击 OK
  5. 输入密钥库的密码并点击OK
  6. 在“个人证书”下,选择客户机缺省证书。
  7. 输入证书文件的路径和文件名,然后单击OK
重要的:最佳做法是分别管理服务器密钥库和客户端密钥库。 但是,如果您确实希望使用服务器密钥库来管理管理控制台中的客户端密钥库,则可以创建一个密钥库配置来指向本地客户端密钥库。 请注意,证书过期监视器不会监视客户端密钥库。

可以使用其中包含已抽取的证书的文件将签署者添加至服务器的信任库。 按照配置WebSphere用于客户端身份验证的服务器部分将该签名者添加到服务器信任库。

如果通过 IIOP 进行通信,那么在 sas.client.props 文件中必须设置下列属性。
  • 启用 SSL:
    	com.ibm.CSI.performTransportAssocSSLTLSSupported=true
    	com.ibm.CSI.performTransportAssocSSLTLSRequired=false 
  • 在消息层禁用客户机认证:
    	com.ibm.CSI.performClientAuthenticationRequired=false
    	com.ibm.CSI.performClientAuthenticationSupported=false 
  • 在传输层启用客户机认证(这是受支持的,但不是必须这样做):
     com.ibm.CSI.performTLClientAuthenticationRequired=false
    	com.ibm.CSI.performTLClientAuthenticationSupported=true 

瘦客户端和纯客户端可能不会使用WebSphere Application ServerSSL 属性文件,ssl.client.props 。 他们最有可能使用 Java 系统属性来设置客户端密钥库和信任库。 必须将服务器的签署者证书添加至使用 java.net.ssl.trustStore 系统属性指定的信任库。 可以使用 keytool 或 iKeyman 来添加签署者证书。 必须从 javax.net.ssl.keyStore 系统属性所指定的密钥库中的个人证书中抽取签署者,然后将其添加至服务器的信任库。

例如:
javax.net.ssl.keyStore
javax.net.ssl.keyStorePassword
javax.net.ssl.keyStoreType
javax.net.ssl.trustStore
javax.net.ssl.trustStorePassword
javax.net.ssl.trustStoreType

充当客户机的服务器:

客户端可以是WebSphere服务器充当客户端。 如果情况如此,请确定正在将哪个 SSL 配置用作进行通信的客户端,抽取其证书的签署者并添加至服务器端的信任库。 建议您使用根证书签署者。

要使用管理控制台来抽取根证书,请完成下列步骤:
  1. 点击安全> SSL 证书和密钥管理>密钥库和证书
  2. 在 Keystore usages 下拉菜单下,选择Root certificate keystore
  3. 选择 DmgrDefaultRootStore(对于 Network Deployment 服务器)或者 NodeDefaultRootStore(对于应用程序服务器)。
  4. 在其他属性下,选择Personal certificates
  5. 选择默认的根证书(通常称为root),然后点击Extract
  6. 在“证书文件名”框中,输入用于保存证书的文件的完整路径。
  7. 点击OK保存。

您还可以使用 extractCertificate 命令来抽取根证书。 请参阅 AdminTask 对象的 PersonalCertificateCommands 命令组以了解有关此命令的更多信息。

可以将所创建的证书文件传送到服务器端,并将其添加至服务器的信任库。

当服务器充当客户机时,客户端服务器需要目标服务器中的签署者。 可以使用签署者证书的从端口中检索选项来检索签署者。

要使用管理控制台从端口中检索签署者,请完成下列步骤:
  1. 点击安全> SSL 证书和密钥管理>密钥库和证书
  2. 从集合中选择服务器的信任库。
  3. 其他属性下,选择签署者证书
  4. 单击 Retrieve from port
  5. 输入目标主机名和目标端口名。
  6. 输入证书的别名。
  7. 单击检索签署者信息
  8. 点击好的保存。

您还可以使用retrieveSignerFromPort命令从端口检索签名者。 请参阅 AdminTask 对象的 SignerCertificateCommands 命令组以了解有关此命令的更多信息。

设置浏览器以进行客户机认证:

什么时候WebSphere Application Server配置为客户端证书身份验证,并尝试从浏览器访问服务器,则浏览器必须具有客户端证书身份验证的证书。 如果修改了服务器的缺省 SSL 配置以启用客户机证书认证,那么您无法登录到管理控制台。

可以使用管理控制台为浏览器创建证书。 您必须先创建密钥库,然后创建链式证书。 创建证书之后,按照浏览器的指示信息来导入证书。 浏览器要求添加该链的每一部分以验证该证书,因此,必须抽取根证书并将其添加至该浏览器。 按照设置客户端以进行客户端身份验证有关提取根证书的信息,请参阅部分。

要使用管理控制台来创建密钥库,请完成下列步骤:
  1. 点击安全> SSL 证书和密钥管理>密钥库和证书
  2. 单击 New
  3. 输入密钥库的名称。
  4. 输入密钥库文件的完整路径。
  5. 输入密钥库的密码,然后进行确认。
  6. 点击OK保存。
要使用管理控制台来创建链式证书,请完成下列步骤:
  1. 点击安全> SSL 证书和密钥管理>密钥库和证书
  2. 选择您先前所创建的密钥库。
  3. 在下面附加属性, 点击Personal certificates
  4. 在下拉列表中创造按钮,选择Chained Certificate
  5. 输入证书的别名。
  6. 提供证书的公共名。 名字是CN主题 DN 的一部分。
  7. 您可以在其余任何字段中输入信息来构建该链式证书的主体集 DN。
  8. 点击OK保存。

您还可以使用 createKeyStore 命令来创建密钥库。 请参阅 AdminTask 对象的 KeyStoreCommands 命令组以了解有关此命令的更多信息。

您还可以使用 createChainedCertificate 命令来创建链式证书。 请参阅 AdminTask 对象的 PersonalCertificateCommands 命令组以了解有关此命令的更多信息。

启用客户机证书认证之后,可以如下一节中所述来执行 Web 证书认证。

Web 证书认证

可以在 Java 2 平台上执行基于证书的身份验证,Enterprise Edition( J2EE ) Web 模块(当模块配置为客户端证书身份验证时)。 这使用户能够使用证书登录到 Web 模块以认证该证书,然后将其映射至注册表中的用户。

启用 Web 证书认证将要求配置服务器的 SSL 配置,以在安装了该模块的服务器上进行客户机证书认证。

服务器端确定要进行客户机认证。 查看配置WebSphere用于客户端身份验证的服务器部分以获取有关如何配置客户端身份验证的信息。 客户端必须将服务器中的签署者添加至客户机信任库。 查看设置客户端以进行客户端身份验证部分了解更多信息。

Web 模块的 web.xml 文件必须支持 web.xml 文件的 login-config 部分将认证方法设置为 CLIENT-AUTH。

<login-config>
<auth-method>CLIENT-CERT</auth-method>
</login-config>

必须将该证书映射至注册表中的用户,否则您无法登录到该 Web 模块。

对于本地操作系统用户注册表,必须将证书主体集 DN 的 CN 值映射至本地操作系统用户注册表中的用户。 例如,如果证书主体集 DN 为 CN=tester,o=ibm,c=us,那么 tester 是在本地用户注册表中搜索的用户。 如果本地注册表中不存在该用户,那么认证将失败。

轻量级目录访问协议 (LDAP) 用户注册表提供了更多选项用于将证书映射至用户身份。 LDAP 中的缺省证书映射方式用于 LDAP 注册表项与证书中的主体集 DN 之间进行 DN 精确匹配。 例如,如果证书 DN 为 CN=user1,o=ibm,c=us,那么 LDAP 注册表中必须有一个具有精确值的项。 LDAP 用户注册表还有一个“证书过滤器”选项,可以提供证书主体集 DN 的特定部分与 LDAP 存储库中的条目的匹配项。 有关 LDAP 证书映射的更多详细信息,请阅读轻量级目录访问协议存储库配置设置

在联合存储库配置中,缺省情况下,基于文件的存储库不支持客户机证书登录。 要在基于文件的存储库中启用证书映射支持,请遵循“在基于联合存储库文件的存储库中启用客户机证书登录支持”主题中的过程。

联合存储库 LDAP 注册表支持证书映射。 它使用 LDAP 用户注册表所使用的映射规则和属性。

如果定制注册表实现了 mapCertificate() 方法,那么定制用户注册表可以将证书映射至用户。