启用 SSL 的连接器不断出现在 server.xml 中

Posted

技术标签:

【中文标题】启用 SSL 的连接器不断出现在 server.xml 中【英文标题】:SSL enabled connector keeps appearing in server.xml 【发布时间】:2020-06-11 12:36:21 【问题描述】:

当我尝试运行我的 Web 应用程序时,它在我不断收到错误之前运行良好

 java.lang.IllegalArgumentException: C:\Users\user\.IntelliJIdea2019.2\system\tomcat\projectName\conf\localhost-rsa.jks (The system cannot find the file specified)

所以我深入研究了问题并找到了我的 server.xml

  <Server port="8090" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>
  <Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true">
      <SSLHostConfig>
        <Certificate certificateKeystoreFile="conf/localhost-rsa.jks" type="RSA" />
      </SSLHostConfig>
    </Connector>
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase" />
      </Realm>
      <Host name="localhost" appBase="C:\Program Files\Apache Software Foundation\Tomcat 9.0\webapps" unpackWARs="true" autoDeploy="true" deployOnStartup="false" deployIgnore="^(?!(manager)|(tomee)$).*">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
    </Engine>
  </Service>
</Server>

这里我认为问题是有一个端口 8443 的连接器元素引用证书,因为我不需要 https 我删除连接器并从 IntelliJ 重新启动服务器但连接器重新出现并且我没有指定运行配置中的任何 https 端口。 我究竟做错了什么 ?我该如何解决这个问题?

【问题讨论】:

定义“连接器重新出现”。 您的服务器 xml 位于什么路径?这是由 intellij 生成的文件吗?或者你从tomcat发行版中使用。 Intellj 为 tomcat 创建自己的服务器 xml。您的 tomcat home 在 intellij 运行/调试配置中指向哪里? 【参考方案1】:

删除用于处理https的redirectPort="8443"、redirectPort

<Connector port="8009" protocol="AJP/1.3" />

当 SSL 请求到达服务器时,重定向端口将出现,由于 http 连接器端口无法处理 SSL 请求,它将重定向到定义的端口。

【讨论】:

是的,我尝试了同样的方法,但是重定向端口重新出现,无论我如何更改 server.xml 都会恢复到以前的状态 @SreeVishnu 你使用 apache 服务器吗? 是的,9.0 版 @SreeVishnu 我的意思是在tomcat、apache应用服务器或nginx或类似的旁边? 不,我没有。对不起,我误解了你的问题【参考方案2】:

检查您的项目应用服务器设置。 创建新的应用程序服务器,使用它来运行应用程序。 https://www.jetbrains.com/help/idea/configuring-and-managing-application-server-integration.html

我认为您从某个具有 httpd 设置的地方获得了代码,但您无法弄清楚如何删除它。

【讨论】:

【参考方案3】:

检查您的项目应用服务器设置。 创建新的应用程序服务器,使用它来运行应用程序。 https://www.jetbrains.com/help/idea/configuring-and-managing-application-server-integration.html

我认为您从某个具有 httpd 设置的地方获得了代码,但您无法弄清楚如何删除它。 检查 JKS 文件或创建新文件。 JKS 代表 Java 密钥库。它是证书(签名的公钥)和 [private] 密钥的存储库。您可以将存储在 JKS 文件中的证书导出到单独的文件中。您可以使用 Java 发行版中的“keytool”实用程序来维护您的 JKS 信任和密钥存储库。与其他类型的密钥存储库(例如,PKCS12、CMS)一样,JKS 存储库受密码保护,因为它可能包含私钥,必须对其进行保护,因为它们用于解密由公钥加密的信息。存储库中的 [Private] 密钥也受“密钥密码”保护,该密码可能与密钥存储库的密码相同(不是一个好的做法)。

以下命令将导出与 JKS 文件“mykeys.jks”中的别名/标签“mycert”关联的证书。输出文件“mycert.cer”将仅包含证书(即签名的公钥)。

keytool -exportcert -rfc -alias mycert -file mycert.cer -keystore mykeys.jks -storepass passw0rd

【讨论】:

以上是关于启用 SSL 的连接器不断出现在 server.xml 中的主要内容,如果未能解决你的问题,请参考以下文章

如何为MySQL服务器和客户机启用SSL

PHP 到 MySQL SSL 连接

MySQL启用SSL连接

无法在启用 SSL 的 Kafka 集群中注册 Debezium (Kafka-Connect) 连接器

如何在 Sidekiq 上为 Redis 6 启用 TLS?

xcode - 机器人创建失败并出现错误:发生 SSL 错误,无法与服务器建立安全连接