如何使用Spring Boot和Tomcat指定我的.keystore文件?

如何使用Spring Boot和Tomcat指定我的.keystore文件?,第1张

如何使用Spring Boot和Tomcat指定我的.keystore文件?

事实证明,有一种方法可以执行此 *** 作,尽管我不确定自己是否找到了“正确”方法,因为这需要花费多个小时从多个项目中读取源代码。换句话说,这可能是很多愚蠢的工作(但它可以工作)。

首先,无法获得嵌入式Tomcat中的server.xml,无法对其进行扩充或替换。这必须以编程方式完成。

其次,“ require_https”设置无济于事,因为您不能以这种方式设置证书信息。它 确实
设置了从http到https的转发,但是它没有提供使https正常工作的方法,因此转发无济于事。然而,下面的东西,它使用它 确实 使HTTPS工作。

首先,您需要提供

EmbeddedServletContainerFactory

嵌入式Servlet容器支持”文档中所述的。这些文档是针对Java的,但Groovy看起来几乎一样。请注意,我无法让它识别出
@Value
示例中使用的注释,但不是必需的。对于groovy,只需将其放入新的.groovy文件中,并在启动
spring
启动时在命令行中包含该文件。

现在,指令说明您可以自定义

TomcatEmbeddedServletContainerFactory
在该代码中创建的类,以便可以更改web.xml行为,这是正确的,但是出于我们的目的,重要的是要知道您也可以使用它来调整
server.xml
行为。实际上,阅读该类的源代码并将其与Embedded
Tomcat文档进行比较,您会发现这是唯一的实现方式。有趣的功能是
TomcatEmbeddedServletContainerFactory.addConnectorCustomizers()
,从Javadocs看来可能并不多,但实际上为您提供了嵌入式Tomcat对象以自定义您自己。只需传递您自己的实现,
TomcatConnectorCustomizer
然后
Connector
voidcustomize(Connectorcon)
函数中的给定值上设置所需的内容。现在,您可以使用十亿左右的内容,但
Connector
我找不到有用的文档,但是
createConnector()
这个家伙在Spring嵌入式的Tomcat项目中的功能是非常实用的指南。我的实现最终看起来像这样:

package com.deepdownstudios.serverimport org.springframework.boot.context.embedded.tomcat.TomcatConnectorCustomizerimport org.springframework.boot.context.embedded.EmbeddedServletContainerFactoryimport org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactoryimport org.apache.catalina.connector.Connector;import org.apache.coyote.http11.Http11NioProtocol;import org.springframework.boot.*import org.springframework.stereotype.*@Configurationclass MyConfiguration {@Beanpublic EmbeddedServletContainerFactory servletContainer() {final int port = 8443;final String keystoreFile = "/path/to/keystore"final String keystorePass = "keystore-password"final String keystoreType = "pkcs12"final String keystoreProvider = "SunJSSE"final String keystoreAlias = "tomcat"TomcatEmbeddedServletContainerFactory factory =         new TomcatEmbeddedServletContainerFactory(this.port);factory.addConnectorCustomizers( new TomcatConnectorCustomizer() {    void    customize(Connector con) {        Http11NioProtocol proto = (Http11NioProtocol) con.getProtocolHandler(); proto.setSSLEnabled(true);        con.setScheme("https");        con.setSecure(true);        proto.setKeystoreFile(keystoreFile);        proto.setKeystorePass(keystorePass);        proto.setKeystoreType(keystoreType);        proto.setProperty("keystoreProvider", keystoreProvider);        proto.setKeyAlias(keystoreAlias);    }});return factory;}}

Autowiring将自动执行此实现。一旦我修复了损坏的密钥库文件(确保您使用调用keytool

-storetypepkcs12
,而不是
-storepasspkcs12
其他地方所报告的),此方法就可以了。另外,最好提供参数(端口,密码等)作为测试的配置设置,等等。。。我敢肯定,如果您可以使用@Value批注与Groovy一起使用,那是有可能的。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4917363.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-12
下一篇 2022-11-12

发表评论

登录后才能评论

评论列表(0条)

保存