springboot + SSL证书实现https访问

本文详细介绍了如何在SpringBoot项目中配置SSL证书,实现HTTPS安全访问。从购买域名、申请免费SSL证书到下载证书并集成到项目中,再到配置HTTP转HTTPS,步骤清晰,适合本地或内网环境的开发者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     

目录

前言

ssl证书是什么?

一、准备域名

二、申请SSL证书

三、集成项目

总结


前言

因工作需要,需要配置ssl证书,所以在本地环境下实现一个demo,将http改为https访问,提高安全性


ssl证书是什么?

SSL证书和我们日常用的身份证类似,是一个支持HTTPS网站的身份证明,SSL证书里面包含了网站的域名,证书有效期,证书的颁发机构以及用于加密传输密码的公钥等信息,由于公钥加密的密码只能被在申请证书时生成的私钥解密,因此浏览器在生成密码之前需要先核对当前访问的域名与证书上绑定的域名是否一致,同时还要对证书的颁发机构进行验证,如果验证失败浏览器会给出证书错误的提示。

提示:证书对应域名跟服务器域名不一致也可实现https,但会提示连接不安全且需要接受风险后才可正常访问

一、准备域名

可以在阿里云购买域名,也可在其他网站购买,然后将域名解析到自己的服务器,这一步就不在阐述了,因为本人的本地环境为内网环境,所以后面用到了nat123来进行内网IP映射外网自定义域名,有需要的同学可以自行搜索一下

二、申请SSL证书

因为使用自签证书会提示不安全,且需要接受风险或跳过证书验证才能访问,所以我们这里使用的是阿里云的免费ssl证书

1、登陆阿里云找到ssl证书

 2、选购免费单域名证书,阿里云的证书没人每年可购买一次免费证书

 3、进入阿里云的工作台,找到自己的ssl证书,申请证书,证书申请需要填写一些信息

4、证书申请通过后点击下载,因为spring boot内嵌tomcat,所以这里下载tomcat版本就行

其他服务器类型下载,参考阿里云证书下载示例:

  • 如果您的Web服务器类型是Apache Tomcat(支持配置PFX格式、JKS格式的证书),根据要配置的证书类型进行操作:
    • 单击Tomcat后的下载,下载PFX格式的证书压缩包。
    • 单击JKS后的下载,下载JKS格式的证书压缩包。
  • 如果您的Web服务器类型是Apache(httpd)、Nginx、Internet Information Services(IIS),分别单击Apache、Nginx、IIS后的下载。
  • 如果您的Web服务器类型不在Apache Tomcat、Apache(httpd)、Nginx、IIS范围,单击其他后的下载。
  • 如果您需要将证书安装到阿里云产品上,推荐您使用证书部署功能。如果要安装证书的阿里云产品暂不支持证书部署,建议您下载适用于Nginx服务器的证书压缩包(即单击Nginx后的下载)。
  • 如果您需要在App、Java等客户端上安装根证书,单击根证书下载后的下载。

5、证书下载后在自己的磁盘找到对应的压缩包,解压后会得到两个文件,.pfx结尾的证书文件和对应的证书密码文件 

三、集成项目

1、集成项目,将pfx结尾的证书文件放入spring boot项目的resources目录下,并在yml文件中加以下配置

server:
  port: 443
  ssl:
    key-store: classpath:xxxxxx_xxx.xxx.pfx
    key-store-password: WT4hj0oz
    keyStoreType: PKCS12
  • key-store: 生成的证书文件的存储路径,其中xxxxxx_xxx.xxx.pfx 需要改为你刚刚复制进来的 .pfx 文件名
  • key-store-password: 指定签名的密码,打开下载文件中 Tomcat 文件夹中的 txt 文件,即为此处填写的密码
  • keyStoreType:为制定秘钥仓库的类型,这里我们需要填写为 PKCS12

因为https默认是443端口,所以这里的配置文件我们用的是443,那么待会儿访问项目的时候就可以不加端口号直接访问

2、配置完成后,即可通过域名访问自己的项目,因为项目中配置的是https默认端口443,所以可以直接通过域名访问

如上,就会发现网站使用的是https链接,有个安全锁的标志,并且点击锁会提示连接是安全的,证书有效。如果是自签证书虽然也是https连接,但是会提示连接不安全,证书无效 

3、实现http、https均可访问,有些情况下,会使用http来访问我们的项目,为了是项目也可正常使用,我们可以配置http访问转https,http默认80端口,也可以根据自己需要配置任意端口

启动类加上配置:

	@Bean
	public Connector connector(){
		Connector connector=new Connector("org.apache.coyote.http11.Http11NioProtocol");
		connector.setScheme("http");
		connector.setPort(80);
		connector.setSecure(false);
		connector.setRedirectPort(443);
		return connector;
	}

	@Bean
	public TomcatServletWebServerFactory tomcatServletWebServerFactory(Connector connector){
		TomcatServletWebServerFactory tomcat=new TomcatServletWebServerFactory(){
			@Override
			protected void postProcessContext(Context context) {
				SecurityConstraint securityConstraint=new SecurityConstraint();
				securityConstraint.setUserConstraint("CONFIDENTIAL");
				SecurityCollection collection=new SecurityCollection();
				collection.addMethod(DEFAULT_PROTOCOL);
				collection.addPattern("/*");
				securityConstraint.addCollection(collection);
				context.addConstraint(securityConstraint);
			}
		};
		tomcat.addAdditionalTomcatConnectors(connector);
		return tomcat;
	}

这样,我们就实现了https、http 访问spring boot项目


总结

spring boot项目配置SSL证书,需要准备域名,ssl证书,将域名解析到自己的服务器,然后通过域名申请证书,再下载适配自己项目的证书文件,通过配置文件进行相应配置,就可以进行https访问了,总体比较简单。如果是服务器在内网环境的同学,可以考虑使用nat123进行内网映射外网域名,然后再在自己的域名里根据nat123的教程添加一条解析记录,就能完美解决了。

### SpringBoot与Vue结合使用HTTPS的配置及实现方案 #### 后端SpringBoot HTTPS配置 在SpringBoot项目中启用HTTPS协议,可以通过`application.yml`文件中的SSL配置来完成。具体来说,在`server.ssl`部分设置证书路径、密码以及密钥存储类型等参数。 以下是具体的配置示例: ```yaml server: port: 8833 servlet: context-path: / ssl: enabled: true key-store: classpath:www.abc.cn.jks key-password: 1abc2def key-store-password: 1abc2def key-store-type: jks ``` 上述配置启用了服务器上的SSL功能,并指定了JKS格式的密钥库及其相关属性[^1]。 #### 前端Vue HTTPS适配 对于前端Vue应用,当其通过HTTPS连接到后端服务时,需确保API调用地址为HTTPS协议下的URL。通常情况下,可以利用环境变量或者代理方式解决跨域问题并强制使用安全通道。 如果采用axios作为HTTP客户端,则可以在创建实例时指定基础URL和拦截器处理逻辑如下所示: ```javascript import axios from 'axios'; const service = axios.create({ baseURL: "https://yourdomain.com/api", // 替换为目标域名的实际值 timeout: 5000, }); // 请求拦截器 service.interceptors.request.use(config => { const token = localStorage.getItem('token'); // 获取本地存储Token if (token) config.headers.Authorization = `Bearer ${token}`; return config; }, error => Promise.reject(error)); export default service; ``` 此代码片段定义了一个基于Axios的服务对象,默认所有的请求都会走HTTPS协议,并且加入了身份验证机制以便于保护数据交换过程的安全性[^1]。 #### 数据加密增强安全性 为进一步提高通信过程中敏感信息传递的安全等级,可考虑引入自定义注解方法对特定接口实施参数加解密操作。例如下面展示了一种可能的设计模式——@DecryptParams注解用于声明哪些字段应该被自动解码后再交给控制器层进一步解析: ```java @Target({ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) public @interface DecryptParams { /** * 拦截解密的参数名称 * * @return 参数名数组 */ String[] paramNames(); } ``` 通过这种方式能够有效防止中间人攻击(MitM),即使网络流量被捕获也无法轻易获取原始明文内容[^2]。 --- ### 总结 综上所述,为了使SpringBoot应用程序支持HTTPS并与Vue前端协同工作,主要涉及两个方面的工作:一是调整后台服务端口监听至TLS/SSL模式;二是确认前端资源加载均遵循相同原则即始终优先选用受信任CA签发的有效凭证链接形式访问远程Web API接口。此外还可以借助额外的技术手段比如AOP切面编程技术配合AES/RSA算法组合运用从而达到更深层次的数据防护目的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值