Spring Boot HTTPS配置与后台调用
发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,启用HTTPSserver.port=8443server.ssl.key-store=classpath:keystore.jksserver.ssl.key-store-password=secr
千家信息网最后更新 2025年01月22日Spring Boot HTTPS配置与后台调用
启用HTTPS
server.port=8443server.ssl.key-store=classpath:keystore.jksserver.ssl.key-store-password=secretserver.ssl.key-password=another-secret
management server可以使用不同的端口,不使用HTTPS:
server.port=8443server.ssl.enabled=trueserver.ssl.key-store=classpath:store.jksserver.ssl.key-password=secretmanagement.server.port=8080management.server.ssl.enabled=false
management server也可以使用不同的key store:
server.port=8443server.ssl.enabled=trueserver.ssl.key-store=classpath:main.jksserver.ssl.key-password=secretmanagement.server.port=8080management.server.ssl.enabled=truemanagement.server.ssl.key-store=classpath:management.jksmanagement.server.ssl.key-password=secret
通过配置application.properties不支持同时启用HTTP和HTTPS,如要两者同时启用,推荐在配置文件中配置HTTPS,在程序中增加HTTP支持:
import org.apache.catalina.connector.Connector;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;import org.springframework.boot.web.servlet.server.ServletWebServerFactory;import org.springframework.context.annotation.Bean;/** * Sample Application to show Tomcat running two connectors. * * @author Brock Mills * @author Andy Wilkinson */@SpringBootApplicationpublic class SampleTomcatTwoConnectorsApplication { @Bean public ServletWebServerFactory servletContainer() { TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory(); tomcat.addAdditionalTomcatConnectors(createStandardConnector()); return tomcat; } private Connector createStandardConnector() { Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); connector.setPort(0); return connector; } public static void main(String[] args) { SpringApplication.run(SampleTomcatTwoConnectorsApplication.class, args); }}
使用keytool生成证书:
keytool -genkeypair -alias itrunner -keyalg RSA -dname "cn=www.itrunner.org, ou=itrunner, o=itrunner, c=CN" -validity 365 -keystore keystore.jks -storepass secret -storetype pkcs12
调用HTTPS REST服务
在调用HTTPS REST服务时需要配置受信证书,可使用keytool导入证书,生成trust-store文件:
keytool -import -alias "my server cert" -file server.crt -keystore my.truststore
Java默认受信证书存储在${JAVA_HOME}/jre/lib/security/cacerts内,初始密码为"changeit",可使用keytool查看:
keytool -list -keystore cacerts -v
也可自定义信任策略(TrustStrategy),忽略标准的信任验证流程。下面分别示例使用Spring RestTemplate和JAX-RS调用HTTPS REST服务,忽略验证证书和Hostname。
RestTemplate
import org.apache.http.client.HttpClient;import org.apache.http.conn.ssl.NoopHostnameVerifier;import org.apache.http.conn.ssl.SSLConnectionSocketFactory;import org.apache.http.impl.client.HttpClientBuilder;import org.apache.http.ssl.SSLContextBuilder;import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;import org.springframework.web.client.RestTemplate;import javax.net.ssl.SSLContext;import java.security.cert.X509Certificate;public class HttpsRest { public static void main(String[] args) throws Exception { SSLContext sslContext = SSLContextBuilder.create().loadTrustMaterial(null, (X509Certificate[] x509Certificates, String s) -> true).build(); SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sslContext, new String[]{"SSLv3", "TLSv1", "TLSv1.2"}, null, NoopHostnameVerifier.INSTANCE); HttpClient httpClient = HttpClientBuilder.create().setSSLSocketFactory(sslSocketFactory).build(); HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); requestFactory.setHttpClient(httpClient); RestTemplate restTemplate = new RestTemplate(requestFactory); restTemplate.postForObject(url, request, responseType); }}
JAX-RS
如使用Jboss服务器,配置如下依赖:
org.jboss.spec.javax.ws.rs jboss-jaxrs-api_2.1_spec 1.0.2.Final provided
示例代码:
import org.apache.http.conn.ssl.NoopHostnameVerifier;import org.apache.http.ssl.SSLContextBuilder;import javax.net.ssl.SSLContext;import javax.ws.rs.client.Client;import javax.ws.rs.client.ClientBuilder;import javax.ws.rs.client.Entity;import javax.ws.rs.core.MediaType;import java.security.cert.X509Certificate;public class HttpsRest { public static void main(String[] args) throws Exception { SSLContext sslContext = SSLContextBuilder.create().loadTrustMaterial(null, (X509Certificate[] x509Certificates, String s) -> true).build(); Client client = ClientBuilder.newBuilder().hostnameVerifier(NoopHostnameVerifier.INSTANCE).sslContext(sslContext).build(); Entity requestEntity = Entity.entity(new User(), MediaType.APPLICATION_JSON_TYPE); client.target(url).request().post(requestEntity, responseType); client.close(); }}
参考文档
Spring Boot Reference Guide
spring-boot-sample-tomcat-multi-connectors
配置
证书
服务
不同
同时
文件
示例
支持
生成
验证
代码
密码
文档
服务器
标准
流程
程序
端口
策略
自定
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全山石
数据库课程设计总结文档
学校开展网络安全大讲堂
服务器排程
中国人民大学统计大数据库
衢州嵌入式软件开发流程八个步骤
我的世界咋进最强斗罗服务器手机
数据库技术基础的答案
软件开发常用颜色
服务器大数据工程师
四川奥派信息网络技术公司
网络技术章节题答案
最好用的服务器系统
网络技术应用教材内容
西安智慧食堂系统软件开发定制
服务器固态硬盘接口图解
网络安全 杭州
手机app软件开发收费
山东刷脸互联网科技有限公司
ios软件开发费用标准
医药市场数据库
云服务器备案过了腾讯审核
服务器开机显示超频
社区网络安全小视频怎么拍
公务员网络技术管理
数据库只显示24行
做银行业务的软件开发
社会网络安全ppt
校园网络安全宣传标语
网络安全国家一级期刊