【问题标题】:Misssing ServerSocketFactory in tomcat 8.5在 tomcat 8.5 中缺少 ServerSocketFactory
【发布时间】:2021-02-19 15:44:26
【问题描述】:

根据以下链接

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 8 中是可能的,通过使用实现 tomcat 的 ServerSocketFactory 接口的自定义类。
  2. 将 tomcat https 的证书文件存储在自定义密钥库(XML 文件)中

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

【问题讨论】:

    标签: java tomcat ajp tomcat8.5


    【解决方案1】:

    在连接器重构 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"
                 ... />
    

    【讨论】:

    • 谢谢。我也联系了tomcat用户组。我得到的答案也是类似的方向
    • tomcat-users 组的答案不如你的详细。所以你的回答帮助了我。但是,我的最终要求是也从 AJP SSL 的自定义密钥存储中读取证书。我们的 Keystore 已经实现了 java.security.KeyStoreSpi。但是我不太清楚tomcat中的哪些类我应该专注于使用它。你有什么指导方针吗?
    • 您必须创建、测试和注册一个自定义安全Provider(参见Oracle's documentation),它只提供您的自定义密钥库类型。完成后,您只需在&lt;Certificate&gt; 元素中提供certificateKeystoreType,Tomcat 就应该使用它。
    猜你喜欢
    • 2012-05-28
    • 2021-01-29
    • 2019-03-06
    • 2014-11-01
    • 2018-12-17
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多