Warm tip: This article is reproduced from serverfault.com, please click

java-在 tomcat 8.5 中缺少 ServerSocketFactory

(java - Misssing ServerSocketFactory in tomcat 8.5)

发布于 2021-02-09 11:42:58

根据以下链接

https://github.com/spring-projects/spring-boot/issues/6164,tomcat 8.5 删除了以下功能

a) 类 org.apache.tomcat.util.net.ServerSocketFactory 不再存在

b) 类 org.apache.tomcat.util.net.jsse.JSSESocketFactory 不再存在

c) 方法 JSSEImplementaton.getServerSockerFactory(AbstractEndpoint) 不再存在

d) 方法 JSSEImplementaton.getSSLUtil(AbstractEndpoint) 不再存在

这些使我们从 tomcat 8.0 升级到 tomcat 8.5.x 变得困难。

我们有两个要求

  1. Tomcat AJP 协议接收来自 HTTP 服务器的加密内容并给出加密响应。通过使用实现 tomcat 的 ServerSocketFactory 接口的自定义类,这在 tomcat 8 中是可能的。
  2. 将 tomcat https 的证书文件存储在自定义密钥库(XML 文件)中

这些如何在 tomcat 8.5 中实现?任何建议表示赞赏。(我们在 Tomcat 8 中使用自定义 SocketFcatory 实现了 tomcat 的接口)

Questioner
George Thomas
Viewed
11
Piotr P. Karwasz 2021-02-19 15:44:26

连接器重构后JIoEndpoint,允许指定任意的连接器ServerSocketFactory不再可用。

但是,如果你允许对 Tomcat 的代码库进行一些更改,则 AJP 连接器几乎已准备好接受 SSL 连接:AbstractAjpProtocol该类只是缺少addSslHostConfigfindSslHostConfigs或更好的实现,它不存储或返回任何带有非常明确注释的内容:

AJP 不支持 SSL

如果像 中那样更改它们AbstractHttp11Protocol,你将能够像配置 HTTP/1.1 连接器一样配置 AJP 连接器:

<Connector SSLEnabled="true" port="8009" protocol="AJP/1.3">
    <SSLHostConfig ...>
        <Certificate ... />
    </SSLHostConfig>
</Connector>

关于证书存储,你可以实现自己的KeyStoreSpi安全提供程序并使用:

<Certificate certificateKeystoreProvider="your_provider"
             certificateKeystoreType="your_type"
             ... />