配置 SSL

配置 SSL

配置 SSL 是一个可选步骤;但是,BEA 建议在生产环境中使用 SSL。以下部分描述如何配置 WebLogic Server 的 SSL。

注意:以下部分适用于使用本 WebLogic Server 版本中的安全功能的 WebLogic Server 部署以及使用兼容性安全的部署。
注意:所有计算机都必须应用操作系统供应商当前推荐的修补程序集,以此来保持最新状态。

 


SSL:简介

安全套接口层(Secure Sockets Layer,简称 SSL)可使通过网络连接的两个应用程序相互对各自的标识进行身份验证,同时还可以对应用程序间的数据交换进行加密,以此来提供安全的连接。身份验证允许服务器和(可选)客户端对网络连接另一端的应用程序的标识进行验证。加密可以使通过网络传输的数据只被预定接收方识别。

WebLogic Server 中的 SSL 是 SSL 3.0 和传输层安全(Transport Layer Security,简称 TLS)1.0 规范的实现。

WebLogic Server 支持默认设置为 7002 的专用监听端口上的 SSL。要建立 SSL 连接,Web 浏览器通过在连接 URL 中提供 SSL 监听端口和 HTTP 协议而连接至 WebLogic Server,例如,https://myserver:7002

使用 SSL 是一项计算密集型操作,它会增加连接的开销。如无必要,应避免在开发环境中使用 SSL。但是,在生产环境中应始终使用 SSL。

 


单向和双向 SSL

可以将 SSL 配置为单向或双向:

  • 在单向 SSL 中,服务器必须向客户端提供证书,但客户端不必向服务器提供证书。客户端必须对服务器进行身份验证,但服务器可接受来自任何客户端的连接。在客户共享个人数据之前需要创建安全连接的 Internet 上,单向 SSL 十分常见。通常,客户端还使用 SSL 登录,以便服务器能够对它们进行身份验证。
  • 在双向 SSL(带客户端身份验证的 SSL)中,服务器和客户端将相互提供证书。可以将 WebLogic Server 配置为要求客户端提供有效的可信证书才能完成 SSL 连接。

 


设置 SSL:主要步骤

要设置 SSL,请执行下列步骤:

  1. 获取 WebLogic Server 的标识(私钥和数字证书)和信任(可信证书颁发机构颁发的证书)。执行此步骤时,可以使用由 WebLogic Server 工具包、CertGen 实用工具、Sun Microsystem 的keytool 实用工具或诸如 Entrust 或 Verisign 之类的著名供应商提供的数字证书、私钥和可信 CA 证书。
  2. 存储标识和信任。指定了标识和信任的私钥和可信 CA 证书存储在密钥库中。
    注意:此版本的 WebLogic Server 支持存储在文件或 WebLogic 密钥库提供程序中的私钥和可信 CA 证书,只是出于向后兼容目的。
  3. 在 WebLogic Server 管理控制台中配置 WebLogic Server 的标识和信任密钥库。请参阅“管理控制台联机帮助”中的配置密钥库
  4. 在 WebLogic Server 管理控制台中设置私钥别名和密码的 SSL 配置选项。可以设置要求提供客户端证书的配置选项(用于双向 SSL)。请参阅“管理控制台联机帮助”中的配置 SSL配置双向 SSL
注意:启动 WebLogic Server 实例时,可以指定命令行参数 -Dweblogic.security.SSL.nojce=true,以便在服务器的 SSL 实现中使用 FIPS 兼容的(FIPS 140-2)的密码模块。FIPS 140-2 是美国联邦政府针对使用敏感但不保密信息的标准要求。

有关配置 WebLogic Server 的标识和信任的信息,请参阅获取私钥、数字证书和可信证书颁发机构存储私钥、数字证书和可信证书颁发机构

 


使用主机名验证

主机名验证器可确保客户端连接到的 URL 中的主机名与数字证书中服务器作为 SSL 连接的一部分发送回来的主机名相匹配。当 SSL 客户端(或充当 SSL 客户端的 WebLogic Server)连接到远程主机上的应用程序时,主机名验证器会非常有用。它有助于防止中间人攻击。

默认情况下,WebLogic Server 会启用主机名验证。作为 SSL 握手的一项功能,WebLogic Server 会将 SSL 服务器数字证书中的 SubjectDN 中的公用名与用于启动 SSL 连接的 SSL 服务器的主机名进行比较。如果这些名称不匹配,则会删除 SSL 连接。SSL 客户端是在名称不匹配时删除 SSL 连接的实际执行方。

如果需要执行默认行为之外的任何其他行为,可以关闭主机名验证或配置自定义主机名验证器。关闭主机名验证会使 WebLogic Server 易受到中间人攻击。BEA 建议在生产环境中保留主机名验证。

在此版本的 WebLogic Server 中已更新主机名验证功能,这样,当证书中的主机名与本地计算机的主机名匹配时,主机名验证会传递 URL 是指定localhost127.0.01 还是本地计算机的默认 IP 地址。

有关详细信息,请参阅“管理控制台联机帮助”中的下列主题:

 


启用 SSL 调试

SSL 调试提供有关 SSL 握手期间发生的 SSL 事件的更为详细的信息。SSL 调试跟踪显示有关以下方面的信息:

  • 可信证书颁发机构
  • SSL 服务器配置信息
  • 服务器标识(私钥和数字证书)
  • 所用许可证允许的加密强度
  • 已启用的密码
  • SSL 握手期间传递的 SSL 记录
  • 由 WebLogic Server 检测到的 SSL 失败(例如,信任和有效性检查以及默认主机名验证器)
  • I/O 相关信息

使用下列命令行属性可以启用 SSL 调试:

-Dssl.debug=true -Dweblogic.StdoutDebugEnabled=true

可以将 SSL 调试属性包含在 SSL 服务器、SSL 客户端和节点管理器的启动脚本中。对于由节点管理器启动的受管服务器,应在受管服务器的“远程启动”页上指定此命令行参数。

只要 SSL 进程中创建了 ALERT,SSL 调试都会转储堆栈跟踪。ALERT 的类型和严重程度由传输层安全(Transport Layer Security,简称 TLS)规范定义。

堆栈跟踪会将信息转储到生成 ALERT 的日志文件中。因此,当跟踪 SSL 问题时,可能需要在 SSL 连接的两端(SSL 客户端或 SSL 服务器)都启用调试。日志文件包含有关失败发生位置的详细信息。要确定发生 ALERT 的位置,请确认 ALERT 之后是否有一条跟踪消息。在跟踪消息后收到的 ALERT 指示失败发生在对等方上。要确定存在的问题,需要在 SSL 连接中的对等方上启用 SSL 调试。

在跟踪 SSL 问题时,请查看日志文件中的信息,以确保:

  • 加载了正确的 config.xml 文件
  • 许可证(内部或输出)正确
  • 可信证书颁发机构对此服务器有效且正确。
  • 主机名检查成功
  • 证书验证成功
注意:Sev 1 type 0 是一个正常的结束 ALERT,这不是问题。

 


SSL 会话行为

WebLogic Server 允许缓存 SSL 会话。这些会话的生命周期与服务器相同。

直接使用 SSL 套接口的客户端可以控制 SSL 会话缓存行为。SSL 会话缓存特定于每个 SSL 上下文。由特定 SSL 上下文返回的 SSL 套接口工厂实例所创建的所有 SSL 套接口都可以共享 SSL 会话。

客户端默认会恢复同一 IP 地址和端口处的会话。假定 SSL 套接口使用的是同一基础 SSL 上下文,则使用同一主机和端口的多个 SSL 套接口默认会共享 SSL 会话。

未配置为使用 SSL 会话的客户端必须调用 SSL 套接口上的setEnableSessionCreation(false) 才能确保不缓存任何 SSL 会话。此设置仅控制是否将 SSL 会话添加到缓存中;它不会让 SSL 套接口停止查找已缓存的 SSL 会话。例如,SSL 套接口 1 已缓存了会话,SSL 套接口 2 将setEnableSessionCreation 设置为 false,但它仍可以重用套接口 1 中的 SSL 会话,因为该会话已被置于缓存中。

SSL 会话在 SSL 上下文的生命周期中一直存在;SSL 会话不受 SSL 套接口的生命周期控制。因此,创建新的 SSL 套接口并连接到由以前会话使用的同一主机和端口可恢复以前的会话,但前提是创建 SSL 套接口时所使用的 SSL 套接口工厂来自其中已缓存了该 SSL 会话的 SSL 上下文。

默认情况下,使用 HTTPS URL 的客户端会获取每个 URL 的一个新的 SSL 会话,这是因为每个 URL 都使用不同的 SSL 上下文,因此无法共享或重用 SSL 会话。使用weblogic.net.http.HttpsClient 类或 weblogic.net.http.HttpsURLConnection 类可以检索 SSL 会话。客户端还可以通过相互共享 SSL 套接口工厂来恢复 URL。

会话缓存由 SSL 上下文维护,并可由多个线程共享。单个线程可以访问整个会话缓存,而不只是访问一个 SSL 会话,因此在单个(或多个)线程中可能使用和共享多个 SSL 会话。

将忽略下列命令行参数:

  • weblogic.security.SSL.sessionCache.size
  • weblogic.security.SSL.sessionCache.ttl

 


使用 SSL 配置 IIOP 上的 RMI

使用 SSL 可以保护到远程方法调用(Remote Method Invocation,简称 RMI)远程对象的互联网内部对象请求代理协议(Internet Interop-Orb-Protocol,简称 IIOP)连接。SSL 通过身份验证确保连接的安全并对对象间交换的数据进行加密。

要使用 SSL 保护 IIOP 连接上的 RMI,请执行下列操作:

  1. 将 WebLogic Server 配置为使用 SSL。
  2. 将客户端对象请求代理(Object Request Broker,简称 ORB)配置为使用 SSL。有关配置 SSL 的信息,请参阅客户端 ORB 的产品文档。
  3. 使用 host2ior 实用工具将 WebLogic Server IOR 打印到控制台。host2ior 实用工具打印两个版本的可互操作对象引用(interoperable object reference,简称 IOR),一个用于 SSL 连接,另一个用于非 SSL 连接。IOR 的头信息指定是否可以将 IOR 用于 SSL 连接。
  4. 在获取对访问 WebLogic Server JNDI 树的 CosNaming 服务的初始引用时,可以使用 SSL IOR。

有关在 IIOP 上使用 RMI 的详细信息,请参阅 WebLogic RMI 编程

 


SSL 证书验证

WebLogic Server 可确保证书链中的每个证书都是由证书颁发机构颁发的。WebLogic Server 使用的所有 X509 V3 CA 证书都必须将基本约束扩展定义为 CA,以此来确保证书链中的所有证书都是由证书颁发机构颁发的。默认情况下,由不符合此条件的证书颁发机构颁发的任何证书都会遭到拒绝。本部分描述控制证书验证级别的命令行参数。

注意:如果用于启动 WebLogic Server 的证书链将不能通过证书验证,则会记录一条信息消息,指出客户端可能会拒绝此证书链。

控制证书验证的级别

默认情况下,WebLogic Server 将拒绝证书链中任何未将基本约束扩展定义为 CA 的证书。但是,您可能要使用不符合该要求的证书,或要提高安全级别以符合 IETF RFC 2459 标准。使用以下命令行参数可以控制 WebLogic Server 执行的证书验证级别:

-Dweblogic.security.SSL.enforceConstraints=option

表 11-1 描述了该命令行参数的选项。

表 11-1 -Dweblogic.security.SSL.enforceConstraints 的选项
选项
描述
strongtrue
使用此选项可确保将 CA 证书上的基本约束扩展定义为 CA。
例如:
-Dweblogic.security.SSL.enforceConstraints=strong
-Dweblogic.security.SSL.enforceConstraints=true
默认情况下,WebLogic Server 将执行此级别的证书验证。
strict
使用此选项可确保将 CA 证书上的基本约束扩展定义为 CA 并设置为关键级别。此选项将强制实施 IETF RFC 2459 标准。
例如:
-Dweblogic.security.SSL.enforceConstraints=strict
此选项不是默认选项,因为很多商用 CA 证书并不符合 IETF RFC 2459 标准。
off
使用此选项可关闭对基本约束扩展的检查。但仍对证书的其他部分进行验证。
例如:
-Dweblogic.security.SSL.enforceConstraints=off
BEA 不建议在生产环境中使用此选项。而是应购买符合 IETF RFC 2459 标准的新 CA 证书。大多数商业证书颁发机构颁发的 CA 证书都应该能够使用默认的 strong 选项。

接受证书中的证书策略

WebLogic Server 对 X.509 证书中的证书策略扩展提供有限的支持。使用 weblogic.security.SSL.allowedcertificatepolicyids 参数可提供逗号分隔的证书策略 ID 列表。当 WebLogic Server 收到带有关键证书策略扩展的证书时,它将验证是否有任何证书出现在允许的证书策略列表上以及是否存在任何不受支持的策略限定符。此版本的 WebLogic Server 支持证书操作规定(Certification Practice Statement,简称 CPS)策略限定符,但不支持用户通知限定符。如果证书包含 ID 为 2.5.29.32.0A 的特殊策略anyPolicy,则说明 CA 不希望限制该证书的策略集,因而也会接受该证书。

要使证书策略能够被接受,请使用以下参数启动 WebLogic Server:

-Dweblogic.security.SSL.allowedcertificatepolicyids <identifier1>,<identifier2>,...

对于证书链中可能出现的所有带关键扩展的证书,此参数应包含一个由它们的证书策略标识符构成的逗号分隔的列表,直至到达根证书,才能使 WebLogic Server 接受此类证书链。

检查证书链

使用 WebLogic Server ValidateCertChain 命令行实用工具可以确认现有证书链是否将受到 WebLogic Server 拒绝。此实用工具将验证来自 PEM 文件、PKCS-12 文件、PKCS-12 密钥库以及 JKS 密钥库的证书链。在此实用工具中,必须使用完整的证书链。以下是 ValidateCertChain 命令行实用工具的语法:

java utils.ValidateCertChain -file pemcertificatefilename
java utils.ValidateCertChain -pem pemcertificatefilename
java utils.ValidateCertChain -pkcs12store pkcs12storefilename
java utils.ValidateCertChain -pkcs12file pkcs12filename password
java utils.ValidateCertChain -jks alias storefilename [storePass]

有效证书链的示例:

java utils.ValidateCertChain -pem zippychain.pem

Cert[0]: CN=zippy,OU=FOR TESTING
ONLY,O=MyOrganization,L=MyTown,ST=MyState,C=US

Cert[1]: CN=CertGenCAB,OU=FOR TESTING
ONLY,O=MyOrganization,L=MyTown,ST=MyState,C=US
Certificate chain appears valid

无效证书链的示例:

java utils.ValidateCertChain -jks mykey mykeystore

Cert[0]: CN=corba1,OU=FOR TESTING ONLY, O=MyOrganization,L=MyTown,ST=MyState,C=US
CA cert not marked with critical BasicConstraint indicating it is a CA
Cert[1]: CN=CACERT,OU=FOR TESTING ONLY, O=MyOrganization,L=MyTown,ST=MyState,C=US

Certificate chain is invalid

使用证书查找和验证提供程序

WebLogic Server SSL 包含内置的证书验证。在给定一组可信 CA 时,此验证将:

  • 验证链中的最后一个证书是可信 CA 还是由可信 CA 所颁发的。
  • 使用可信 CA 完成证书链。
  • 验证链中的签名。
  • 确保链尚未过期。

可以使用证书查找和验证(Certificate Lookup and Validation,简称 CLV)提供程序对证书链执行额外的验证。在此版本中,WebLogic Server 新增了两个 CLV 提供程序:

  • WebLogic CertPath 提供程序 – 使用为特定服务器实例配置的可信 CA 完成证书路径并验证证书,它提供与内置的 SSL 证书验证相同的功能。默认情况下会配置此提供程序。
  • 证书注册表 – 系统管理员会建立一个允许访问服务器的可信 CA 证书列表;如果结束证书位于该注册表中,则该证书有效。管理员可通过从证书注册表中删除证书来撤消证书,这是一种执行撤消检查的廉价机制。默认情况下不配置证书注册表。

另外,还可以编写自定义 CertPathValidator 来提供对证书链的额外验证。请参阅“开发 WebLogic Server 的安全提供程序”中的CertPath 提供程序

WebLogic Server 中的 SSL 证书验证如何工作

WebLogic Server 实例中的出站 SSL 和双向入站 SSL 接收 SSL 握手期间必须已通过验证的证书链。一个双向入站 SSL 的示例是:通过 HTTPS 连接到 Web 应用程序的浏览器,其中浏览器向 Web 应用程序发送客户端的证书链。此入站证书验证设置可用于服务器中的所有双向客户端证书验证。

使用出站 SSL 的 WebLogic Server(即充当 SSL 客户端)的示例包括:

  • 连接到节点管理器
  • 通过管理端口连接到另一个 WebLogic Server 实例
  • 连接到外部 LDAP 服务器,例如 LDAPAuthenticator

通过管理控制台或 WLST,可以使用下列 SSLMBean 特性独立配置入站和出站 SSL 证书验证:InboundCertificateValidationOutboundCertificateValidation

这两个特性的合法值为:

  • BUILTIN_SSL_VALIDATION:使用内置的 SSL 证书验证代码完成并验证证书链。即,将 SSL 配置为它在以前版本中的工作方式。这是默认行为。
  • BUILTIN_SSL_VALIDATION_AND_CERT_PATH_VALIDATORS:使用内置的基于可信 CA 的验证和经过配置的 CertPathValidator 提供程序执行额外验证。即,将 SSL 配置为它在以前版本中的工作方式并执行额外的验证。

请参阅:

  • “WebLogic Server MBean Reference”中的SSLMBean
  • “管理控制台联机帮助”中的设置 SSL

对证书验证问题进行故障排除

如果在以前版本的 WebLogic Server 中运行正常的 SSL 通信开始出现意外失败,则可能的问题是证书链未能通过验证。

确定证书链中受到拒绝的位置,然后决定是将该证书链更新为将被接受的证书链,还是更改-Dweblogic.security.SSL.enforceConstraints 命令行参数的设置。

要解决证书问题,请使用下列方法之一:

  • 如果已知使用 SSL 通信的进程的证书链所在的位置,请使用 ValidateCertChain 命令行实用工具检查是否将接受该证书链。
  • 对使用 SSL 通信的进程启用 SSL 调试跟踪。SSL 调试跟踪的语法为:

    -Dssl.debug=true -Dweblogic.StdoutDebugEnabled=true

    以下消息指示因证书链中的问题而导致的 SSL 失败:

    <CA certificate rejected.The basic constraints for a CA certificate were not marked for being a CA, or were not marked as critical>

    如果使用单向 SSL,请在客户端日志中查找此错误。如果使用双向 SSL,请在客户端和服务器的日志中查找此错误。

 


在 WebLogic Server 中使用 nCipher JCE 提供程序

注意:Java 加密扩展(Java Cryptography Extension,简称 JCE)提供程序是用 JDK 5.0 中提供的可用 JCE 中的应用程序编程接口(Application Programming Interface,简称 API)编写的。此类型的提供程序与使用 WebLogic 安全服务提供程序接口(Security Service Provider Interface,简称 SSPI)编写的提供程序不同。默认情况下,WebLogic Server 不提供 JCE 提供程序。

SSL 是保护 Web 服务器中可用资源的关键组件。但是,过多的 SSL 流量可导致出现影响 Web 服务器性能的瓶颈。使用硬件卡进行加密的 JCE 提供程序(如 nCipher)可从 Web 服务器减轻 SSL 处理负担,从而将服务器释放出来以处理其他事务。它们还提供强加密和密码处理,可以保护密钥的完整性和机密性。

WebLogic Server 支持使用下列 JCE 提供程序:

  • JDK 5.0 中的 JDK JCE 提供程序 (SunJCE)。有关 JDK JCE 提供程序中的功能的详细信息,请访问http://java.sun.com/products/jce

    默认情况下,JDK 5.0 中的 JCE 提供程序具有输出强权限策略文件。在填写适当的表单后,可以从 Sun Microsystems 下载这些内部强权限策略文件,网址为http://java.sun.com/products/jce/javase.html#UnlimitedDownload

    BEA 许可证将继续控制由 WebLogic Server 应用程序编程接口 (API) 使用的加密强度。对于不具有适当的内部强加密许可证的客户端代码,只能使用默认的 J2SE 输出强加密。在服务器上将始终有一个 BEA 许可证来启用输出或内部强加密。

  • nCipher JCE 提供程序。请访问 http://www.ncipher.com

要安装 nCipher JCE 提供程序,请执行下列操作:

  1. 按照产品文档为 nCipher JCE 提供程序安装和配置硬件。
  2. 安装 nCipher JCE 提供程序的文件。需要安装下列文件:
    • 权限策略文件 – 默认情况下,JDK 会安装这些文件,但它们的输出强度有限。
    • 签署 JAR 文件的证书
      注意:在为 nCipher JCE 提供程序安装硬件的过程中,可能已执行此步骤。在该情况下,请验证是否已正确安装了这些文件。
    • JCE 提供程序 JAR 文件

      选择文件的安装方法:

    • 将文件安装为扩展。将文件复制到下列位置之一:

      JAVA_HOME/jre/lib/ext

      例如:

      BEA_HOME/jdk150_03/jre/lib/ext

    • 安装服务器的 CLASSPATH 中的文件。
  3. 编辑 Java 安全性属性文件 (java.security),以将 nCipher JCE 提供程序添加到 WebLogic Server 批准的 JCE 提供程序列表中。该 Java 安全性属性文件位于:

    JAVA_HOME/jre/lib/security/java.security

    将 nCipher JCE 提供程序指定为:

    security.provider.n=com.ncipher.provider.km.mCipherKM

    其中

    n 指定当未请求特定的提供程序时,用于确定在提供程序中搜索所请求的算法的首选顺序。顺序为从 1开始,1 是最优先的顺序,2 次之,依此类推。

    在安全性属性文件中,nCipher JCE 提供程序必须位于 RSA JCA 提供程序之后。例如:

    security.provider.1=sun.security.provider.Sun

    security.provider.2=com.sun.rsajca.Provider

    security.provider.3=com.ncipher.provider.km.mCipherKM

  4. 启动 WebLogic Server。
  5. 要确保 nCipher JCE 提供程序正常运行,请按照 nCipher 产品文档的说明启用调试。

 


指定 SSL 协议的版本

WebLogic Server 支持 SSL 版本 3.0 和 TLS 版本 1.0 协议。当 WebLogic Server 充当 SSL 服务器时,它会在自己的客户端问候消息中将 SSL 版本 3.0 协议指定为首选协议。当 WebLogic Server 充当 SSL 客户端时,它会在自己的 SSL 版本 2.0 客户端问候消息中将 TLS1.0 指定为首选协议。但是,如果 SSL 版本 3.0 是另一端的 SSL 服务器所支持的最高版本,则也可以使用 SSL 版本 3.0。对等方必须使用 SSL 版本 3.0 或 TLS 版本 1.0 消息进行响应,否则将删除 SSL 连接。

虽然大多数情况下都接受 SSL 版本 3.0 协议,但某些情况(兼容性、SSL 性能和具有最高安全性要求的环境)使 TLS 版本 1.0 协议更为理想。使用weblogic.security.SSL.protocolVersion 命令行参数可以指定要用于 SSL 连接的协议。

注意:SSL 版本 3.0 和 TLS 版本 1.0 协议不能互换。只有在可确定所有需要的 SSL 客户端都能够使用 TLS 版本 1.0 协议时,才能使用该协议。

可以指定以下命令行参数,以使 WebLogic Server 仅支持 SSL 版本 3.0 或 TLS 版本 1.0 连接:

  • -Dweblogic.security.SSL.protocolVersion=SSL3 - 仅发送和接受 SSL 版本 3.0 消息。
  • -Dweblogic.security.SSL.protocolVersion=TLS1 - 仅发送和接受 TLS 版本 1.0 消息。
  • -Dweblogic.security.SSL.protocolVersion=ALL - 这是默认行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值