SpringBoot如何配置Https访问

众所周知,越来越多的服务在使用https协议进行交互,而对于Java项目来说,使用Spring Boot搭建服务已然是默认的选项,而springboot内置的tomcat容器,默认是使用http协议的,那如何将它转换为https协议?

理论

在我们转换http协议到https协议前,我们先来简单了解下https协议的前世今生。 https是 Hypertext Transfer Protocol Secure 的首字母缩写,是在http协议的基础之上,加入了 SSL/TLS 协议,准确的说法是 TLS1.2 或者 TLS1.3 协议。这里,我们一起看下 SSL/TLS 协议的发展历史:

1994年,网景公司 (Netscape) 发明了 SSL 协议。随着互联网的发展,一个安全的传输协议变的越来越重要和越被需要,不过由于协议的安全缺陷,1.0版本并未正式发布

1995年2月,其2.0版本,作为SSL协议的第一版正式协议发布。在2011年,IETF(Internet Engineering Task Force)组织,宣布:2.0版本由于包含众多缺陷被废弃。比如:使用 MD5 进行消息认证,缺少握手机制,使用相同的密钥进行加密、解密,等等

1996年11月,3.0版本正式发布。在2015年7月,IETF 再一次宣布,3.0版本过时被废弃,开始全面拥抱 TLS 协议

1999年1月,在 IETF 接手了 Netsccape 的 SSL 协议后,将其重命名为 TLS,并正式发布其第一个版本 TLS 1.0。但此版本,事实上只是对 SSL 3.0版本进行适当改进

2006年4月,TLS 1.1版本正式发布。该版本继续对 TLS 1.0版本进行修补。可以看出,对于 TLS 1.0及1.1版本,其本质上是 SSL 协议到 TLS 协议的过渡版本。在2018年10月,苹果、谷歌、微软、Mozilla基金会共同宣布 TLS 1.0及1.1版本,将预计在2020年3月过期,并于2021年3月正式宣布,这两个版本过期

2008年8月,TLS 1.2版本正式发布。该版本也是目前互联网的主流版本之一,改动包括了增加更多加密套件等特性。目前还没有官方说明此版本的过期时间,但是预计在2026年左右,将会宣布。

2018年8月,TLS 1.3版本正式发布。截止到现在,也是该协议的最新版本。IETF 用时10年时间,通过28项草案,最终完成该协议。协议包含了,移除不安全的技术比如 SHA-1, MD5, DES 等,并在性能上也进行了优化。目前所有的现代浏览器都支持该协议

实践

在我们对 SSL/TLS 协议有了基本了解后,我们下一步,就通过 JDK 自带的工具 keytool 生成一个带有证书的 keystore。

本文演示的JDK版本为17,Spring Boot 版本为3.1.0,其他版本同理。

在使用 keytool 时,其实并不需要死记硬背命令、参数,通过 --help 可以很容易的理解,每个命令需要哪些参数,比如:

而对于诸如 keyalg, storetype 等参数支持的选项,可以查看 JDK 源码或者 Oracle 官方文档: 参数列表,比如 -keyalg 支持的加密算法类型:

接下来,我们执行如下命令生成一个包含私钥的 keystore

batch复制代码keytool -genkeypair -alias springboot -keyalg EC -keysize 256 -validity 365 -keypass 123456 -keystore EC_keystore.jks -storepass 123456 -storetype jks

参数解释:

java复制代码-alias springboot // 指定生成的 keystore 中 entry 也就是证书的别名
-keyalg EC // 指定加密算法,RSA 是大家最常用的,这里使用其它算法演示
-keysize 256 // 指定加密算法的长度,不同算法,对应着不同的长度限制,比如 DSA,长度不能超过2048
-validity 365 // 指定证书的有效期
-keypass 123456 // 指定证书的密码
-keystore EC_keystore.jks // 指定 keystore 文件名,默认路径就是执行命令行的当前路径
-storepass 123456 // 指定 keystore 的密码
-storetype jks // 指定 keystore 的类型

在我们生成 keystore 的过程中,keytool 会根据参数做提示,比如:

Warning:JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore EC_keystore.jks -destkeystore EC_keystore.jks -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。

所以我们可以根据建议,做适当调整。


keystore 有了之后,将其拷贝到 springboot 项目中,并在启动的日志中,观察到,springboot 已经成功加载了 keystore:

打开浏览器,访问 rest url,我们可以看到,浏览器已经对我们的请求地址进行了拦截,并告知不安全的地址,因为这个证书是我们通过keytool自签名生成的,并不是浏览器认可的CA:

点击 Processeds,就可以看到服务端的返回数据了。

总结

其实将springboot配置成https的方式很简单,重点是其背后的 SSL/TLS 协议,涉及到的对称加密、非对称加密、证书、CA,在下一篇中,我们将通过 wireshark,对基于 https 协议的交互进行抓包,来了解针对 https 请求,tcp 都做了什么。

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring Boot 配置 HTTPS 访问需要以下步骤: 1. 生成证书和私钥 可以使用 OpenSSL 工具生成自签名证书和私钥。在命令行中执行以下命令: ``` openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 ``` 其中,`key.pem` 是私钥文件,`cert.pem` 是证书文件。执行命令后,会提示输入一些信息,可以根据需要填写。 2. 配置 Spring Boot 在 `application.properties` 文件中添加以下配置: ``` server.port=8443 server.ssl.key-store-type=PKCS12 server.ssl.key-store=classpath:keystore.p12 server.ssl.key-store-password=changeit server.ssl.key-alias=tomcat ``` 其中,`server.port` 是 HTTPS 端口号,`server.ssl.key-store-type` 是证书类型,`server.ssl.key-store` 是证书文件路径,`server.ssl.key-store-password` 是证书密码,`server.ssl.key-alias` 是证书别名。 3. 启动 Spring Boot 在启动 Spring Boot 时,需要添加以下 JVM 参数: ``` -Djavax.net.ssl.trustStore=classpath:keystore.p12 -Djavax.net.ssl.trustStorePassword=changeit ``` 其中,`javax.net.ssl.trustStore` 是信任证书库路径,`javax.net.ssl.trustStorePassword` 是信任证书库密码。 4. 测试 HTTPS 访问 在浏览器中输入 `https://localhost:8443`,如果能够正常访问,则说明 HTTPS 配置成功。 ### 回答2: 在开发Java Web应用程序时,保护用户的数据安全是非常重要的,这就需要配置HTTPS访问Spring Boot非常强大,可以轻松为应用程序配置HTTPS访问。在本文中,我们将学习如何配置Spring Boot应用程序以使用HTTPS访问。 1. 生成证书 第一步是为应用程序生成一个SSL证书,我们可以使用Java的keytool工具来生成证书。输入以下命令,生成证书: keytool -genkeypair -alias myapp -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore keystore.p12 -validity 3650 这会要求您设置密码和证书信息。然后,证书将存储在名为keystore.p12的文件中。 2. 配置application.properties 打开application.properties配置文件,将以下配置添加到文件末尾: server.port=8443 server.ssl.key-store=classpath:keystore.p12 server.ssl.key-store-password=123456 server.ssl.keyStoreType=PKCS12 server.ssl.keyAlias=myapp 3. 启动应用程序 现在,您可以启动应用程序并尝试使用HTTPS访问它。您可以使用任何现代Web浏览器,例如Chrome,Firefox或Safari。 在浏览器的地址栏中输入https://localhost:8443,并按回车键。您将看到浏览器中的SSL警告。这是因为浏览器不信任我们自己的证书。选择“继续前往站点(不安全)”,应用程序将在SSL的保护下打开。 这就是如何配置Spring Boot应用程序以使用HTTPS访问。现在您可以使用SSL保护您的应用程序和用户数据。 ### 回答3: Spring BootSpring框架的一个快速开发框架,能够帮助开发者迅速搭建一个完整的应用程序。对于许多企业来说,为了保证信息安全,需要使用HTTPS来保护敏感信息。本文将介绍如何在Spring Boot配置HTTPS访问。 首先,在Spring Boot配置HTTPS访问,需要准备一个SSL证书。可以使用自己的证书,也可以使用免费的Let's Encrypt证书。在本文中,我们将使用自制的证书。 创建证书的步骤如下: 1. 创建一个密钥存储库。可以使用keytool命令来完成: `keytool -genkeypair -alias tomcat -keyalg RSA -keysize 2048 -keystore keystore.jks` 2. 生成自签名的证书: `keytool -exportcert -alias tomcat -file server.crt -keystore keystore.jks` 3. 将证书添加到受信任的证书存储中: `keytool -importcert -alias tomcat -file server.crt -keystore truststore.jks` 接下来,需要配置Spring Boot应用程序,使其支持HTTPS访问。可以通过在application.properties中添加以下属性来配置: ```properties # Enable HTTPS server.ssl.enabled=true # SSL keystore server.ssl.key-store-type=JKS server.ssl.key-store=classpath:keystore.jks server.ssl.key-store-password=changeit # SSL truststore server.ssl.trust-store-type=JKS server.ssl.trust-store=classpath:truststore.jks server.ssl.trust-store-password=changeit ``` 其中: - server.ssl.enabled:用于启用HTTPS访问。 - server.ssl.key-store-type:证书存储库的类型。 - server.ssl.key-store:证书存储库的位置。 - server.ssl.key-store-password:证书的密码。 - server.ssl.trust-store-type:受信任证书存储库的类型。 - server.ssl.trust-store:受信任证书存储库的位置。 - server.ssl.trust-store-password:受信任证书的密码。 最后,启动Spring Boot应用程序,使用https://127.0.0.1:8443进行访问。在浏览器中,会看到一条警告信息:您正在尝试访问使用加密的连接。如果您不信任该连接,可以单击取消。这是由于使用的是自制的证书,浏览器不信任该证书。 总之,在Spring Boot配置HTTPS访问非常容易,只需要几步即可完成。将应用程序与HTTPS一起使用,可以更好地保护敏感信息,并增加应用程序的安全性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值