我有一个应用程序堆栈,因为我们希望最终过渡到连续交付并在停机时间为0的情况下翻转应用程序,所以我们有一个Tomcat 9 Server。 Tomcat托管了一些应用程序,例如
我还想将Main应用程序部署为WAR,并让Tomcat托管它。我们的应用程序使用ActiveMQ进行消息传递,而我很难确定配置SpringBoot的最佳方法以及该服务的Tomcat 9
在使用嵌入式Tomcat之前,经过一段痛苦的时间生成密钥(一个非常痛苦的过程)之后,我才能够将其简单地添加到应用程序中。
##################################################################################################################
# SPRING SSL PROPERTIES
# Properties related to SSL settings (used by ActiveMQ, potentially also by other secure areas in the application
##################################################################################################################
server.ssl.key-store=classpath:tomcat.jks
server.ssl.key-store-type=JKS
server.ssl.key-store-password=changeit
server.ssl.key-alias=tomcat
server.ssl.key-store-provider=SUN
server.ssl.trust-store=classpath:tomcat.ts
server.ssl.trust-store-type=JKS
由于它在本地运行,并且拥有我的所有文件,因此可以正常工作。现在?我需要类似的配置才能在Tomcat 9上工作,而不是嵌入式Tomcat
试图将密钥移到上方,我试图将Tomcat的server.xml修改为具有以下内容
<Connector port="8443"
maxThreads="150"
scheme="https"
secure="true"
SSLEnabled="true"
keyAlias="tomcat"
keystoreFile="conf/tomcat.jks"
keystorePass="changeit"
keystoreType="JKS"
clientAuth="false"
sslProtocol="TLS"/>
但是遗憾的是这不起作用。 stacktrace是“您的证书很烂...”的典型案例:
SEVERE: Could not refresh JMS Connection for destination 'jms/queue/xxx/general' -
retrying using FixedBackOff{interval=5000, currentAttempts=3, maxAttempts=unlimited}.
Cause: Could not connect to broker URL: ssl://virtlocal.xxx.com:61617. Reason: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException:
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
我已经看过some answers这个问题,但是他们都说相同的话(当我尝试使用JKS时,他们正在使用p12或p57,是的,这就是很过时了
我将继续四处看看,但我的问题有两个方面
提前感谢大家。如果我自己找出答案,我将更新此问题
更新12/16/2019 经过讨论并弄清楚了一点,如果目的是将主要应用程序和微服务都托管在Tomcat 9服务器上,则似乎不需要在Spring Boot中启用SSL。我们只需简单地应用主机端点和凭据即可。因此,好消息是,我认为我可以忽略application.properties中的SSL设置并将其删除。
但是,现在我正试图在启动时使我的Tomcat正常工作,文档似乎建议您需要对server.xml执行此操作:
<Connector port="8443"
protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150"
SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeyAlias="localhost"
certificateKeystoreFile="conf/keystore/tomcat.jks"
certificateKeystorePassword="changeit"
certificateKeystoreType="JKS"
type="RSA" />
</SSLHostConfig>
</Connector>
使用以下密码生成了我的密钥:
$JAVA_HOME/bin/keytool -genkey -alias localhost -keyalg RSA -keystore tomcat.jks
但是,我遇到了同样的错误,并且不确定如何解决它。这是一个本地环境,因此遵循Tomcat 9 Documentation很有帮助,但是仍然不确定我做错了什么让IntelliJ用我的WAR文件正确启动Tomcat。
答案 0 :(得分:0)
所以我的答案是执行以下操作以在非嵌入式Tomcat 9上运行Spring Boot应用程序
sudo $JAVA_HOME/bin/keytool -genkeypair -alias tomcat -keyalg RSA -keysize 2048 -storetype PKCS12 -validity 3650 -keystore tomcat.p12 -storepass changeit
sudo $JAVA_HOME/bin/keytool -import -alias broker -keystore tomcat.ts -file broker.crt
<Connector port="8443"
protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150"
SSLEnabled="true">
<SSLHostConfig>
<Certificate
truststoreFile="conf/keystore/tomcat.ts"
truststorePassword="changeit"
truststoreType="JKS"
certificateKeyAlias="tomcat"
certificateKeystoreFile="conf/keystore/tomcat.p12"
certificateKeystorePassword="changeit"
certificateKeystoreType="PKCS12" />
</SSLHostConfig>
</Connector>
-Djavax.net.ssl.trustStore=/opt/tomcat/conf/keystore/tomcat.ts
-Djavax.net.ssl.trustStorePassword=changeit
有了这个,我能够在Tomcat 9服务器上本地生成ActiveMQ侦听器,我的SpringBoot应用程序可以向该侦听器发送和接收消息。
您的需求和步骤可能会有所不同,但是希望这可以帮助某个人