springboot中server.ssl.key-store配置路径的问题小结
作者:丸子的博客
springboot中server.ssl.key-store配置路径的问题
在yml中配置路径为: key-store: classpath:xtszhcj.jks 启动服务报错: 获取的路径前有tomcat.basedir路径file:的字样+classpath(正确路径),导致取不到对应路径文件报错。
原因:
之前一直可以用,发现有人将tomcat版本改为8.0.21,之前使用tomcat版本为8.5.16。改为8.5.16就好了。
源码追踪,发现获取key-store路径前会加file:导致获取不到文件后,自动前面加上tomcat.basedir.所以日志打印中有上诉路径找不到。具体为什么会加file:没有再去跟踪代码。
扩展:
Spring Boot SSL(https)实例
此篇博文记录了在web程序中使用自签名的SSL(HTTPS)证书及创建SSL认证。
SSL关键的配置
Spring Boot中HTTPS的配置(application.properties)
server.port=8443 server.ssl.key-alias=selfsigned_localhost_sslserver server.ssl.key-password=changeit server.ssl.key-store=classpath:ssl-server.jks server.ssl.key-store-provider=SUN server.ssl.key-store-type=JKS
将HTTP重定向到HTTPS
private Connector redirectConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(8080);
connector.setSecure(false);
connector.setRedirectPort(8443);
return connector;
}基本概念
SSL:安全套接字层(Secure Sockets Layer)。此协议用于两个系统网络连接和传输时对数据的加密。传输过程中防止了黑客的读取和窜改。
TLS:传输层安全(Transport Layer Security)相对于SSL更加的安全,相当于SSL的升级版。目前所有的ca(certificate authorities)机构都是基于TLS的,但是目前在互联网上SSL更加流行。
HTTPS:超文本传输协议安全(Hyper Text Transfer Protocol Secure)在web网站上使用了SSL。这样会比HTTP更加安全。
信任库及密钥库(Truststore and Keystore):这两个库都是存储了SSL证书。truststore存储了公钥信息,keystore存储私钥信息。
下面是创建自签名证书
keytool -genkey -alias selfsigned_localhost_sslserver -keyalg RSA -keysize 2048 -validity 700 -keypass changeit -storepass changeit -keystore ssl-server.jks
解析下:
-genkey:生成证书;
-alias selfsigned_localhost_sslserver:设置证书的别名;
-keyalg RSA -keysize 2048 -validity 700:truststore和keystore的密码;
-keystore ssl-server.jks:存储密钥的文件。其中JKS的含义是Java Key Store
执行完上面的代码后,会询问一些问题如下:

查看jks中的证书信息:

下面是关于程序方面的内容
添加RESTful接口
@RestController
class SecuredServerController{
@RequestMapping("/secured")
public String secured(){
System.out.println("Inside secured()");
return "Hello user !!! : " + new Date();
}
}将ssl-server.jks放到resources中在application.properties中配置如下:
server.port=8443 server.ssl.key-alias=selfsigned_localhost_sslserver server.ssl.key-password=changeit server.ssl.key-store=classpath:ssl-server.jks server.ssl.key-store-provider=SUN server.ssl.key-store-type=JKS
这样Spring Boot就配置好HTTPS了
url输入https://localhost:8443/secured
就进入了https站点了

将HTTP重定向到HTTPS
将8080端口重定向到8443上面:
@Bean
public EmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
securityConstraint.addCollection(collection);
context.addConstraint(securityConstraint);
}
};
tomcat.addAdditionalTomcatConnectors(redirectConnector());
return tomcat;
}
private Connector redirectConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(8080);
connector.setSecure(false);
connector.setRedirectPort(8443);
return connector;
}源码打包下载地址:
https://github.com/fengfanchen/Java/tree/master/ssl-server
到此这篇关于springboot中server.ssl.key-store配置路径的问题的文章就介绍到这了,更多相关springboot server.ssl.key-store配置路径内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
- springboot整合websocket后启动报错(javax.websocket.server.ServerContainer not available)
- SpringBoot服务设置禁止server.point端口的使用
- 使用Java和SpringBoot实现服务器发送事件(Server-Sent Events)
- SpringBoot中的server.context-path的实现
- SpringBoot实现Server-Sent Events(SSE)的使用完整指南
- SpringBoot开启server:compression:enabled(Illegal character ((CTRL-CHAR, code 31)))的问题解决
