gpt4 book ai didi

ssl - 是否可以在不需要 native 库和 APR 的情况下使用 OpenSSL 为 Tomcat 启用 HTTPS/TLS?

转载 作者:行者123 更新时间:2023-11-28 23:58:16 25 4
gpt4 key购买 nike

我正在尝试为 Tomacat (8.x) 启用 HTTPS/TLS,我更喜欢 OpenSSL 替代方案,因为证书/ key 配置更简单(与通常的带有 keystore 的 JSSE 相比)。

已关注 offical documentation并像这样启用连接器部分:

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" 
sslImplementationName="org.apache.tomcat.util.net.openssl.OpenSSLImplementation"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true">

<SSLHostConfig protocols="TLSv1.2">
<Certificate
certificateKeyFile="conf/MyKey.key"
certificateFile="conf/MyCertificate.crt"
type="RSA" />
</SSLHostConfig>
</Connector>

注意我仍在使用 Http11NioProtocol 而不是 APR Http11AprProtocol 连接器。

但是,使用此配置启动失败,因为此配置组合似乎需要构建和配置 Tomcat native 库:

14-Jun-2019 10:38:46.363 SEVERE [main] org.apache.catalina.core.StandardService.initInternal Failed to initialize connector [Connector[HTTP/1.1-8443]]
org.apache.catalina.LifecycleException: Failed to initialize component [Connector[HTTP/1.1-8443]]
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:112)
at org.apache.catalina.core.StandardService.initInternal(StandardService.java:549)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:875)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
at org.apache.catalina.startup.Catalina.load(Catalina.java:621)
at org.apache.catalina.startup.Catalina.load(Catalina.java:644)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:309)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:492)
Caused by: java.lang.UnsatisfiedLinkError: org.apache.tomcat.jni.Pool.create(J)J
at org.apache.tomcat.jni.Pool.create(Native Method)
at org.apache.tomcat.util.net.openssl.OpenSSLEngine.<clinit>(OpenSSLEngine.java:70)
at org.apache.tomcat.util.net.openssl.OpenSSLUtil.getImplementedProtocols(OpenSSLUtil.java:61)
at org.apache.tomcat.util.net.SSLUtilBase.<init>(SSLUtilBase.java:53)
at org.apache.tomcat.util.net.openssl.OpenSSLUtil.<init>(OpenSSLUtil.java:41)
at org.apache.tomcat.util.net.openssl.OpenSSLImplementation.getSSLUtil(OpenSSLImplementation.java:36)
at org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:104)
at org.apache.tomcat.util.net.AbstractJsseEndpoint.initialiseSsl(AbstractJsseEndpoint.java:87)
at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:225)
at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:1082)
at org.apache.tomcat.util.net.AbstractJsseEndpoint.init(AbstractJsseEndpoint.java:267)
at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:581)
at org.apache.coyote.http11.AbstractHttp11Protocol.init(AbstractHttp11Protocol.java:66)
at org.apache.catalina.connector.Connector.initInternal(Connector.java:993)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)

我确实构建并安装了 Tomcat native + APR库并在 Tomcat env 类路径中配置,这解决了问题,但这不是重点。重点是,如果我使用的是我未使用的 Http11AprProtocol,难道不应该只需要 APR/本地库吗?我错过了什么?任何指针/帮助将不胜感激。谢谢!

最佳答案

我犯的错误是我在连接器配置中显式配置了 sslImplementationName="org.apache.tomcat.util.net.openssl.OpenSSLImplementation"。这就是导致依赖 native 库和启动错误的原因。

不指定 sslImplementationName 将其保留为默认值,即 org.apache.tomcat.util.net.jsse.JSSEImplementation 并与 OpenSSL 样式证书和 key 配置一起正常工作。最终配置:

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true">

<SSLHostConfig protocols="TLSv1.2">
<Certificate
certificateKeyFile="conf/MyKey.key"
certificateFile="conf/MyCertificate.crt"
type="RSA" />
</SSLHostConfig>
</Connector>

所以主要问题的答案是:是的,可以将纯 Java/JSSE 风格的配置与 OpenSSL 风格的 SSLHostConfig 结合使用。

(然而,带有本地库的 APR/OpenSSL impl 相对性能更高。)

关于ssl - 是否可以在不需要 native 库和 APR 的情况下使用 OpenSSL 为 Tomcat 启用 HTTPS/TLS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56589428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com