spring-boot 上没有带码头的有效密钥库
No Valid keystore with jetty on spring-boot
我有一个 spring 引导项目,它是 运行ning 码头,我正在尝试使用
注册 ssl
@Bean(name = "containerCustomizer")
public EmbeddedServletContainerCustomizer containerCustomizer()
{
return (container -> ((JettyEmbeddedServletContainerFactory) container).addServerCustomizers(
new JettyServerCustomizer()
{
@Override
public void customize(Server server)
{
// HTTP
ServerConnector connector = new ServerConnector(server);
connector.setPort(80);
// HTTPS
SslContextFactory sslContextFactory = new SslContextFactory();
sslContextFactory.setKeyStorePath(
getClass().getClassLoader().getResource("keystore.jks").getFile());
sslContextFactory.setKeyStorePassword("password");
HttpConfiguration https = new HttpConfiguration();
https.addCustomizer(new SecureRequestCustomizer());
ServerConnector sslConnector = new ServerConnector(server,
new SslConnectionFactory(sslContextFactory,
HttpVersion.HTTP_1_1
.asString()),
new HttpConnectionFactory(https));
sslConnector.setPort(443);
server.setConnectors(new Connector[] {connector, sslConnector});
}
}));
}
当我运行
jar tf my_jar.jar | grep keystore
我看到它在说。
keystore.jks
当我尝试打印这个值时
getClass().getClassLoader().getResource("keystore.jks").getFile()
我明白了
file:/root/project/my_jar.jar!/keystore.jks
但是如果我运行
new File(getClass().getClassLoader().getResource("keystore.jks").getFile()).exists()
它总是 returns 错误。
如何指向位于我的 jar 文件中的 keystore.jks?它显然在那里,但无论我试图指向它什么,似乎都不起作用...
jar:file://<filesystem-path>!/<jar-path>
是 URL,从 Java 的角度来看不是文件。
这样做...
URL urlKeystore = getClass().getClassLoader().getResource("keystore.jks")
sslContextFactory.setKeyStoreResource(Resource.newResource(urlKeystore));
引用:
我有一个 spring 引导项目,它是 运行ning 码头,我正在尝试使用
注册 ssl@Bean(name = "containerCustomizer")
public EmbeddedServletContainerCustomizer containerCustomizer()
{
return (container -> ((JettyEmbeddedServletContainerFactory) container).addServerCustomizers(
new JettyServerCustomizer()
{
@Override
public void customize(Server server)
{
// HTTP
ServerConnector connector = new ServerConnector(server);
connector.setPort(80);
// HTTPS
SslContextFactory sslContextFactory = new SslContextFactory();
sslContextFactory.setKeyStorePath(
getClass().getClassLoader().getResource("keystore.jks").getFile());
sslContextFactory.setKeyStorePassword("password");
HttpConfiguration https = new HttpConfiguration();
https.addCustomizer(new SecureRequestCustomizer());
ServerConnector sslConnector = new ServerConnector(server,
new SslConnectionFactory(sslContextFactory,
HttpVersion.HTTP_1_1
.asString()),
new HttpConnectionFactory(https));
sslConnector.setPort(443);
server.setConnectors(new Connector[] {connector, sslConnector});
}
}));
}
当我运行
jar tf my_jar.jar | grep keystore
我看到它在说。
keystore.jks
当我尝试打印这个值时
getClass().getClassLoader().getResource("keystore.jks").getFile()
我明白了
file:/root/project/my_jar.jar!/keystore.jks
但是如果我运行
new File(getClass().getClassLoader().getResource("keystore.jks").getFile()).exists()
它总是 returns 错误。
如何指向位于我的 jar 文件中的 keystore.jks?它显然在那里,但无论我试图指向它什么,似乎都不起作用...
jar:file://<filesystem-path>!/<jar-path>
是 URL,从 Java 的角度来看不是文件。
这样做...
URL urlKeystore = getClass().getClassLoader().getResource("keystore.jks")
sslContextFactory.setKeyStoreResource(Resource.newResource(urlKeystore));
引用: