Liberty 中的 SSL 缺省值
在 Liberty 中指定缺省 SSL 证书、密钥库和配置。
缺省证书和密钥库
作为帮助开发者启动和运行的便利工具,用户可在 securityUtility 命令中使用 createSSLCertificate 参数来创建自签名证书。用户可直接从命令行调用该工具,或让服务器在启动时调用该工具来创建缺省证书和密钥库。
<keyStore id="defaultKeyStore" password="yourPassword" />
如果服务器启动时 defaultKeyStore 的密钥库配置已就位但密钥库不存在,那么服务器将调用 createSSLCertificate 参数。此参数将使用该配置中指定的密码创建密钥库。
- 位置:此密钥库文件名为 key.jks 并且在服务器或客户机 resources/security 目录中。
- 密钥库类型:此密钥库类型为 JKS。
- 密码:配置中提供的密码。
- 类型:此证书为自签名证书。
- 大小:缺省证书大小为 2048。
- 签名算法:证书的签名算法为 SHA256WITHRSA。
- 有效性:证书有效期为 365 天。
- SubjectDN:证书是使用 CN=<hostname>,OU=<client or server name>,O=ibm,C=US as the SubjectDN 创建的。
如果用户要定制证书,那么可在命令行上调用 createSSLCertificate 参数。
缺省 SSL 配置
SSL 所需的最低配置是一个名为 defaultKeyStore 的密钥库元素。如果配置中存在 defaultKeyStore,那么运行时将为其构建名为 defaultSSLConfig 的 SSL 配置。
defaultSSLConfig 详细信息:
- 协议:如果使用 IBM® JRE,那么缺省情况下协议将设置为 SSL_TLSv2。如果使用 Oracle JRE,那么会将 SSL 用作协议。
- 密码:密码列表是通过从底层 JRE 获取受支持密码列表构建的。缺省情况下,此列表减少为不低于 128 位或为 3DES 的所有密钥。RC4 已被移除,因为将其启用是不安全的。ECDHE 密码已被移除,因为在您访问不支持它们的服务器时,它们可能导致错误。可定制密码列表以包含这些密码。
- 客户机认证:缺省情况下,clientAuthentication 和 clientAuthenticationSupported 被禁用。
- 密钥库:在缺省配置中,defaultKeyStore 同时用作密钥和信任库。
可在 server.xml 文件中输入名为 defaultSSLConfig 的 SSL 元素以定制 SSL 配置属性。名为 defaultSSLConfig 的定制 ssl 元素仍被视为缺省 SSL 配置,只要另一 SSL 配置未被标识为缺省值。有关更多信息,请参阅 SSL 配置属性。
<sslDefault sslRef="customSSLConfiguration" />
(transportSecurity-1.0) 和 (ssl-1.0) 都是安全性处理行为。在 FP17.0.0.1 及更高版本中,transportSecurity-1.0
行为将取代 ssl-1.0 行为。使用 transportSecurity-1.0
行为以使用 SSL 选项进行出站连接。如果安全配置未包括用于出站连接的选项,那么可继续使用 ssl-1.0 行为。
- (transportSecurity-1.0) 行为
启用 transportSecurity-1.0 功能部件时,出站 SSL 选项变为可用。可使用 sslDefault 元素上的 outboundSSLRef 属性来设置出站缺省值,或在 SSL 配置上设置 SSL 过滤器以允许进行动态出站连接。此过滤器包含主机或主机和端口组合。根据出站连接的主机和端口,出站连接可与 SSL 配置匹配。
启用 transportSecurity-1.0 功能部件时,SSL 运行时代码不会设置 SSLContext 进程缺省值。此 SSL 运行时代码使用 ssl.SocketFactory.provider Java™ 安全性属性设置定制 SSLSocketFactory 类。SSLContext 进程缺省值是对密钥和信任使用 cacerts 文件的 SSLContext Java 安全套接字扩展 (JSSE) 缺省值。
此程序对尝试使用 javax.net.ssl.SSLSocketFactory.getDefault() 属性获取 SSLSocketFactory 类缺省值的任何代码返回 Liberty 定制 SSL 套接字工厂。定制 SSLSocketFactory 类可解析用于出站连接的相应 SSL 配置。
Liberty 提供的功能部件使用 Liberty SSL 配置。但是,进行出站 SSL 调用的第三方 API 可能需要配置以使用 Liberty 功能。启用 transportSecurity-1.0 或 ssl-1.0 功能部件后,Liberty SSL 运行时代码不会设置 SSLContext 进程缺省值。依赖于缺省 SSL 上下文的第三方 API 不会因为 Liberty SSL 配置而受益。启用 transportSecurity-1.0 功能部件后,Liberty SSL 运行时代码使用 Java 安全属性 ssl.SocketFactory.provider 来设置定制 SSLSocketFactory 类。通过调用 javax.net.ssl.SSLSocketFactory.getDefault() 属性,第三方 API 可因为带有 SocketFactory 缺省值的 Liberty SSL 配置而受益。注: Liberty 定制 SSLSocketFactory 类不会承认 Java 系统属性,例如,javax.net.ssl.keystore。- (ssl-1.0) 行为
Liberty 缺省 SSL 配置中的属性用于创建 SSLContext。通过使用 Java API SSLContext.setDefault(),该 SSLContext 在进程上设置为缺省 SSLContext。如果应用程序使用 https ULR 调用 httpURLConnection() 之类的 API 并且不提供任何 SSL 信息,那么应用程序选择进程的缺省 SSLContext。在此情况下为使用 Liberty 缺省 SSL 配置创建的 SSLContext。
如果 Liberty 中未设置缺省 SSL 配置,那么 Liberty 会使用 JSSE 的缺省 SSLContext。JSSE 的缺省 SSLContext 对密钥库和信任库使用 cacerts 文件。如果未定义 SSL 功能或现有 SSL 配置未标识为缺省值,那么 Liberty 没有缺省 SSL 配置。缺省配置名为 defaultSSLConfig(如果已定义 defaultKeyStore,那么它可以是隐式的),也可使用 sslDefault 元素指定备用 SSL 配置。
javax 系统属性 (javax.net.ssl.keystore) 用于为缺省 SSL 上下文设置密钥库和信任库信息,不得用于其他用途。如果这些属性是在进程上设置的,那么调用 SSLContext.setDefault() 将擦除这些属性。
要将 SSL 元素用作出站 SSL 连接的缺省值,可针对 sslDefault 元素使用 outboundSSLRef 属性。
要指定缺省出站 SSL 元素,必须启用 transportSecurity-1.0 功能部件。指定 outboundSSLRef 时,出站 SSL 连接缺省为使用此属性指定的 SSL 配置。如果缺少 transportSecurity-1.0 功能部件,那么会忽略 outboundSSLRef。如果未指定 outboundSSLRef 属性,那么出站调用将使用 sslRef 属性所指定的至,或使用 defaultSSLConfig(如果 sslRef 未引用 SSL 配置)。<feature>transportSecurity-1.0</feature> <sslDefault sslRef="mySSLConfig" outboundSSLRef="customSSLConfiguration" />