使用 SSL 保护 JAX-RS 客户机

您可以使用安全套接字层 (SSL) 传输层安全来保护 Java™ API for RESTful Web Services (JAX-RS) 应用程序与调用该应用程序的客户机之间的通信。

开始之前

此任务假定您已完成下列步骤:
  • 已定义应用程序服务器或联合到网络 Deployment Manager 的应用程序服务器的单元概要文件。阅读关于创建单元概要文件的信息以了解如何创建包含联合应用程序服务器节点和 Deployment Manager 的单元概要文件。
  • 您已将 JAX-RS 应用程序安装到应用程序服务器中。

关于此任务

JAX-RS 客户机程序可以使用安全套接字层 (SSL) 来保护来自 JAX-RS 资源的请求和响应,以利用传输安全性。

如果您将 JAX-RS 应用程序配置为在启动 REST 资源时将 SSL 通道用于传输级别安全性,那么 JAX-RS 客户机需要使用 SSL 连接以使客户机可以与部署在 WebSphere® Application Server 环境中的 JAX-RS 资源交互。例如,如果 JAX-RS 应用程序配置来使用基本认证,那么常见的实践是使用 SSL 以便通过安全连接传输用户凭证。

为了说明此场景,假设您在单元中有一台应用程序服务器且您在此服务器上部署了 JAX-RS 资源。此服务器上的 JAX-RS 资源要求使用 SSL。假设您在使用 JAX-RS 的瘦客户机(本产品随附的一种基于 Java 的独立客户机)来调用需要使用 SSL 的其中一个安全资源。JAX-RS 的瘦客户机可使非 WebSphere 环境中运行的非受管 JAX-RS RESTful Web Service 客户机应用程序调用由应用程序服务器托管的 JAX-RS RESTful Web Service。

图 1. 使用 SSL 保护 JAX-RS 客户机
您可以为 JAX-RS 客户机应用程序配置 SSL 使客户机可以与需要 SSL 的 JAX-RS 应用程序资源交互。
要点: 如果要从在 WebSphere Application Server 环境中运行的应用程序内调用 JAX-RS 资源(例如,在您进行下游调用时),那么不必对 SSL 进行附加配置。您无需为此资源配置 SSL 连接,因为使用了应用程序服务器 SSL 运行时和配置。

使用以下步骤为“针对 JAX-RS 的瘦客户机”配置 SSL。

过程

  1. 为 JAX-RS 应用程序启用安全性并将应用程序配置为在调用 REST 资源时将 SSL 通道用于传输。

    在应用程序开发或部署时,编辑 web.xml 文件以添加有关需要对资源使用 SSL 的安全性约束。请参阅在 Web 容器内保护 JAX-RS 应用程序的信息以了解关于为应用程序启用 SSL 的其他详细信息。

    安全性约束元素内的以下元素指定为应用程序强制实施 SSL:
    <user-data-constraint id="UserDataConstraint_1">
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
     </user-data-constraint>
  2. 编辑 ssl.client.props 文件并定义密钥库和信任库属性。
    ssl.client.props 文件用于为客户机配置 SSL。以下代码示例说明如何定义密钥库和信任库属性:
    # keystore information
    com.ibm.ssl.keystoreName=ClientDefaultKeyStore
    com.ibm.ssl.keyStore= path/to/keystore/file 
    com.ibm.ssl.keyStorePassword=xxxxxxx
    com.ibm.ssl.keyStoreType=PKCS12
    com.ibm.ssl.keyStoreProvider=IBMJCE
    com.ibm.ssl.keyStoreFileBased=true
    
    # truststore information
    com.ibm.ssl.trustStoreName=ClientDefaultTrustStore
    com.ibm.ssl.trustStore=path/to/truststore/file
    com.ibm.ssl.trustStorePassword=xxxxxx
    com.ibm.ssl.trustStoreType=PKCS12
    com.ibm.ssl.trustStoreProvider=IBMJCE
    com.ibm.ssl.trustStoreFileBased=true
    com.ibm.ssl.trustStoreReadOnly=false
  3. 启用或禁用主机名验证。

    com.ibm.ssl.performURLHostNameVerification 属性在值设置为 True 时执行 URL 主机名验证。 当对目标服务器进行 HTTP URL 连接时,服务器证书中的公共名 (CN) 必须与目标主机名相匹配。如果没有匹配项,那么主机名验证器将拒绝该连接。缺省值 false 将省略此检查。

    com.ibm.ssl.validationEnabled 属性在值设置为 True 时,在装入的时候验证每个 SSL 配置。缺省值 False 将省略此检查。

    com.ibm.ssl.performURLHostNameVerification=false
    com.ibm.ssl.validationEnabled=false
  4. 确保服务器证书的签署者在客户机信任库中。

    使用 IBM® iKeyman 工具或 Java keytool 实用程序来确定证书是否已经在信任库中。如果证书不在信任库中,请将证书导入信任库。

    例如,要列出包含在信任库 trust.p12 类型中的证书,请输入以下命令并确保您包含到信任库的完整路径:

    keytool -list -v -storetype pkcs12 -keystore trust.p12
  5. 导入证书。

    如果服务器证书的签署者不在客户机信任库中,或者如果该服务器具有不在客户机信任库中的自签名证书,请导入证书。

    要导入证书,您可以使用首选工具:IBM iKeyman 或 Java keytool 实用程序。 以下示例使用 Java keytool 实用程序。

    1. 将服务器的签署者证书导出到文件。

      例如,使用以下命令将签署者证书从对应于 default_signer 别名的条目中的现有信任库 servertrust.p12 导出到文件 mycert.cer

      keytool -export -storetype pkcs12 -alias default_signer -file mycert.cer -keystore servertrust.p12
    2. 将签署者证书导入到“针对 JAX-RS 的瘦客户机”使用的信任库。

      例如,使用以下命令将签署者证书从对应于 default_signer 别名的条目中的现有信任库 servertrust.p12 导出到文件 mycert.cer

      keytool -export -storetype pkcs12 -alias default_signer -file mycert.cer -keystore servertrust.p12
  6. 为基于 JAX-RS 2.0 的瘦客户机配置 SSL。

    要调用加密 URL,请继续执行以下步骤:

    1. 要在开发瘦客户机应用程序时启用客户机 SSL,请在瘦客户机应用程序节点中添加客户机属性。

      将客户机属性键设置为 com.ibm.ws.jaxrs.client.ssl.config,并将其值设置为服务器 SSL 别名。请参阅以下代码片段作为参考:

      ClientBuilder cb = ClientBuilder.newBuilder();
      cb.property("com.ibm.ws.jaxrs.client.ssl.config", "NodeDefaultSSLSettings");
      提示: 属性值等于您设置的服务器 SSL 别名。有关更多信息,请转至应用程序服务器->server n,其中 n 是您对应用程序服务器指定的编号。->Web 容器传输链->WCInboundDefaultSecure->SSL 入站通道 (SSL_2),以便在 SSL 配置字段下进行检查。
    2. 要调用加密 URL,请从命令行运行以下代码示例:
      [HP-UX][Linux][Solaris]
      java -Dcom.ibm.SSL.ConfigURL=file:///$WAS_HOME/AppServer/profiles/AppSrv01/properties/ssl.client.props -cp .:$WAS_HOME/AppServer/runtimes/com.ibm.jaxrs1.1.thinclient_$VERSION.jar:$WAS_HOME/AppServer/runtimes/com.ibm.jaxws.thinclient_$VERSION.jar:$WAS_HOME/AppServer/com.ibm.ws.admin.client_$VERSION.jar:$WAS_HOME/AppServer/plugins/com.ibm.ws.security.crypto.jar your_package.SSLThinClientProgram <An encrypted URL>
      [Windows]
      java -Dcom.ibm.SSL.ConfigURL=file:///$WAS_HOME/AppServer/profiles/AppSrv01/properties/ssl.client.props -cp .;$WAS_HOME/AppServer/runtimes/com.ibm.jaxrs1.1.thinclient_$VERSION.jar;$WAS_HOME/AppServer/runtimes/com.ibm.jaxws.thinclient_$VERSION.jar;$WAS_HOME/AppServer/runtimes/com.ibm.ws.security.crypto.jar;$WAS_HOME/AppServer/plugins/com.ibm.ws.security.crypto.jar your_package.SSLThinClientProgram <An encrypted URL>

结果

您已使用 SSL 定义了客户机与目标服务器之间的安全连接,以实现 JAX-RS 应用程序与客户机之间通信的完整性和机密性。

示例

以下代码片段演示 ssl.client.props 文件样本:
# keystore information
com.ibm.ssl.keyStoreName=ClientDefaultKeyStore
com.ibm.ssl.keyStore=c:/jaxrs/test/config/keystore.p12 
com.ibm.ssl.keyStorePassword=testpasswd
com.ibm.ssl.keyStoreType=PKCS12
com.ibm.ssl.keyStoreProvider=IBMJCE
com.ibm.ssl.keyStoreFileBased=true

# truststore information
com.ibm.ssl.trustStoreName=ClientDefaultTrustStore
com.ibm.ssl.trustStore= c:/jaxrs/test/config/truststore.p12
com.ibm.ssl.trustStorePassword=testpasswd
com.ibm.ssl.trustStoreType=PKCS12
com.ibm.ssl.trustStoreProvider=IBMJCE
com.ibm.ssl.trustStoreFileBased=true
com.ibm.ssl.trustStoreReadOnly=false

# Host name verification information
com.ibm.ssl.performURLHostNameVerification=false
com.ibm.ssl.validationEnabled=false

指示主题类型的图标 任务主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_impl_securejaxrs_clientssl
文件名:twbs_jaxrs_impl_securejaxrs_clientssl.html