搜索

14.4. Tomcat Engine 和 Web 服务的配置文件

download PDF
子系统的所有用户和管理(管理员、代理和审核员)服务都可通过 Web 协议访问。
本节讨论适用于所有 Red Hat Certificate System 子系统的两大配置文件(CA、KRA、OCSP、TKS 和 TPS):
  • /var/lib/pki/instance_name/conf/server.xml 提供 Tomcat 引擎的配置。
  • /usr/share/pki/subsystem_type/webapps/WEB-INF/web.xml 提供此实例提供的 Web 服务的配置。

14.4.1. tomcatjss

注意
后续小节包括有关对参数值所需更改的重要配置信息。确保它们遵循严格的合规性。
在示例 pki-tomcat/conf 目录中找到 server.xml 文件中的以下配置可用于解释 Tomcatjs 如何适合于整个证书系统生态系统。secret 端口的 Connector 条目的一部分如下所示。
<Connector name="Secure"

# Info about the socket itself
port="8443"
protocol="org.apache.coyote.http11.Http11Protocol"
SSLEnabled="true"
sslProtocol="SSL"
scheme="https"
secure="true"
connectionTimeout="80000"
maxHttpHeaderSize="8192"
acceptCount="100" maxThreads="150" minSpareThreads="25"
enableLookups="false" disableUploadTimeout="true"
# Points to our tomcat jss implementation
sslImplementationName="org.apache.tomcat.util.net.jss.JSSImplementation"

# OCSP responder configuration can be enabled here
enableOCSP="true"
ocspCacheSize="1000"
ocspMinCacheEntryDuration="60"
ocspMaxCacheEntryDuration="120"
ocspTimeout="10"

# A collection of cipher related settings that make sure connections are secure.
strictCiphers="true"
# The "clientAuth" parameter configures the client authentication scheme
# for this server socket. If you set "clientAuth" to "want", the client
# authentication certificate is optional. Alternatively, set the
# parameter to "required" to configure that the certificate is is mandatory.
clientAuth="want"
sslVersionRangeStream="tls1_1:tls1_2"
sslVersionRangeDatagram="tls1_1:tls1_2"
sslRangeCiphers="+TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,+TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,+TLS_DHE_RSA_WITH_AES_128_CBC_SHA,+TLS_DHE_RSA_WITH_AES_256_CBC_SHA,+TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,+TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,+TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,+TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,+TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,+TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,+TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,+TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
serverCertNickFile="/var/lib/pki/pki-tomcat/conf/serverCertNick.conf"
passwordFile="/var/lib/pki/pki-tomcat/conf/password.conf"
passwordClass="org.apache.tomcat.util.net.jss.PlainPasswordFile"
certdbDir="/var/lib/pki/pki-tomcat/alias"

/>
在 Tomcat 引擎的 server.xml 配置文件中,有这个 Connector 配置元素包含指向 tomcatjss 实现的指针,它可以插入到这个 Connector 对象的 sslImplementation 属性中。
以下子小节中解释了每个关键参数元素。

14.4.1.1. TLS Cipher 配置

当 Red Hat Certificate 系统充当客户端和服务器时,server.xml 文件中配置的 TLS 密码会提供系统范围的默认值。这包括充当服务器(例如,从 Tomcat 提供 HTTPS 连接时)和作为客户端(例如,与 LDAP 服务器通信或与其他证书系统实例通信时)。
服务器 TLS 密码的配置位于特定于 Red Hat Certificate System 实例的 /var/lib/pki/instance_name/conf/server.xml 文件中。以下参数控制提供的密码:
  • strictCiphers,当设为 true 时,确保只启用 sslRangeCiphers 中的 + 符号的密码。
    strictCiphers="true"
    不要更改默认值(true)。
  • sslVersionRangeStreamsslVersionRangeDatagram 设置服务器支持的 TLS 版本。以下是参数的默认值:
    sslVersionRangeStream="tls1_1:tls1_2"
    sslVersionRangeDatagram="tls1_1:tls1_2"
    不要更改参数的默认值。
  • sslRangeCiphers 设置启用和禁用哪些密码。启用了 + 符号的密码,并禁用了 - 符号的密码。
    设置 RSA 密码,如下所示:
    sslRangeCiphers="+TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,+TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,+TLS_DHE_RSA_WITH_AES_128_CBC_SHA,+TLS_DHE_RSA_WITH_AES_256_CBC_SHA,+TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,+TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,+TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,+TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,+TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,+TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,+TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,+TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
    设置 EC 密码,如下所示:
    sslRangeCiphers="+TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,+TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,+TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,+TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,+TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,+TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,+TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
    有关允许的密码列表,请参阅 第 3.1 节 “TLS、ECC 和 RSA”
  • 如果您在为 RSA 启用 FIPS 模式的系统中安装 LunaSA 或 nCipher Hardware Security Module (HSM)的证书系统,请禁用以下密码,因为 FIPS 模式的 HSMs 不支持它们:
    • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
    • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
    • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
    • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
14.4.1.1.1. 客户端 TLS 密码配置
当作为客户端到另一个 CS 系统时,Red Hat Certificate System 还允许系统上的密码配置。
列表中的密码用逗号分开。
在 CA 上(用于 CA 与 KRA 通信):
ca.connector.KRA.clientCiphers=your selected cipher list
例如:
ca.connector.KRA.clientCiphers=TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA
在 TPS 上(用于与 CA 通信、KRA 和 TKS):
tps.connector.ca id.clientCiphers=your selected cipher list
tps.connector.kra id.clientCiphers=your selected cipher list
tps.connector.tks id.clientCiphers=your selected cipher list
例如:
tps.connector.ca1.clientCiphers=TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA

14.4.1.2. 在 CA 上启用自动撤销检查

CA 可以配置为检查服务器在 SSL/TLS 客户端身份验证过程中收到的任何证书的撤销状态(包括代理、管理员和注册)。这意味着,当 CA 收到任何客户端身份验证请求时,它会自动检查 OCSP。(有关设置 OCSP 响应器的信息,请参阅 Red Hat Certificate System Administration Guide 中的 Using the Online Certificate Status Protocol (OCSP) Responder。)
作为撤销检查的一部分,CA 能够缓存客户端身份验证,以便它保留验证的证书列表。这允许 CA 在检查其内部数据库或 OCSP 前检查其缓存的结果,从而提高了整体操作性能。在 revocationChecking.enabled 参数中启用自动撤销检查。
撤销状态结果只在指定的时间内有效(revocationChecking.validityInterval)。如果 CA 无法重新验证缓存中的证书状态,则有一个宽限期(revocationChecking.unknownStateInterval),其中之前缓存的状态仍被视为有效,即使它超出有效期间隔。
注意
缓存的证书保存在缓冲区中(revocationChecking.bufferSize)。如果缓冲区设置缺失或设置为零,则不会保留缓冲区,这意味着不会缓存撤销检查的结果。在这种情况下,所有撤销检查都会直接针对 CA 的内部数据库执行。
注意
子系统 CS.cfg 配置文件包含一个参数 jss.ocspcheck.enable,它设置证书管理器是否应该使用 OCSP 验证它收到的证书的撤销状态。将此参数的值改为 true 意味着证书管理器读取证书中的授权信息访问扩展,并从扩展中指定的 OCSP 响应程序验证证书的撤销状态。
  1. 停止子系统实例。
    # pki-server stop instance_name
  2. 打开 CS.cfg 文件。
    # vim /var/lib/pki/instance-name/ca/conf/CS.cfg
  3. 编辑与撤销相关的参数。
    auths.revocationChecking.bufferSize=50
    auths.revocationChecking.ca=ca
    auths.revocationChecking.enabled=true
    auths.revocationChecking.unknownStateInterval=0
    auths.revocationChecking.validityInterval=120
    
    • revocationChecking.ca.设置提供 OCSP respsonse、CA 或 OCSP 响应程序的服务。
    • revocationChecking.enabled.设置撤销检查。true 启用检查; false 禁用检查。默认情况下启用该功能。
    • revocationChecking.bufferSize.设置服务器应在其缓存中维护的最后一次检查证书总数。例如,如果缓冲区大小为 2,服务器会保留在其缓存中检查的最后两个证书。默认情况下,服务器缓存最后 50 个证书。
    • revocationChecking.unknownStateInterval.设置服务器检查撤销状态的频率。默认间隔为 0 秒。unknownStateInterval 是一个宽限期,如果 CA 没有方法(没有访问信息)验证证书状态,则缓存结果将被假定为 true
    • revocationChecking.validityInterval.设置缓存的证书被视为有效的时长。选择间隔时请小心。例如,如果有效期周期为 60 秒,服务器会每分钟丢弃其缓存中的证书,并尝试从其源中检索证书。证书管理器使用其内部数据库来检索和验证证书的撤销状态。默认有效期为 120 秒(2 分钟)。
  4. 启动证书系统实例。
    # pki-server start instance_name

14.4.1.3. 为子系统启用证书撤销检查

默认情况下,证书系统子系统没有启用 OCSP 检查来验证子系统证书。这意味着,有人可以登录具有撤销证书的管理或代理接口。
通过编辑 server.xml 文件,为所有子系统启用 OCSP 检查。代理接口和 admin 接口是单独配置的,因此应编辑配置中的两个部分。
注意
如果子系统已配置为使用 SSL/TLS 与其内部数据库的连接,则 LDAP 内部数据库的 SSL/TLS 服务器证书必须由 OCSP 响应器识别。如果 OCSP 响应器无法识别 LDAP 服务器证书,则子系统将无法正确启动。由于子系统-LDAP SSL/TLS 服务器连接被配置为子系统设置的一部分,因此 Red Hat Certificate System 10 规划、安装和部署指南 中涵盖此配置。
  1. 获取用于检查证书状态的 OCSP 或 CA 的 OCSP 签名证书名称。例如:
    # certutil -L -d /etc/pki/instance-name/alias
    Certificate Nickname                                         Trust Attributes
    															 SSL,S/MIME,JAR/XPI
    Certificate Authority - Example Domain                       CT,c,
    ocspSigningCert cert-pki-ocsp CTu,Cu,Cu
    subsystemCert cert-pki-ocsp                                  u,u,u
    Server-Cert cert-pki-ocsp                                    u,u,u
    auditSigningCert cert-pki-ocsp                               u,u,Pu
    
  2. 为子系统打开 server.xml 文件。例如:
    # vim /etc/pki/instance-name/server.xml
  3. 如果实例的安全数据库中没有 OCSP 签名证书,请导入它:
    # certutil -d /etc/pki/instance-name/alias -A -n "ocspSigningCert cert-pki-ca" -t "C,," -a -i ocspCert.b64
  4. 启用 OCSP 检查有三个关键参数:
    • 启用OCSP,它必须设置为 true 才能启用 OCSP 检查。
      这是一个全局设置;如果为一个接口设置,则它适用于实例的每个接口。但是,它必须在 server.xml 文件中列出的第一个接口上设置,通常是代理接口。其它接口上的任何设置都会被忽略。
    • ocspResponderURL,它为发送 OCSP 请求提供 OCSP 响应器的 URL。
      对于 OCSP Manager,这可能是其他 OCSP 或 CA 中的另一个 OCSP 服务。对于其他子系统,这总是指向 OCSP 或 CA 中的外部 OCSP 服务。
    • ocspResponderCertNickname 给出用于签署响应的签名证书;对于 CA OCSP 服务,这是 CA 的 OCSP 签名证书,对于 OCSP 响应者,它是一个 OCSP 签名证书。
    其他参数可用于定义 OCSP 通信。所有 OCSP 检查参数都列在 表 14.10 “server.xml 的 OCSP 参数” 中。
    文件中有两个不同的部分用于代理和管理界面。需要向两个部分添加 OCSP 参数,以启用和配置 OCSP 检查。例如:

    例 14.3. 代理接口的 OCSP 设置

    <Connector name="Agent" port="8443" maxHttpHeaderSize="8192"
    					maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
    					enableLookups="false" disableUploadTimeout="true"
    					acceptCount="100" scheme="https" secure="true"
    					clientAuth="true" sslProtocol="SSL"
    					sslOptions="ssl2=true,ssl3=true,tls=true"
    
    		ssl3Ciphers="-SSL3_FORTEZZA_DMS_WITH_NULL_SHA, ..."
    
    		tls3Ciphers="-SSL3_FORTEZZA_DMS_WITH_NULL_SHA, ..."
    					SSLImplementation="org.apache.tomcat.util.net.jss.JSSImplementation"
    					enableOCSP="true"  
    					ocspResponderURL="http://server.example.com:8443/ca/ocsp"  
    					ocspResponderCertNickname="ocspSigningCert cert-pki-ca 102409a"  
    					ocspCacheSize="1000"  
    					ocspMinCacheEntryDuration="60"  
    					ocspMaxCacheEntryDuration="120"  
    					ocspTimeout="10"  
    					debug="true"
    					serverCertNickFile="/etc/pki/instance-name/serverCertNick.conf"
    					passwordFile="/etc/pki/instance-name/password.conf"
    					passwordClass="org.apache.tomcat.util.net.jss.PlainPasswordFile"
    					certdbDir="/etc/pki/instance-name/alias"/>
  5. 如果给定的 OCSP 服务不是 CA,则必须将 OCSP 服务的签名证书导入到子系统的 NSS 数据库中。这可以在控制台或使用 certutil 完成; Red Hat Certificate System Administration Guide 中的 Installing Certificates in the Certificate System Database in the Certificate System Database 中涵盖了这两个选项。
  6. 重新启动子系统。
    # pki-server restart instance_name
表 14.10. server.xml 的 OCSP 参数
参数 描述
enableOCSP 为子系统启用(或禁用) OCSP 检查。
ocspResponderURL 设置发送 OCSP 请求的 URL。
对于 OCSP Manager,这可能是其他 OCSP 或 CA 中的另一个 OCSP 服务。对于 TKS 或 KRA,这总是指向 OCSP 或 CA 中的外部 OCSP 服务。
ocspResponderCertNickname 为响应器设置签名证书的 nickname,可以是 OCSP 签名证书或 CA 的 OCSP 签名证书。证书必须导入到子系统的 NSS 数据库中,并设置了适当的信任设置。
ocspCacheSize 设置缓存条目的最大数量。
ocspMinCacheEntryDuration 在进行另一个提取前设置最小秒数。例如,如果将其设置为 120,则无法再次检查证书的有效性,直到最后一次有效期检查前至少 2 分钟为止。
ocspMaxCacheEntryDuration 设置在下一次获取尝试前要等待的最大秒数。这可防止在有效检查之间有太大的窗口。
ocspTimeout 为 OCSP 请求设置超时时间(以秒为单位)。

14.4.1.4. 在注册配置文件中添加 AIA 扩展

要在使用外部 OCSP 时在配置集中设置 AIA URL,请在证书配置文件中添加正确的 URL。例如:
policyset.cmcUserCertSet.5.default.params.authInfoAccessADLocation_0=http://example.com:8080/ocsp/ee/ocsp

14.4.2. 会话超时

当用户通过客户端应用连接到 PKI 服务器时,服务器将创建一个会话来跟踪用户。只要用户保持活动状态,用户可以对同一会话执行多个操作,而无需重新验证。
会话超时决定了服务器在因为不活跃而终止会话前等待多久。会话终止后,用户需要重新验证来继续访问服务器,服务器将创建新的会话。
有两种超时类型:
  • TLS 会话超时
  • HTTP 会话超时
由于客户端的工作方式的区别,客户端会因这些超时的不同而受到不同。
注意
某些客户端有自己的超时配置。例如,Firefox 有一个 keep-alive 超时设置。详情请查看 http://kb.mozillazine.org/Network.http.keep-alive.timeout。如果值与 TLS Session Timeout 或 HTTP Session Timeout 的服务器设置不同,则可以观察不同的行为。

14.4.2.1. TLS 会话超时

TLS 会话是通过 TLS 握手协议建立的 TLS 连接的安全通信频道。
PKI 服务器为 TLS 会话活动生成审计事件。在创建连接时,服务器会生成一个 ACCESS_SESSION_ESTABLISH 审计事件。如果连接创建失败,服务器将使用 Outcome=Failure 生成 ACCESS_SESSION_ESTABLISH 审计事件。连接关闭时,服务器将生成一个 ACCESS_SESSION_TERMINATED 审计事件。
TLS 会话超时(即 TLS 连接超时)在 /etc/pki /& lt;instance>/server.xml 文件中的 Secure <Connector> 元素中配置:
...
<Server>
	<Service>
		<Connector name="Secure"
			...
			keepAliveTimeout="300000"
			...
			/>
	</Service>
</Server>
...
默认情况下,超时值设置为 300000 毫秒(即 5 分钟)。要更改这个值,请编辑 /etc/pki/<instance>/server.xml 文件,然后重新启动服务器。
注意
请注意,这个值将影响到服务器的所有 TLS 连接。较大的值可以提高客户端的效率,因为它们可以重复使用尚未过期的现有连接。但是,它也可能会增加服务器必须同时支持的连接数量,因为它需要更长的时间才能过期连接。

14.4.2.2. HTTP 会话超时

HTTP 会话是利用 HTTP cookie 在多个 HTTP 请求之间跟踪用户的机制。PKI 服务器不会为 HTTP 会话生成审计事件。
注意
为了实现审核一致性,请将本节中的 &lt ;session-timeout > 值设置为与 第 14.4.2.1 节 “TLS 会话超时” 中的 keepAliveTimeout 值匹配。例如,如果将 keepAliveTimeout 设为 300000 (5 分钟),则将 < session-timeout> 设置为 30
HTTP 会话超时可以在 /etc/pki/& lt;instance>/web.xml 文件中的 <session-timeout > 元素中配置:
...
<web-app>
	<session-config>
		<session-timeout>30</session-timeout>
	</session-config>
</web-app>
...
默认情况下,超时值设置为 30 分钟。要更改值,请编辑 /etc/pki/<instance>/web.xml 文件,然后重新启动服务器。
注意
请注意,这个值会影响服务器上所有 Web 应用程序中的所有会话。较大的值可以提高用户的体验,因为不需要重新验证或再次查看访问横幅。但是,它也可能会增加安全风险,因为带外的 HTTP 会话需要更长的时间才能过期。

14.4.2.3. PKI Web UI 的会话超时

PKI Web UI 是在浏览器中运行的基于 Web 的交互式客户端。目前,它只支持客户端证书身份验证。
打开 Web UI 时,浏览器可能会创建多个 TLS 连接到服务器。这些连接与单个 HTTP 会话关联。
要为 Web UI 配置超时,请参阅 第 14.4.2.2 节 “HTTP 会话超时”。TLS 会话超时通常无关,因为浏览器会缓存客户端证书,以便它自动重新创建 TLS 会话。
当 HTTP 会话过期时,Web UI 不提供任何立即指示。但是,Web UI 将在用户执行操作前显示访问横幅(如果已启用)。

14.4.2.4. PKI 控制台的会话超时

PKI 控制台是一个交互式的单机图形 UI 客户端。它支持用户名/密码和客户端证书身份验证。
当控制台启动时,它将创建一个到服务器的 TLS 连接。控制台将在打开图形界面前显示访问横幅(如果已启用)。与 Web UI 不同,控制台不会维护与服务器的 HTTP 会话。
要为控制台配置超时,请参阅 第 14.4.2.1 节 “TLS 会话超时”。HTTP 会话超时无关,因为控制台不使用 HTTP 会话。
当 TLS 会话过期时,TLS 连接将关闭,控制台将立即退出系统。如果用户希望继续,用户需要重启控制台。

14.4.2.5. PKI CLI 的会话超时

PKI CLI 是执行一系列操作的命令行客户端。它支持用户名/密码和客户端证书身份验证。
当 CLI 启动时,它将创建一个到服务器和 HTTP 会话的 TLS 连接。CLI 将在执行操作前显示访问横幅(如果已启用)。
两个超时通常都与 PKI CLI 无关,因为操作按顺序执行,且 CLI 在完成后会立即退出。但是,如果 CLI 等待用户输入,速度缓慢或者变得无响应,则 TLS 会话或 HTTP 会话可能会过期,其余操作会失败。如果预期有这种延迟,请参阅 第 14.4.2.1 节 “TLS 会话超时”第 14.4.2.2 节 “HTTP 会话超时” 以适应预期的延迟。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.