springboot项目安装SSL证书实现HTTPS访问,以若依框架为例
首先下载证书,网上有很多免费的,也可以自己购买并域名然后会对应提供证书。以腾讯云为例,下载下来的解压后如图。项目里我们操作有:1、在resource中新建cert文件,并将证书中的Tomcat文件夹中的两个文件导入到cert文件夹中。2、在yml文件中配置证书的信息,添加如下代码:ssl:# SSL 证书路径,classpath 必不可少key-store: classpath:20200427.
首先下载证书,网上有很多免费的,也可以自己购买并域名然后会对应提供证书。以腾讯云为例,下载下来的解压后如图。
项目里我们操作有:
1、在resource中新建cert文件,并将证书中的Tomcat文件夹中的两个文件导入到cert文件夹中。
2、在yml文件中配置证书的信息,添加如下代码:
ssl:
# SSL 证书路径,classpath 必不可少
key-store: classpath:20200427.jks
# SSL 证书密码
key-store-password: WQXLFRGHT
# 证书类型
key-store-type: JKS
# 证书别名
key-alias: alias
其中key-store: 填写你的证书文件,比如key-store: classpath:cert/1234567_baidu.cn.jks
key-store-password: 填写pfx-password.txt文件中的密码
(注意!!!每个属性的分号后面必须加个空格,比如port: 443,而不是port:443。否则会报server.ssl无法被解析的错误)也可以搜一下yml的书写格式,不能使用tab键来设置空格等
然后在项目的启动类里添加如下方法:
/**
* 配置一个 TomcatServletWebServerFactory bean
* 将http 重定向到 https
* @return
*/
@Bean
public TomcatServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory () {
@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(initiateHttpConnector());
return tomcat;
}
/**
* 让我们的应用支持HTTP是个好想法,但是需要重定向到HTTPS,
* 但是不能同时在application.properties中同时配置两个connector,
* 所以要以编程的方式配置HTTP connector,然后重定向到HTTPS connector
* @return Connector
*/
private Connector initiateHttpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(8080); // http端口
connector.setSecure(false);
connector.setRedirectPort(443); // application.properties中配置的https端口
return connector;
}
3、Tomcat中也需要进行证书的配置,可以参考这个博主的
Tomcat中ssl的配置
4、以上步骤都配置好后,启动项目,我遇到报错,信息如下:
23-Jun-2021 18:01:21.063 信息 [catalina-exec-25] org.apache.coyote.http11.Http11Processor.service 解析 HTTP 请求 header 错误注意:HTTP请求解析错误的进一步发生将记录在DEBUG级别。
网上搜了下,解决:tomcat高版本对url中特殊符号限制的解决方法:在server.xml文件的Connector连接器中,增加这两个属性配置
relaxedPathChars="|{}[]^" relaxedQueryChars="|{}[]^"
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="utf-8" relaxedPathChars="|{}[],%"
relaxedQueryChars="|{}[],%" />
更多推荐
所有评论(0)