关于Springboot配置ssl证书使用HTTPS访问

关于Springboot配置ssl证书使用HTTPS访问

前言

最近要将原本http访问的后端项目改造成Https访问,这里做一下问题记录,也方便后来寻找的同学可以顺利转换,避免采坑。

准备材料

首先你要准备好你已经拿到了的证书文件,当时给我,我解压出来就只有这两个文件,一个是crt文件,另外一个是key文件

在这里插入图片描述

转换成.pfx格式证书

打开 https://www.chinassl.net/ssltools/convert-ssl.html 进行在线证书格式转换
这个网址也可以免费制作和生成SSL证书

在这里插入图片描述
生成完成之后点击下载
在这里插入图片描述

Springboot配置

  1. 将生成好的.pfx文件复制到你springboot项目中的resources文件目录下,并修改你的.yml文件配置:
server:
 port: 443 #这个端口就是最终你项目的访问端口,https的跳转端口
 ssl:
   key-store: classpath:你的pfx文件名称.pfx
   key-store-password: 刚才转换pfx文件设置的密码
   key-store-type: PKCS12
   enabled: true
  1. 修改你的Application启动文件,加入如下方法
/**
  * http重定向到https
  * @return
  */
   @Bean
   public ServletWebServerFactory 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(httpConnector());
       return tomcat;
}

   @Bean
   public Connector httpConnector() {
       Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
       connector.setScheme("http");
       //Connector监听的http的端口号
       connector.setPort(8080);
       connector.setSecure(false);
       //监听到http的端口号后转向到的https的端口号
       connector.setRedirectPort(443);
       return connector;
   }

测试

  1. 启动Springboot,可以看到
2020-10-10 16:40:04.072 [main] INFO  o.s.b.w.e.t.TomcatWebServer - [initialize,108] - Tomcat initialized with port(s): 443 (https) 8080 (http)
  1. 打开浏览器访问 http://localhost:8080/doc.html,这里我项目因为集成了Swagger,所以直接访问的Swagger页面地址测试。使用google浏览器第一次访问会报警告,点击选择详细信息,继续访问即可,然后你就可以看到连接自己跳转使用了https的访问方式。
    在这里插入图片描述

  2. 实际测试你可以写一个Get请求的Controller方法,返回字符串,访问http://localhost:8080/test即可,

@Controller
public class TestController {

   @ResponseBody
   @GetMapping("/test")
   public String test() {
       return "hello,World";
   }
}

配置过程中遇到的问题

我在配置完成,启动项目的过程中曾遇到了这个问题:
Caused by: java.io.IOException: DerInputStream.getLength(): lengthTag=111, too big.
	at sun.security.util.DerInputStream.getLength(DerInputStream.java:599)
	at sun.security.util.DerValue.init(DerValue.java:391)
	at sun.security.util.DerValue.<init>(DerValue.java:332)
	at sun.security.util.DerValue.<init>(DerValue.java:345)
	at sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:1938)
	at java.security.KeyStore.load(KeyStore.java:1445)
	at org.apache.tomcat.util.security.KeyStoreUtil.load(KeyStoreUtil.java:67)
	at org.apache.tomcat.util.net.SSLUtilBase.getStore(SSLUtilBase.java:216)
	at org.apache.tomcat.util.net.SSLHostConfigCertificate.getCertificateKeystore(SSLHostConfigCertificate.java:207)
	at org.apache.tomcat.util.net.SSLUtilBase.getKeyManagers(SSLUtilBase.java:282)
	at org.apache.tomcat.util.net.SSLUtilBase.createSSLContext(SSLUtilBase.java:246)
	at org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:97)
	... 26 common frames omitted

解决方法

在pom.xml中加入如下配置,过滤后缀为pkcs12、jks、pfx的证书文件。如果还加载其他文件,可以自行加入。

			<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <configuration><encoding>UTF-8</encoding>
                    <!-- 过滤后缀为pkcs12、jks、pfx的证书文件 -->
                    <nonFilteredFileExtensions>
                        <nonFilteredFileExtension>pkcs12</nonFilteredFileExtension>
                        <nonFilteredFileExtension>jks</nonFilteredFileExtension>
                        <nonFilteredFileExtension>pfx</nonFilteredFileExtension>
                    </nonFilteredFileExtensions>
                </configuration>
            </plugin>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Boot配置SSL证书以实现HTTPS访问有几个步骤。首先,你需要获取SSL证书文件。 然后,你可以按照以下步骤进行配置: 1. 将证书文件(通常是以.crt或.pfx为后缀的文件)复制到项目的资源目录下,比如src/main/resources。 2. 在项目配置文件(通常是application.properties或application.yml)中添加以下配置: ``` server.port=443 server.ssl.key-store-type=PKCS12 server.ssl.key-store=classpath:your_certificate_file.pfx server.ssl.key-store-password=your_certificate_password ``` 其中,your_certificate_file.pfx是你复制的证书文件名,your_certificate_password是证书的密码。 3. 启动项目后,你可以通过HTTPS访问你的应用程序。你可以在浏览器中输入https://localhost 来尝试。 请确保在配置过程中提供正确的证书文件和密码,并将其与你的应用程序相匹配。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [springboot配置SSL证书HTTPS访问](https://download.csdn.net/download/ningyunyuyi/10545683)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [使用SpringBoot配置https(SSL证书)](https://blog.csdn.net/yucaifu1989/article/details/124384022)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [SpringBoot配置SSL证书](https://blog.csdn.net/qq_40247570/article/details/122549072)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值