腾讯云下载的证书,解压后的文件结构为:
SpringBoot 只需要 tomcat 下的文件即可
tomcat下的文件:
keystorePass.txt :保存证书密码
www...jks:JKS 证书
注意:
这里的 JKS 证书下载下来时的名称为:域名.jks。要在 SpringBoot 中使用的话,必须将文件名修改为不含 "." 的名称,否则将证书文件放入 resources 文件夹下后,因为证书名称含有多个 "." ,SpringBoot 将无法找到证书文件
将 JKS 证书拷贝至 SpringBoot 项目的 resources 文件夹下,与 application.properties 同级
配置文件加上以下配置项:
注意:如果原来有启动端口的设置,可以先改为 443
# ssl配置 # https加密端口号 443 # 服务器运行端口 server.port=443 # SSL证书路径 一定要加上classpath,证书名只能有一个后缀,否则找不到不到文件,如:name.cn.jks 则找不到 server.ssl.key-store=classpath:证书名.jks # SSL证书密码 server.ssl.key-store-password=证书密码 # 证书类型 server.ssl.key-store-type=JKS # 证书别名,建议设置为证书域名,否则可能报错(Invalid keystore format),如:www.baidu.cn server.ssl.key-alias=证书别名jks 文件在 resources 中存放时,Maven 打包过程中可能通过编译、压缩等破坏该文件,所以添加以下配置,打包时不处理 jks 文件
<build> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <configuration> <nonFilteredFileExtensions> <!-- 避免 https 证书文件被修改 --> <nonFilteredFileExtension>jks</nonFilteredFileExtension> </nonFilteredFileExtensions> </configuration> </plugin> </build>通过上面的配置服务器已经可以启动了,运行 SpringBoot 应用即可启动。
启动后访问浏览器 127.0.0.1:8080 会提示 Bad Request,为什么呢?
----问:为什么要访问 8080 端口,不是配置端口为 443 了吗?
----答:使用 SSL 证书后,配置的端口已经是 HTTPS 的访问端口了。
这里没有加协议头,默认使用 HTTP 访问。
再想想,当我们的项目不配置运行端口时,默认的是不是 8080 呢?
所以这里也一样,默认的 HTTP 端口就是 8080。
因为默认浏览器使用 http 协议发起请求,但是服务器配置 SSL 证书后就只接受 HTTPS 的请求了。
再次测试,浏览器访问:https://127.0.0.1 ,访问成功,HTTPS 默认使用 443 端口,所以不用加端口号。
这就有问题了,我们输域名地址时,谁会故意加上 HTTPS?
所以就有了第三步,重定向
重要变量都加了注释,使用上面的启动类还要在配置文件中添加以下配置项:
# 配置服务器运行端口 server.port=443 # http 监听端口,用于重定向到 https 端口 server.port.http=80经过上面的配置后,就可以启动 SpringBoot 应用了
启动后,浏览器访问 127.0.0.1 会发现会自动重定向到 https://127.0.0.1