SSL 和插件

简介
编写本文档的目的是,帮助用户了解自身在使用 WebLogic Plugin 和 SSL 时的需要。它详细说明了在构建环境的体系结构时应提出的问题。将用作示例的三个 Web 服务器是:Apache、iPlanet (SunOne) 和 Microsoft IIS。

必备知识
开始之前的一项重要准备工作是理解握手进程。

开始之前

  请自问下列问题:
  1. 我是否要在客户端与代理(Apache、Sun One、IIS)的宿主 Web 服务器之间设置 SSL?
如果答案是肯定的 - 是否需要使用双向 SSL?这种设计的优势在于,它使将客户端证书传播到后端 WebLogic Server 进行处理(例如,验证)成为可能
  1. 我是否要在 WebLogic Plugin 和 WebLogic Server 之间设置 SSL?
如果答案是肯定的 - 我是否需要从第一次前端握手“截取”客户端证书?

我是否只需要单向 SSL?是否只是为了对插件和 WebLogic Server 之间传输的数据加密?

有关 SSL 握手进程的信息,请参考理解和探查 SSL 问题模式。

插件
快速链接

配置 Apache 以在客户端(例如,浏览器)和 Web 服务器之间建立 SSL 连接

预设置

您需要拥有以下将用于建立连接的 SSL 证书:
  •    私钥证书
  •    公钥证书或服务器证书
  •    证书颁发机构 (Certificate Authority, CA)
在随后的示例中,分别对上述证书做了如下命名:
  •     私钥     =  FrontEndDemoKey.crt
  •     公钥     =  FrontEndDemoCert.crt
  •     CA       =  FrontEndCA.crt
如果要建立双向 SSL 连接,则还需要另一个 CA 文件:
  •     FrontEndCAwithCAClientChainToAuthenticate.crt
此文件与 FrontEndCA.crt CA 文件基本相同,不同的是它包含一个与它连接在一起的 CAchain,在建立双向 SSL 连接时,它需要使用该 CAchain 对客户端证书进行身份验证。

有关详细信息,请参考 http://www.modssl.org/docs/2.1/ssl_reference.html#ToC13

单向 SSL 的简单设置
需要在 Apache httpd.conf 文件中配置下列三个属性:
  • SSLCertificateFile
  • SSLCertificateKeyFile
  • SSLCACertificateFile。
例如:

    # server cert to use
    SSLCertificateFile /home2/support/apacheSSL1.3.28/conf/ssl.crt/FrontEndDemoCert.crt
    # server private key to use
    SSLCertificateKeyFile /home2/support/apacheSSL1.3.28/conf/ssl.key/FrontEndDemoKey.crt
    # CA to use
    SSLCACertificateFile /export/home/smalbois/FrontEndCA.crt>

双向 SSL 的简单设置
除配置上述 3 个属性外,还需要配置 Apache httpd.conf 文件中的下列属性:
  • SSLVerifyClient
  • SSLVerifyDept

# server cert to use
    SSLCertificateFile /home2/support/apacheSSL1.3.28/conf/ssl.crt/FrontEndDemoCert.crt
    # server private key to use
    SSLCertificateKeyFile /home2/support/apacheSSL1.3.28/conf/ssl.key/FrontEndDemoKey.crt
    # CA to use
    SSLCACertificateFile /export/home/smalbois/FrontEndCAwithCAClientChainToAuthenticate.crt
    # Force 2 way SSL
    # none: no client Certificate is required at all
    # optional: the client may present a valid Certificate
    # require: the client has to present a valid Certificate
    #optional_no_ca: the client may present a valid Certificate but has not to be (successfully) verifyable.
    SSLVerifyClient require
    # This directive sets how deeply mod_ssl should verify before deciding that the clients
    # don't have a valid certificate. The depth actually is the maximum number of intermediate
    #certificate issuers
    SSLVerifyDepth  10

假定已提取了用于验证身份的客户端 CA。这些 CA 需与 SSLCACertificateFile 连接在一起。

如果目标是将客户端证书传播到 WebLogic 进行身份验证,可考虑添加该选项:

   SSLExportClientCertificates
    # SSLExportClientCertificates : Export client certificates and the certificate chain
    #behind them to CGIs. The certificates are base 64 encoded in the
    #environment variables SSL_CLIENT_CERT and SSL_CLIENT_CERT_CHAIN_n,
    # where n runs from 1 upwards.

有关详细信息,请参考 http://www.apache-ssl.org/docs.html

如何调试

SSLLog:此指令设置专用 SSL 协议引擎日志文件的名称。错误类型消息会以增加方式复制到常规 Apache 错误日志文件(指令 ErrorLog)。请将该日志文件置于无法被人用来对真实服务器实施 symlink 攻击的位置(即只有超级用户才有权写入的某个位置)。例如:

SSLLog      /home2/support/apacheSSL1.3.28/logs/ssl_engine_log

SSLLogLevel:此指令设置专用 SSL 协议引擎日志文件的详细程度。该级别为下列级别之一(按升序排列,其中的较高级别包含较低级别):
  • none - 不进行专用 SSL 记录,但仍会将“error”级别的消息写入到常规 Apache 错误日志文件
  • error - 只记录错误类型的消息,即显示严重情况(处理停止)的消息。这些消息还会被复制到常规 Apache 错误日志文件
  • warn - 还记录警告消息,即显示非严重问题(处理仍在继续)的消息
  • info - 还记录提示性消息,即显示主要处理步骤的消息
  • trace - 还记录跟踪消息,即显示次要处理步骤的消息
  • debug - 还记录调试消息,即显示开发和低级别 I/O 信息的消息
例如:
SSLLogLevel info

测试配置和排除故障
为确保这第一个步骤正常工作,请打开 Web 浏览器,访问 Apache 服务器以查看结果:

https://myapache:myport/

单向 SSL 设置
如果出现一个 Internet Explorer 窗口,询问您是否要信任该 CA,请回答“Yes”。正常情况下随后会建立连接并显示 Apache 欢迎页面。

如果此操作失败,请验证下列证书是否过期失效或已损坏:
  • SSLCertificateFile
  • SSLCertificateKeyFile
  • SSLCACertificateFile
双向 SSL 设置
使用浏览器访问 Apache 服务器时,正常情况下会出现一个弹出框,询问要使用您的浏览器证书库中的哪个客户端证书。

如果出现的弹出框是空的,则意味着 SSLCACertificateFile 不包含您要使用的客户端证书的 CA。

如果双向 SSL 不能正常工作,请回过头来先检查单向 SSL 配置是否可以正常工作。操作步骤是:将 SSLVerifyClient require 更改为 SSLVerifyClient none,然后再次测试 URL。如果单向 SSL 配置可以正常工作,则表明问题出在双向 SSL 配置。如果是这种情况,请再次检查客户端证书,确保它未过期失效或损坏。

返回页首

配置 Sun One / iPlanet 以在客户端(例如,浏览器)和 Web 服务器之间建立 SSL 连接

此配置将使用 iPlanet WebServer 6.0。将说明为 iPlanet WebServer 设置 SSL 连接的过程。

单向 SSL 的简单设置
  • 打开 SunOne 控制台:
  • 如果尚未创建数据库,请转到“Security”选项卡,创建数据库。系统将要求您指定密码(请将此密码存储在一个安全位置)。
  • 为服务器申请证书。系统将要求您提供私钥密码以及您将创建的证书的一些详细信息。
  • 将您收到的 CSR 发送到某个证书颁发机构进行签署(可以使用 Verisign 来获得一个免费试用 14 天的证书进行测试)。证书颁发机构将给您发送一个服务器证书。
  • 选择“Install Certificate”,将 PEM 编码文件复制并粘贴到该证书。请不要以此服务器的名称来命名该证书。
  • 转到“Preferences”,编辑“Listen Sockets”
Iplanet 配置 1

备注:“Security”必须为“ON”。
 
IPlanet 配置 2

备注:
如果是单向 SSL,“ClientAuth”必须为“OFF”。

双向 SSL 的简单设置

正常情况下,SunOne 服务器的设置过程简单明了,具体设置步骤如下:

 IPlanet 配置 3

备注:“Security”必须为“ON”。

 IPlanet 配置 4
备注:如果是双向 SSL,“Client Auth”必须为“ON”,以强制 Web 服务器要求提供客户端证书。

如果不能肯定客户端根 CA 是否已添加到证书数据库,请从 Web 浏览器将其提取出来,并转换为 PEM 编码格式。

转到“Security - Install Certificate”
  •     选择“Trusted Certificate Authority (CA)”
  •     在“Certificate Name”中指定一个客户端根 CA 名称
  •     指定相应的选项,将文件的内容添加到数据库

如何调试
转到“Logs”选项卡,单击“View Error Log”。

测试配置和排除故障
为确保这第一个步骤运行正常,请打开 Web 浏览器,访问 SunOne 服务器:

单向 SSL 设置
如果出现一个 Internet Explorer 窗口,询问您是否要信任该 CA,请回答“是”。正常情况下随后会建立连接并显示 SunOne 欢迎页面。

如果此操作失败,请检查证书数据库 (Manage Certificates)。例如,单击“Server-Cert”,然后检查到期日期。此证书的类型应为自有。

双向 SSL 设置

使用浏览器访问 SunOne 页面时,正常情况下会出现一个弹出框,询问要使用您的浏览器证书库中的哪个客户端证书。

如果出现的弹出框是空的,则意味着您的数据库中可能没有正确的客户端根 CA。有关详细信息,请参考双向 SSL 的简单设置

如果双向 SSL 不能正常工作,请回过头来先检查单向 SSL 配置是否可以正常工作。操作步骤如下:
  • 将“Client Auth”设置为“OFF”
  • 重新启动服务器
  • 再次测试 URL。
如果单向 SSL 配置可以正常工作,则表明问题出在双向 SSL 配置。如果是这种情况,请确认客户端证书并未过期失效或损坏。

返回页首

配置 Microsoft IIS 以在客户端(例如,浏览器)和 Web 服务器之间建立 SSL 连接

预设置
首先应确保已指定了用于连接您的网站的 SSL 端口。(进入“Web Site”选项卡,然后设置“SSL Port”)。从 Web 浏览器发出的 https 请求将需要此项设置。

单向 SSL 的简单设置
您将需要为您的 IIS 申请 SSL 证书。有关为 IIS 申请 SSL 证书的说明,请登录 http://support.microsoft.com/default.aspx?scid=kb;EN-US;290625

其中还提供了在 IIS 上建立和运行单向 SSL 连接的说明。

双向 SSL 的设置
设置和测试单向 SSL 后,请将您的客户端根 CA 导入到您的证书库。

IIS 配置 1

  • Ignore client certificates 将用于单向 SSL 连接。
  • Accept client certificates 表示如果将客户端证书提交给了服务器,则可以使用这些证书,但并不要求必须提交这些证书。
  • Require client certificates 表示必须提交客户端证书。否则,连接将会断开。
要导入客户端根 CA,请双击该文件,然后安装该 CA。此时便可建立双向 SSL 连接。

如何调试
IIS 服务器管理员常会遇到的一个问题是,对启用了 SSL 的网站进行配置和故障排除。为协助管理员的工作,Microsoft 设计了工具 SSL Diagnostics 来辅助管理员快速查明 IIS metabase、证书或证书库中的配置故障。使用该工具应该可以诊断出浏览器和 IIS 之间的 SSL 问题。

测试配置和排除故障
为确保这第一个步骤运行正常,请打开 Web 浏览器,访问 SunOne 服务器:

单向 SSL 设置
如果出现一个 Internet Explorer 窗口,询问您是否要信任该 CA,请回答“是”。正常情况下随后会建立连接,并显示与您设置 SSL 的网站关联的目录的内容。

如果此操作失败,请确认证书并未过期失效或损坏。

双向 SSL 设置
使用浏览器访问 IIS 网站页面时,正常情况下会建立 SSL 连接。

An HTTP 403.7 - Forbidden:Client certificate required - Internet Information Services 错误表示未提供客户端证书。

它还可能表示未指定正确的客户端根 CA 或所使用的浏览器没有正确的客户端证书。

配置 WebLogic Plugin 和 WebLogic Server 之间的 SSL 连接
WebLogic Plugin 只允许使用单向 SSL 与 WebLogic 实例进行连接。如果在 WebServer(前端)上设置了双向 SSL,则必须传播客户端证书。

在此配置中,假定您知道如何在 WebLogic Server 上设置 SSL。有关详细信息,请参考理解和探查 SSL 问题模式。

确认和准备
开始配置插件前的一项重要工作是,确认插件将连接到的 WebLogic 实例的配置是否正确。

要进行确认,请启动 WebLogic Server,并确保可以与浏览器连接。在 WLS 服务器的 SSL 配置中确认未强制要求提供客户端证书。您并不需要以这种方式强制实施客户端身份验证,至少在 SSL 握手级别不需要这样做。

使用浏览器通过 SSL(使用 https)请求一个页面,以确保连接工作正常。正常情况下会显示您的应用程序,否则会出现 404 错误(但这也仍然表明传输层工作正常)。正常情况下,浏览器右下角还会显示一个小锁  锁

要准备插件配置,请双击该锁,转到证书路径:
  • 选择根 CA(在顶部)
  • 显示根 CA
  • 展开该证书,然后使用 Coded Base 64 X509 选项将其复制到某个文件
  • 保存该文件,例如,保存到“MyWeblogicCAToTrust.cer”(同时也是一个 PEM 文件)

可考虑使用的插件参数
有关详细信息,请参考 http://e-docs.bea.com/wls/docs81/plugins/plugin_params.html#1143241 (English)。

参数
缺省值
说明
EnforceBasicConstraints
Strong
使用此参数可关闭 SSL 证书验证存在的一个安全漏洞,该漏洞表现为:具有无效 V3 CA 证书的证书链不会被正常拒绝。该漏洞使根 CA 证书有效但中间 CA 证书无效的证书链可以获得信任。X509 V3 CA 证书必须包含同时标志为 CA 和关键扩展的 BasicConstraints 扩展。此项检查可以防止非 CA 证书伪装成中间 CA 证书。
强制级别如下:
OFF 此级别完全禁用强制,不建议使用。正常情况下,使用 STRONG 缺省设置时,当前的大多数商业 CA 证书均可正常工作。
EnforceBasicConstraints=off
EnforceBasicConstraints=false

STRONG 缺省值。检查 V3 CA 证书的 BasicConstraints 并验证证书是否为 CA 证书。
EnforceBasicConstraints=strong
EnforceBasicConstraints=true

STRICT 此级别执行的检查与 STRONG 级别的相同,但它还额外严格强制执行 IETF RFC 2459,后者规定 CA 证书的 BasicConstraints 也必须标记为“critical”。未将此级别作为缺省设置是因为,当前的商用 CA 证书不符合 RFC 2459 的要求,未将 BasicConstraints 标记为“critical”。如果想严格遵从 RFC 2459 的规定,请设置此项。
EnforceBasicConstraints=strict
SecureProxy
OFF
将此参数设置为“ON”可为插件与 WebLogic Server 之间的所有通信启用 SSL 协议。在设置此参数前,请记得在相应 WebLogic Server 上配置供 SSL 协议使用的端口。
可在以下两个级别设置此参数:在主服务器配置级别及虚拟主机配置级别(如果设置了任何虚拟主机)。虚拟主机配置会继承主服务器配置中的 SSL 配置,前提是在虚拟主机配置中,该 SSL 配置未被覆盖。
TrustedCAFile
none
包含插件的受信任证书颁发机构的数字证书的文件的名称。如果将 SecureProxy 参数设置为“ON”,则必须设置此参数。该文件名必须包括文件的完整目录路径。
RequireSSLHostMatch
true
确定插件连接到的主机名是否必须与代理插件连接到的 WebLogic Server 的数字证书中的 Subject Distinguished Name 字段的内容相符。
SSLHostMatchOID
22
ASN.1 对象 ID (Object ID, OID)。标识对等数字证书的 Subject Distinguished Name 中的哪个字段用来执行主机匹配比较。此参数的缺省值与 Subject Distinguished Name 的 CommonName 字段的内容一致。
常用的 OID 值为:
  1. 姓 -OID 23
  2. 公用名 -OID 22
  3. 电子邮件 -OID 13
  4. 组织单位 -OID 30
  5. 组织 -OID 29L
  6. 位置 -OID 26

返回页首

配置 Apache 以在 WebLogic Plugin 和 WebLogic Server 之间建立 SSL 连接

如何配置
使用以下配置可通过 mySSLPort 端口连接到 WebLogic Server IP (myIP)。请注意,需要将此配置添加到 Apache 配置文件 (httpd.conf)。

SecureProxy - ON,强制应用服务器使用 https 协议
RequireSSLHostMatch - OFF,与出现 Subject Distinguished Name 不相符情况的示例中的设置相同
TrustedCAFile - 对配置非常重要,保存应用服务器的 CA

 <Location "/">
      SetHandler weblogic-handler
    </Location>

    <IfModule mod_weblogic.c>
        SetHandler weblogic-handler
        WebLogicHost myIP
        WebLogicPort mySSLPort

        SecureProxy ON
        TrustedCAFile /user/plugin/MyWeblogicCAToTrust.cer    
        RequireSSLHostMatch false


        Debug ALL
        WLLogFile /home2/support/smalbois/LogServer1-1.3.28.txt
    </IfModule>

警告: 如果使用的是 WebLogic 演示证书,则可能需要将 EnforceBasicConstraints 属性设置为“OFF”。

确认
要确认以上配置能够正常工作,请向 Apache 服务器发出一个请求,如:

备注: myweblogictestpage.html 是 WebLogic Server 上的一个测试页。

如果页面是通过 WebLogicPort(WLS 的 SSL 端口)显示,则表明标准配置工作正常。

还可以再执行一项操作来确保在浏览器之间设置的双向 SSL 能够正常工作。这项操作是,确认是否正确传播了客户端证书。

要进行此项确认,建议您安装 SnoopServlet.jsp。如果正确发送了客户端证书,SnoopServlet.jsp 会为您显示该证书。该证书将显示在“Certificate Information”部分。如果显示以下消息  

Not using SSL or client certificate not required.


则表明未传播客户端证书。您将无法使用客户端证书进行身份验证。

有关解决方法信息,请参考错误 3 - Client cert not exported to the backend WebLogic Server on Apache

返回页首
配置 Sun One / iPlanet 以在 WebLogic Plugin 和 WebLogic Server 之间建立 SSL 连接

如何配置
使用以下配置可通过 mySSLPort 端口连接到 WebLogic Server IP (myIP)。

   SecureProxy - ON,强制应用服务器使用 https 协议
   RequireSSLHostMatch - OFF,与出现“Subject Distinguished Name”不相符情况的示例中的设置相同
    TrustedCAFile - 对配置非常重要,保存应用服务器的 CA

需要将此配置添加到 SunOne 的 obj.conf 文件。

<Object name="weblogic" ppath="*/DefaultWebApp/*">
    Service fn=wl_proxy WebLogicHost="myIP" WebLogicPort="mySSLPort" SecureProxy="ON" Debug="ALL" WLLogFile="/home/support/IPlanet60SP5/server/logsupport.txt" TrustedCAFile="/home/support/IPlanet60SP5/TrustedCA.pem" RequireSSLHostMatch="true"
</Object>

确认
要确认以上配置能够正常工作,请向 iPlanet 服务器发出一个请求,如:


备注: myweblogictestpage.html 是 WebLogic Server 上的一个测试页。

还可以再执行一项操作来确保在浏览器之间设置的双向 SSL 能够正常工作。这项操作是,确认是否正确传播了客户端证书。

要进行此项确认,建议您安装 SnoopServlet.jsp。如果正确发送了客户端证书,SnoopServlet.jsp 会为您显示该证书。该证书将显示在“Certificate Information”部分。如果显示以下消息  

Not using SSL or client certificate not required.


则表明未传播客户端证书。您将无法使用客户端证书进行身份验证。

与 Apache 不同的是,并不需要将其它配置添加到 SunOne 服务器来将 WL-Proxy-Client-Cert 强制写入到 HTTP 报头。

这样一来,确保 WLS 读取该证书的检查工作就只剩选择 WebLogic Plug-In Enabled 这一项。如果安装了 WLS 8.1 Service Pack 2,可能会出现ERROR 6 - Failed to parse the client certificate in header:WL-Proxy-Client-Cert. Ignoring this certificate

返回页首

配置 Microsoft IIS 以在 WebLogic Plugin 和 WebLogic Server 之间建立 SSL 连接

如何配置
假定您知道如何配置不使用 SSL 的代理。有关详细信息,请参考 http://e-docs.bea.com/wls/docs81/plugins/isapi.html (English)。

my example 案例中的 iisproxy.ini 文件的内容类似于:

    WebLogicHost=myIP
    WebLogicPort=mySSLPort
    Debug=ALL
    SecureProxy=ON
    RequireSSLHostMatch=true
    TrustedCAFile=D:\IIS\TrustedCACerts\CAWLS.cer
    #Proxying by path
    WlForwardPath=/
    PathTrim=/
    WLLogFile=D:\IIS\Logs\WebServerSSL.log

这同样与前两个 Web 服务器配置相同:

   SecureProxy - ON,强制应用服务器使用 https 协议
   RequireSSLHostMatch - OFF,与出现“Subject Distinguished Name”不相符情况的示例中的设置相同
    TrustedCAFile - 对配置非常重要,保存应用服务器的 CA

确认
要确认以上配置能够正常工作,请向 iIIS 服务器发出一个请求,如:


备注:
myweblogictestpage.html 是 WebLogic Server 上的一个测试页。

如果页面是通过 WebLogicPort(WLS 的 SSL 端口)显示,则表明标准配置工作正常。如果有所疑虑,您可以检查 WLLofFile。

还可以再执行一项操作来确保在浏览器之间设置的双向 SSL 能够正常工作。这项操作是,确认是否正确传播了客户端证书。

要进行此项确认,建议您安装 SnoopServlet.jsp。如果正确发送了客户端证书,SnoopServlet.jsp 会为您显示该证书。该证书将显示在“Certificate Information”部分。如果显示以下消息  

Not using SSL or client certificate not required.


则表明未传播客户端证书。您将无法使用客户端证书进行身份验证。

不需要向 IIS 添加其它属性来强制它添加发送给 WebLogic Server 的 SSL WL-Proxy-Client-Cert 报头。

其它
有关日志的更多说明取决于所使用的 Plugin 版本。

[WL-Proxy-Client-Keysize]=[128] 有何含义?
设置此项的目的是让 WLS 知道客户端浏览器是否支持可导出密码强度或内部密码强度。出于安全原因,在 WebLogic 级别对它们进行控制可能有重要意义。

[WL-Proxy-Client-Secretkeysize]=[128] 有何含义?
WL-Proxy-Client-Secretkeysize 代表加密的位数

返回页首

WebLogic Plugin 和 SSL 故障排除

开始排除插件和 WebLogic Server 间的 SSL 握手故障前,需要启用对插件和 WLS Server 的调试功能。在插件上,您需要执行以下操作:

Debug ALL
WLLogFile /user/plugin/mylog.txt


重新启动 Apache Server,重现故障,然后分析日志。正常情况下,可以从日志中查明故障。

ERROR 1 - Plaintext data for  protocol HTTP was received from peer
(见于 Apache、iPlanet 和 IIS)

<4 juin 2004 15 h 48 CEST> <Warning> <Security> <BEA-090475> <Plaintext data for protocol HTTP was received from peer 172.23.135.56 - 172.23.135.56 instead of an SSL handshake.>

解决办法
未告知插件您想进行 SSL 通信。向插件配置添加 SecureProxy ON
ERROR 2 - Host (XXXXX) doesn't match (YYYYY)
(见于 Apache 和 iPlanet)

Fri Jun  4 15:51:48 2004 INFO: Host (penelope) doesn't match (88.123.15.201), validation failed
Fri Jun  4 15:51:48 2004 INFO: DeleteSessionCallback
Fri Jun  4 15:51:48 2004 ERROR: SSLWrite failed
Fri Jun  4 15:51:48 2004 SEND failed (ret=-1) at 729 of file ../nsapi/URL.cpp
Fri Jun  4 15:51:48 2004 *******Exception type [WRITE_ERROR_TO_SERVER] raised at line 730 of ../nsapi/URL.cpp
Fri Jun  4 15:51:48 2004 Marking 172.23.135.201:6152 as bad
Fri Jun  4 15:51:48 2004 got exception in sendRequest phase: WRITE_ERROR_TO_SERVER [os error=0,  line 730 of ../nsapi/URL.cpp]:  at line 2458

解决办法
需要将 RequireSSLHostMatch 指定为 false 或确保 WebLogicHost 中的计算机名称为 DNS 名称,而非 IP 地址。如果您使用缺省的 SSLHostMatchOID,则该 DNS 仍需与证书的 CommonName 相符。正常情况下,其显示类似于:

Fri Jun  4 17:15:48 2004 INFO:Certificate validation succeeded

ERROR 3 - Client cert not exported to the backend WebLogic Server on Apache
(见于所有插件)

我想将自己的客户端证书传播到 WebLogic。我已在浏览器和 WebLogic Server 间设置了双向 SSL,在插件和 WLS 间设置了 SSL,但不能正常工作。

解决办法
需要做的第一项工作是确认 SSLExportClientCertificates 已添加到 Apache 配置文件中。如果设置了 Debug ALL 选项,您应该能够看到与以下类似的信息

Fri Jun  4 17:15:48 2004 Hdrs to WLS:[WL-Proxy-Client-Cert]=[some PEM format certificate]

如果正在将该文件发送到 WLS,则除此之外,您还需要在 WebLogic Server 上进行以下确认:

“Server - Configuration”选项卡中的 Client Cert Proxy Enabled 应处于选中状态。

这样 WLS 才能拾取报头 WL-Proxy-Client-Cert 并使用它。

有关详细信息,请参考 http://e-docs.bea.com/wls/docs81/config_xml/Cluster.html (English)。

属性
说明
取值范围及缺省值
ClientCertProxyEnabled
如果设置为 true,将使代理服务器插件将身份证书从客户端传递到部署在群集中所有服务器实例上的所有 Web 应用程序。
代理服务器插件会对 WL-Proxy-Client-Cert 中的每个身份证书编码
如果您设置为 true,请使用 weblogic.security.net.ConnectionFilter 来确保每个 WebLogic Server 实例只接受来自运行代理服务器插件的计算机的连接请求。如果设置为 true,但不使用连接过滤器,就会产生潜在的安全漏洞,因为如果将 WL-Proxy-Client-Cert
的值设置为 true,该值会覆盖群集内每个服务器实例使用 ServerMBean#setClientCertProxyEnabled(boolean) 设置的值。
缺省情况下(或如果设置为 false):
拾取报头,并将其传递给 WebLogic Server 实例。由于每个 WebLogic Server 实例都相信该报头来自安全来源,因此均会从该报头获取证书信息,并使用该信息对用户进行身份验证。报头有遭到欺骗的可能。
  • 每个服务器实例都可以决定其应用程序是否信任从代理服务器插件发送来的证书。 
  • 如果服务器实例不为其 ClientCertProxyEnabled 属性设置值(或将其设置为 false),则每个 Web 应用程序的 weblogic.xml 部署描述符将决定该 Web 应用程序是否信任从代理服务器插件发送来的证书。
  • 缺省情况下(或如果部署描述符设置为 false),用户不能从代理服务器插件登录到 Web 应用程序。
管理控制台字段标签:
缺省值:false
安全值:
Client Cert Proxy Enabled false

Two Way Client Cert Behavior:Client certs not Requested in the Server -“Keystores & SSL”选项卡。
WLS 和插件之间没有双向 SSL,因此必须禁用此选项。

要测试解决办法,请使用 WebLogic 附带的 SnoopServlet.jsp 示例。确保调用时能够正常显示证书信息。

ERROR 4 - SSL certificate chain validation failed:3015
(见于 iPlanet)

Mon Jun  7 16:46:32 2004 INFO: SSL certificate chain validation failed: 3015
Mon Jun  7 16:46:32 2004     trusted certs = 0
Mon Jun  7 16:46:32 2004      dumping cert chain
Mon Jun  7 16:46:32 2004         commonName is smalbois01
Mon Jun  7 16:46:32 2004 INFO: DeleteSessionCallback
Mon Jun  7 16:46:32 2004 ERROR: SSLWrite failed
Mon Jun  7 16:46:32 2004 SEND failed (ret=-1) at 719 of file URL.cpp
Mon Jun  7 16:46:32 2004 *******Exception type [WRITE_ERROR_TO_SERVER] raised at line 720 of URL.cpp

解决办法
确认 TrustedCAFile 中的文件是否正确。如果将错误的受信任 CA 连接到 WLS,就会产生此异常。要从 WLS 获得受信任 CA,请使用 Web 浏览器,直接通过 https 端口连接到 WLS。进入 WLS 页面后:
  • 正常情况下,Internet 浏览器右下角会显示一个小锁 锁
  • 双击该锁 锁,转到证书路径。
  • 选择根 CA(在顶部)
  • 显示根 CA
  • 展开该证书,然后使用 Coded Base 64 X409 选项将其复制到某个文件。
  • 保存 PEM 编码文件,并令“TrustedCAFile”选项使用该文件。
ERROR 5 - Do I need a 128 bits encryption plugin?

BEA 提供的插件有 2 个版本:一种不支持 128 位加密,另一种支持 128 位加密。

如果您想了解是否需要 128 位加密,建议您使用 Web 浏览器连接到您想通过 SSL 端口连接到的 WebLogic Server。

执行此操作后,请确认是否出现锁 锁,并检查其显示的加密位数是 128 还是少于 128。如果是 128 位,请使用支持 128 位连接的 BEA 插件。否则,请不要使用。

ERROR 6 - Failed to parse the client certificate in header:WL-Proxy-Client-Cert. Ignoring this certificate.

传播客户端证书时,可能会出现以下问题:

<7 juin 2004 18 h 11 CEST> <Error> <HTTP> <BEA-101257> <Failed to parse the client certificate in header: WL-Proxy-Client-Cert. Ignoring this certificate.
java.security.cert.CertificateException
        at sun.security.provider.X509Factory.engineGenerateCertificate(X509Factory.
java:97)
        at java.security.cert.CertificateFactory.generateCertificate(CertificateFactory.
java:389)
        at weblogic.servlet.internal.ServletRequestImpl.setClientCertProxy
(ServletRequestImpl.java:301)
        at weblogic.servlet.internal.ServletRequestImpl.setContext
(ServletRequestImpl.java:205)
        at weblogic.servlet.internal.MuxableSocketHTTP.dispatch
(MuxableSocketHTTP.java:460)
        at weblogic.socket.SSLFilter.dispatch(SSLFilter.java:281)
        at weblogic.socket.MuxableSocketDiscriminator.dispatch
(MuxableSocketDiscriminator.java:284)
        at weblogic.socket.SSLFilter.dispatch(SSLFilter.java:281)
        at weblogic.socket.NTSocketMuxer.processSockets(NTSocketMuxer.java:105)
        at weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:32)
        at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
        at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
>

解决办法
这是 WLS 8.1 Service Pack 2 的一个已知问题。该问题在 8.1 SP3 中已得到修复

ERROR 7 - HTTP 403.7 - Forbidden:Client certificate required - Internet Information Services

IIS givesa HTTP 403.7 - Forbidden:Client certificate required - Internet Information Services 错误。

解决办法
这表示未提供客户端证书(所使用的浏览器没有正确的客户端证书)或未指定正确的客户端根 CA。

返回页首

需要更多帮助?

如果您已经理解这个模式,但仍需要更多帮助,您可以:
  1. http://support.bea.com/ 上查询 AskBEA(例如,使用“SSL and plugin”),以查找其它已发布的解决办法。
  2. http://forums.bea.com/bea/ 上,向 BEA 的某个新闻组提出更详细具体的问题。 
如果这还不能解决您的问题,并且您拥有有效的技术支持合同,您可以通过登录以下网站来打开支持案例:http://support.bea.com/

反馈

请给我们提供您的意见,说明此支持诊断模式 SSL 和插件一文是否有所帮助、您需要的任何解释,以及对支持诊断模式的新主题的任何要求。


免责声明:

依据 BEA 与您签署的维护和支持协议条款,BEA Systems, Inc. 在本网站上提供技术技巧和补丁供您使用。虽然您可以将这些信息和代码与您获得 BEA 授权的软件一起使用,但 BEA 并不对所提供的技术技巧和补丁做任何形式的担保,无论是明确的还是隐含的。

本文档中引用的任何商标是其各自所有者的财产。有关完整的商标信息,请参考您的产品手册。