私钥、数字证书和可信证书颁发机构可建立和验证服务器标识和信任。
SSL 使用公钥加密技术进行身份验证。使用公钥加密时,将为一台服务器生成一个公钥和一个私钥。对于用公钥加密的数据,只能用相应的私钥解密;对于用私钥加密的数据,只能用相应的公钥解密。私钥受到妥善的保护,确保只有私钥的所有者才能解密用公钥加密的消息。
公钥嵌入一个数字证书中,同时嵌入的还有描述公钥所有者的其他信息,如姓名、街道地址和电子邮件地址。私钥和数字证书可为服务器提供标识。
嵌入数字证书中的数据由证书颁发机构进行验证,并由证书颁发机构的数字证书进行数字签名。众所周知的证书颁发机构包括 Verisign 和 Entrust.net。可信证书颁发机构(Certificate Authority,简称 CA)证书可为证书建立信任。
参与 SSL 连接的应用程序在其他方评估和接受此应用程序的数字证书时得到身份验证。Web 浏览器、服务器及其他 SSL 启用的应用程序通常会接受由可信的证书颁发机构签名并且有效的任何数字证书。例如,由于数字证书本身已过期或证书颁发机构用于对此签名的数字证书已过期,则数字证书可能失效。如果服务器的数字证书中的主机名与客户端指定的 URL 不符,则表示服务器证书可能失效。
配置标识和信任:主要步骤
-
keytool
实用工具,或著名的供应商如 Entrust 或 Verisign 处获取数字证书、私钥和可信 CA 证书。也可使用由 WebLogic Server 工具包提供的数字证书、私钥和可信 CA 证书。只应将演示数字证书、私钥和可信 CA 证书用在开发环境中。 -
注意: 首选的密钥库格式为 JKS(Java 密钥库)。WebLogic Server 支持将私钥和可信 CA 证书存储在文件或 WebLogic 密钥库提供程序中,仅仅是为了满足向后兼容的目的。 -
标识和信任的受支持格式
保密邮件(Privacy Enhanced Mail,简称 PEM)格式是私钥、数字证书和可信证书颁发机构(Certificate Authorities,简称 CA)的首选格式。首选的密钥库格式为 Java 密钥库(Java KeyStore,简称 JKS)格式。
.pem
格式的文件可支持多种数字证书(如可包含证书链)。证书在文件中的顺序非常重要。服务器的数字证书应为文件中的第一个数字证书,其后是发行方证书,等等。链中的每个证书后都跟有其发行方证书。如果链中最后一个证书为链的自签名(自发行)根证书,则将此链视为完整的链。请注意,链并不一定是完整的。
在使用不赞成的基于文件的私钥、数字证书和可信 CA 时,WebLogic Server 可使用 PEM 或识别编码规则(Distinguished Encoding Rules,简称 DER)格式的数字证书。
.der
格式的文件包含了单个证书的二进制数据。因此,一个 .der
文件仅可用于单个证书,而一个 .pem
文件可用于多个证书。
Microsoft 是常用的证书颁发机构。Microsoft 发行的可信 CA 证书采用 p7b 格式,必须将其转换为 PEM 格式才能在 WebLogic Server 中使用。有关详细信息,请参阅将 Microsoft p7b 格式转换为 PEM 格式。
私钥文件(即不存储在密钥库中的私钥)必须采用 PKCS#5/PKCS#8 PEM 格式。
还可以将使用其他 WebLogic Server 版本的私钥和数字证书与此 WebLogic Server 版本一起使用。将私钥和数字证书从识别编码规则 (DER) 格式转换为保密邮件 (PEM) 格式。有关详细信息,请参阅“WebLogic Server 命令参考”中的“使用 WebLogic Server Java 实用工具”中有关 der2pem 实用工具的描述。
转换文件后,确保数字证书文件具有
-----BEGIN CERTIFICATE-----
头信息和 -----END CERTIFICATE-----
尾信息。否则,数字证书将无效。
注意: | OpenSSL 可以为其生成的 PEM 证书添加头信息。为了在 WebLogic Server 中使用这样的证书,应删除证书中“-----BEGIN CERTIFICATE----- ”之前的所有内容,使用文本编辑器可执行此操作。 |
获取私钥、数字证书和可信证书颁发机构
服务器需要一个私钥、一个包含匹配的公钥的数字证书以及一个至少用于一个可信证书颁发机构的证书。WebLogic Server 支持来自以下来源的私钥、数字证书和可信 CA 证书:
WL_HOME\
server\lib
目录和JAVA_HOME
\jre\lib\security
目录中的演示数字证书、私钥和可信 CA 证书。keytool
实用工具也可用于生成私钥、WebLogic Server 自签名的数字证书以及证书签名请求(Certificate Signing Request,简称 CSR)。-
-
-
有关 Sun 的keytoo
l 实用工具的详细信息,请参阅位于 http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/keytool.html 的“keytool-Key and Certificate Management Tool”描述。注意: 使用 keytool 实用工具时,默认的密钥对生成算法为数字签名算法(Digital Signature Algorithm,简称 DSA)。WebLogic Server 不支持 DSA。在使用 WebLogic Server 时,应指定其他的密钥对生成和签名算法。
-
注意: | 不赞成使用证书请求生成器 Servlet。请用 Sun Microsystems 的 keytool 实用工具替换证书请求生成器 Servlet。有关 keytool 的详细信息,请参阅常用 Keytool 命令。 |
常用 Keytool 命令
表 10-1 列出了在使用 WebLogic Server 创建和使用 JKS 密钥库时所用的 keytool
命令。
注意: | keytool 实用工具是 Sun Microsystems 的产品。因此,BEA Systems 不提供有关此实用工具的完整文档。有关详细信息,请参阅位于 http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/keytool.html的“keytool-Key and Certificate Management Tool”描述。 |
使用 CertGen 实用工具
注意: | 对于 CertGen 实用工具生成的数字证书和私钥,只应将其用于演示和测试目的,不应用于生产环境。 |
CertGen 实用工具提供了为发行所生成的证书而指定 CA 证书和密钥的命令行选项。(仅在默认情况下) CertGen 实用工具生成的数字证书将生成证书时所在的计算机的主机名作为其通用名字段 (cn
) 的值。使用命令行选项可指定 cn
及其他主题域名 (DN) 字段的值,如 orgunit
、organization
、locality
、state
和 countrycode
。
CertGen 实用工具可生成 PEM 和 DER 格式的公共证书和私钥文件。在 Windows 中,双击 .der
文件可查看生成的数字证书的详细信息。在启动 WebLogic Server 或在客户端使用数字证书时可使用.pem
文件。
默认情况下,CertGen
实用工具使用以下演示数字证书和私钥文件:CertGenCA.der
和 CertGenCAKey.der
。CertGen 会在当前目录或 WL_HOME
/server/lib
目录中查找这些文件,weblogic.home
系统属性或CLASSPATH
中对查找目录的位置进行了指定。如果要使用这些文件,您不需要在命令行中指定 CA 文件。也可以在命令行中指定 CA 文件。
有关 CertGen
实用工具的语法和参数的详细信息,请参阅“WebLogic Server 命令参考”中的 CertGen。
有关使用 CertGen
实用工具生成证书和私钥以及使用 ImportPrivateKey
实用工具创建密钥库并存储私钥的示例,请参阅“WebLogic Server 命令参考”中的 ImportPrivateKey。
注意: | 如果不使用 -cn 选项明确指定主机名,CertGen 将使用 JDK InetAddress.getHostname() 方法来获得它置于主题通用名中的主机名。getHostName() 方法在不同的平台上会有不同的结果。在某些平台上(如 Solaris),它会返回一个全限定域名(Fully Qualified Domain Name,简称 FQDN),而在其他平台上(如 Windows NT),则返回一个短主机名。在 Solaris 上,InetAddress.getHostname() 的结果取决于/etc/nsswitch.conf 文件中对主机项的配置。 |
注意: | 如果 WebLogic Server 充当客户端(并且默认启用了主机名验证),则需要确保在 URL 中指定的主机名与服务器证书中的主题通用名相符。否则由于主机名不符,连接将失败。 |
使用自己的证书颁发机构
很多公司都作为其自身的证书颁发机构。要在 WebLogic Server 中使用可信CA证书,请执行下列操作:
-
-
der2pem
实用工具对其进行转换。 -
-
-
-
-
-
将 Microsoft p7b 格式转换为 PEM 格式
WebLogic Server 不能使用由 Microsoft 发行的数字证书的格式 (p7b
)。以下示例可在 Windows XP 上将 p7b
(PKCS#7) 格式的数字证书转换为 PEM 格式:
注意: | 此向导会向输出文件追加一个 .cer 扩展名,.cer 扩展名是追加在 Base 64 编码的证书和 DER 证书后的通用扩展名。退出此向导后,可将此扩展名更改为 .pem 。 |
注意: | 对于包含证书链的 p7b 证书文件,需要将发行方 PEM 数字证书连接到此证书文件。WebLogic Server 可使用生成的证书文件。 |
从 Web 浏览器获取数字证书
低安全性的浏览器证书极易获得,可从 Web 浏览器中获取,通常可选择“选项”或“首选项”中的“安全”菜单项。转到“个人证书”项并请求获取新的数字证书。将询问一些有关您自己的信息。
您收到的数字证书包含有公共信息(包含您的姓名和公钥)和一些希望由第三方进行身份验证的其他信息,如您的电子邮件地址。稍后在请求身份验证时,您将提供此数字证书。
在获取数字证书的过程中,Web 浏览器会生成一个公钥-私钥对。私钥仍应保密。它存储在本地文件系统中,并且始终不得离开 Web 浏览器所在的计算机,以确保获取数字证书的过程本身是安全的。在某些浏览器中,可用密码对私钥进行加密,不对密码进行存储。在加密私钥时,Web 浏览器在每次会话中至少会向您询问一次密码。
注意: | 从 Web 浏览器获取的数字证书在其他类型的 Web 浏览器中或在相同 Web 浏览器的不同版本上无法工作。 |
使用证书链(不赞成)
注意: | 不赞成使用基于文件的证书链。现在,整个证书链已导入到密钥库中。本部分中的步骤只是为了向后兼容而提供的。 |
要在 WebLogic Server 中使用证书链,请执行下列操作:
清单 10-1 显示了一个示例证书链。
-----BEGIN CERTIFICATE-----
MIICyzCCAjSgAwIBAgIBLDANBgkqhkiG9w0BAQQFADCBtjELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xFTATBgNVBAoTDEJFQSBXZWJMb2dpYzERMA8GA1UECxMIU2VjdXJpdHkxLzAtBgNVBAMTJkRlbW8gQ2VydGlmaWNhdGUgQXV0aG9yaXR5IENvbnN0cmFpbnRzMR8wHQYJKoZIhvcNAQkBFhBzZWN1cml0eUBiZWEuY29tMB4XDTAyMTEwMTIwMDIxMloXDTA2MTAxNTIwMDIxMlowgZ8xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRUwEwYDVQQKEwxCRUEgV2ViTG9naWMxETAPBgNVBAsTCFNlY3VyaXR5MRkwFwYDVQQDExB3ZWJsb2dpYy5iZWEuY29tMR4wHAYJKoZIhvcNAQkBFg9zdXBwb3J0QGJlYS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMJX8nKUgsFej8pEu/1IVcHUkwY0c2JbBzOryu3sce4QjX+rGxiCjoPm2MY=yts2BvonuJ6CztdZf8B/LBEWCz+qRrtdFn9mKSZWGvrAkmMPz2RhXEOThpoRo5kZz2FQ9XF/PxIJXTYCM7yooRBwXoKYjquRwiZNtUiU9kYi6Z3prAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAh2eqQGxEMUnNTwEUD
0tBq+7YuAkjecEocGXvi2G4YSoWVLgnVzJoJuds3c35KE6sxBe1luJQuQkE9SzALG/6lDIJ5ctPsHFmZzZxY7scLl6hWj5ON8oN2YTh5Jo/ryqjvnZvqiNIWe/gqr2GLIkajC0mz4un1LiYORPig3fBMH0=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIC+jCCAmOgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBtjELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xFTATBgNVBAoTDEJFQSBXZWJMb2dpYzERMA8GA1UECxMIU2VjdXJpdHkxLzAtBgNVBAMTJkRlbW8gQ2VydGlmaWNhdGUgQXV0aG9yaXR5IENvbnN0cmFpbnRzMR8wHQYJKoZIhvcNAQkBFhBzZWN1cml0eUBiZWEuY29tMB4XDTAyMTEwMTIwMDIxMVoXDTA2MTAxNjIwMDIxMVowgbYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRUwEwYDVQQKEwxCRUEgV2ViTG9naWMxETAPBgNVBAsTCFNlY3VyaXR5MS8wLQYDVQQDEyZEZW1vIENlcnRpZmljYXRlIEF1dGhvcml0eSBDb25zdHJhaW50czEfMB0GCSqGSIb3DQEJARYQc2VjdXJpdHlAYmVhLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA3ynD8l5JfLob4g6d94dNtI0Eep6QNl9bblmswnrjIYz1BVjjRjNVal9fRs+8jvm85kIWlerKzIMJgiNsj50WlXzNX6orszggSsW15pqV0aYE9Re9K
CNNnORlsLjmRhuVxg9rJFEtjHMjrSYr2IDFhcdwPgIt0meWEVnKNObSFYcCAwEAAaMWMBQwEgYDVR0TAQH/BAgwBgEB/wIBATANBgkqhkiG9w0BAQQFAAOBgQBS+0oqWxGyqbZO028zf9tQT2RKojfuwywrDoGW96Un5IqpFnBHIu5atliJo3OUpiH18KkwLN8DVP/3t3K3O3kXdIuLbqAL0i5xyBlAhr7gE5eVhIyeMg7ETBPLyGO2BF13Y24LlsO+MX9jW7fxMraPN608QeJXkZw0E0cGwrw2AQ==
-----END CERTIFICATE-----
存储私钥、数字证书和可信证书颁发机构
获取了私钥、数字证书及可信 CA 证书后,需要将其存储以便 WebLogic Server 能够使用它们来查找和验证标识。私钥和其关联的数字证书以及可信 CA 证书都存储在密钥库中。通过 WebLogic Server 管理控制台,或者通过在命令行中指定,均可对密钥库进行配置。使用 WebLogic Server 管理控制台中的“配置”>“密钥库”页配置 WebLogic Server 的标识和信任密钥库。请参阅“管理控制台联机帮助”中的配置密钥库。
为向后兼容,私钥和可信 CA 证书可存储在文件中,或存储在通过 WebLogic 密钥库提供程序访问的 JKS 密钥库中。除此以外,可信 CA 证书还可以存储在 JKS 密钥库中。使用 WebLogic Server 管理控制台的“配置”>“SSL”页,可指定在使用文件或通过 WebLogic 密钥库提供程序访问的 JKS 密钥库时的标识和信任选项。
使用密钥库的指导
在配置 SSL 时,必须确定标识和信任的存储方式。尽管标识和信任可共用一个密钥库,但 BEA 建议为标识和信任分别使用独立的密钥库,原因是标识密钥库(私钥/数字证书对)和信任密钥库(可信 CA 证书)可能会有不同的安全要求。例如:
总的来说,同一域中的系统具有相同的信任规则(使用同一组可信 CA),而它们所具有的标识却可能是按每个服务器规定的。标识要求一个私钥,不应将私钥在系统间复制。因此,应为每个系统维护独立的标识密钥库,每个密钥库应仅包含该系统所需要的服务器标识。但是,可在系统间复制信任密钥库,这使得标准化信任规则变得很容易。
标识更有可能存储在硬件密钥库中,如 nCipher。信任可存储在基于文件的 JDK 密钥库中而不会有任何安全问题,原因是信任库只包含证书,而不包含私钥。
创建密钥库并将私钥和可信证书颁发机构加载到密钥库中
使用密钥库的目的是实现私钥/数字证书对和可信 CA 证书的安全存储和管理。使用以下机制可创建密钥库并将私钥和可信 CA 证书加载到密钥库中:
ImportPrivateKey
实用工具。使用ImportPrivateKey
实用工具可拾取私钥和数字证书文件并将其加载到密钥库中。有关详细信息,请参阅“WebLogic Server 命令参考”中的 ImportPrivateKey。keytool
实用工具。使用keytool
实用工具可生成私钥/数字证书对并将已签名的私钥导入密钥库中。有关详细信息,请参阅 WebLogic Server 如何定位信任。虽然使用keytool
实用工具可以生成新的私钥和数字证书并将它们添加到密钥库中,但此实用工具并不允许从文件中拾取现有的私钥并将其导入密钥库中。应改用 WebLogicImportPrivateKey
实用工具。注意: keytool
实用工具不允许将可信 CA 证书从文件中导入至密钥库中。
WebLogic Server 通过唯一的别名对密钥库中的所有私钥项进行访问。在将私钥加载到密钥库中时可指定别名。别名区分大小写;别名 Hugo
和 hugo
指的是同一密钥库项。私钥的别名是在 WebLogic Server 管理控制台的“配置”>“SSL”页的“私钥别名”字段中指定的。尽管 WebLogic Server 在访问可信 CA 证书时并不使用别名,但密钥库在将可信 CA 证书加载到密钥库时确实要求使用别名。
密钥库中由 WebLogic Server 识别为可信的所有证书颁发机构都为可信。
WebLogic Server 如何定位信任
WebLogic Server 在加载其可信 CA 证书时使用以下算法:
-
-Dweblogic.security.SSL.trustedCAkeystore
命令行参数指定的,则将从密钥库加载可信 CA 证书。 -
config.xml
) 中指定的,则将从指定的密钥库加载可信 CA 证书。如果服务器是用 DemoTrust 配置的,将从WL_HOME\server\lib\DemoTrust.jks
和 JDKcacerts
密钥库加载可信 CA 证书。 -
config.xml
) 中指定的,则将从此文件加载可信 CA 证书(这仅仅是为了与 6.x SSL 配置兼容)。 -
WL_HOME\server\lib\cacerts
密钥库加载可信 CA 证书。
配置用于生产环境的密钥库
默认情况下,WebLogic Server 配置有两个密钥库:
这些密钥库位于 WL_HOME
\server\lib
目录中。对于测试和开发来说,密钥库配置是完全的。但是,请不要在生产环境中使用此演示密钥库。由于演示密钥库中的数字证书和可信 CA 证书是由 WebLogic Server 演示证书颁发机构签名的,所以使用演示密钥库的 WebLogic Server 安装将信任任何同样使用演示密钥库的 WebLogic Server 安装。需要创建只在您的安装之间互相信任的安全环境。
也可以使用 WebLogic 脚本工具或 Java 管理扩展(Java Management Extensions,简称 JMX)API 创建新的安全配置。有关详细信息,请参阅 WebLogic 脚本工具和使用 JMX 开发自定义管理实用工具手册。
配置 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:主要步骤
-
keytool
实用工具或诸如 Entrust 或 Verisign 之类的著名供应商提供的数字证书、私钥和可信 CA 证书。 -
注意: 此版本的 WebLogic Server 支持存储在文件或 WebLogic 密钥库提供程序中的私钥和可信 CA 证书,只是出于向后兼容目的。 -
-
注意: | 启动 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 是指定 localhost
、127.0.01
还是本地计算机的默认 IP 地址。
启用 SSL 调试
SSL 调试提供有关 SSL 握手期间发生的 SSL 事件的更为详细的信息。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 调试。
注意: | 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 会话。
使用 SSL 配置 IIOP 上的 RMI
使用 SSL 可以保护到远程方法调用(Remote Method Invocation,简称 RMI)远程对象的互联网内部对象请求代理协议(Internet Interop-Orb-Protocol,简称 IIOP)连接。SSL 通过身份验证确保连接的安全并对对象间交换的数据进行加密。
要使用 SSL 保护 IIOP 连接上的 RMI,请执行下列操作:
-
-
-
host2ior
实用工具将 WebLogic Server IOR 打印到控制台。host2ior
实用工具打印两个版本的可互操作对象引用(interoperable object reference,简称 IOR),一个用于 SSL 连接,另一个用于非 SSL 连接。IOR 的头信息指定是否可以将 IOR 用于 SSL 连接。 -
有关在 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 描述了该命令行参数的选项。
接受证书中的证书策略
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 -filepemcertificatefilename
java utils.ValidateCertChain -pempemcertificatefilename
java utils.ValidateCertChain -pkcs12storepkcs12storefilename
java utils.ValidateCertChain -pkcs12filepkcs12filename
password
java utils.ValidateCertChain -jksalias
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 时,此验证将:
可以使用证书查找和验证(Certificate Lookup and Validation,简称 CLV)提供程序对证书链执行额外的验证。在此版本中,WebLogic Server 新增了两个 CLV 提供程序:
另外,还可以编写自定义 CertPathValidator 来提供对证书链的额外验证。请参阅“开发 WebLogic Server 的安全提供程序”中的 CertPath 提供程序。
WebLogic Server 中的 SSL 证书验证如何工作
WebLogic Server 实例中的出站 SSL 和双向入站 SSL 接收 SSL 握手期间必须已通过验证的证书链。一个双向入站 SSL 的示例是:通过 HTTPS 连接到 Web 应用程序的浏览器,其中浏览器向 Web 应用程序发送客户端的证书链。此入站证书验证设置可用于服务器中的所有双向客户端证书验证。
使用出站 SSL 的 WebLogic Server(即充当 SSL 客户端)的示例包括:
通过管理控制台或 WLST,可以使用下列 SSLMBean
特性独立配置入站和出站 SSL 证书验证:InboundCertificateValidation
和 OutboundCertificateValidation
。
对证书验证问题进行故障排除
如果在以前版本的 WebLogic Server 中运行正常的 SSL 通信开始出现意外失败,则可能的问题是证书链未能通过验证。
确定证书链中受到拒绝的位置,然后决定是将该证书链更新为将被接受的证书链,还是更改 -Dweblogic.security.SSL.enforceConstraints
命令行参数的设置。
在 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 提供程序:
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 许可证来启用输出或内部强加密。
-
-
-
java.security
),以将 nCipher JCE 提供程序添加到 WebLogic Server 批准的 JCE 提供程序列表中。该 Java 安全性属性文件位于:JAVA_HOME/jre/lib/security/java.security
security.provider.
n
=com.ncipher.provider.km.mCipherKM
n
指定当未请求特定的提供程序时,用于确定在提供程序中搜索所请求的算法的首选顺序。顺序为从 1开始,1 是最优先的顺序,2 次之,依此类推。在安全性属性文件中,nCipher JCE 提供程序必须位于 RSA JCA 提供程序之后。例如:security.provider.1=sun.security.provider.Sun
-
-
指定 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 连接: