springBoot发布https服务及调用
一、服务端发布https服务1、准备SSL证书1自签名证书如果你只是用于开发或测试环境可以生成一个自签名证书。2CA 签名证书对于生产环境应该使用由受信任的证书颁发机构 (CA) 签名的证书。这里采用生成自签名证书可以使用keytool工具生成自签名证书jdk工具keytool -genkeypair -alias myapp -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore keystore.p12 -validity 3650这将创建一个有效期为 10 年的自签名证书并将其存储在keystore.p12文件中。你需要提供一些信息如组织名称等。注意记住密码和别名。如下图2、配置springboot启用HTTPS并指定SSL证书的位置和密码用application.properties或application.yml都可以。这样配置可以读取环境变量把证书放在resource的ssl目录下server: port: 8443 ssl: enabled: ${SSL_ENABLED:true} key-store: ${SSL_KEY_STORE:classpath:ssl/keystore.p12} key-store-password: ${SSL_KEY_STORE_PASSWORD:myapptest} keyStoreType: ${SSL_KEY_STORE_TYPE:PKCS12} keyAlias: ${SSL_KEY_ALIAS:myapp}启动服务即可通过https访问了默认可以设置成false3、配置docker容器启动https把证书放在ssl目录下version: 3 services: test-https: image: openjdk:8-jdk container_name: test-https restart: always ports: - 22443:22443 command: java -jar /opt/test-https.jar volumes: - /home/services/test/:/opt/ - /home/services/test/config/:/config/ - /home/services/test/ssl/:/ssl/ - /home/services/test/template_server/:/template_server/ - /home/services/test/patch/:/patch/ - /home/log/test/:/logs/ environment: - TZAsia/Shanghai - SERVICE_HOST${HOST_IP} - server.port22443 - NACOS_NAMESPACE${NACOS_NAMESPACE} - NACOS_ADDR${NACOS_ADDR} #开启https,如果不开启则配置为false - SSL_ENABLEDtrue #以下配置根据实际证书配置 - SSL_KEY_STOREssl/keystore.p12 - SSL_KEY_STORE_PASSWORDmyapptest - SSL_KEY_STORE_TYPEPKCS12 - SSL_KEY_ALIASmyapp - JAVA_OPTS-Xmx512m -XX:G1ConcRefinementThreads4 -XX:MaxDirectMemorySize1G二、通过httpinvoke方法https服务跳过证书校验public class HttpInvokerRequestExecutorWithSession extends SimpleHttpInvokerRequestExecutor { private int connectTimeout0; private int readTimeout0; private SSLContext sslContext; private HostnameVerifier hostnameVerifier; private void initSsl() { try { sslContext SSLContext.getInstance(TLS); sslContext.init(null, new TrustManager[]{new X509TrustManager() { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) {} public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) {} }}, new SecureRandom()); } catch (KeyManagementException | NoSuchAlgorithmException e) { logger.error(ssl init error:,e); throw new MsrRuntimeException(e.getMessage()); } hostnameVerifier (hostname, session) - true; } /** * * (non-Javadoc) * * see org.springframework.remoting.httpinvoker.SimpleHttpInvokerRequestExecutor * #prepareConnection(java.net.HttpURLConnection, int) */ protected void prepareConnection(HttpURLConnection con, int contentLength) throws IOException { super.prepareConnection(con, contentLength); if (con instanceof HttpsURLConnection) { if (sslContext null) { initSsl(); } ((HttpsURLConnection) con).setSSLSocketFactory(sslContext.getSocketFactory()); ((HttpsURLConnection) con).setHostnameVerifier(hostnameVerifier); } con.setConnectTimeout(connectTimeout); con.setReadTimeout(readTimeout); } /** * * (non-Javadoc) * * see org.springframework.remoting.httpinvoker.SimpleHttpInvokerRequestExecutor * #validateResponse(org.springframework.remoting.httpinvoker.HttpInvokerClientConfiguration, * java.net.HttpURLConnection) */ protected void validateResponse(HttpInvokerClientConfiguration config, HttpURLConnection con) throws IOException { super.validateResponse(config, con); } public int getConnectTimeout() { return connectTimeout; } public void setConnectTimeout(int connectTimeout) { this.connectTimeout connectTimeout; } public int getReadTimeout() { return readTimeout; } public void setReadTimeout(int readTimeout) { this.readTimeout readTimeout; } }三、feign接口调用https服务跳过证书校验。feign接口的地址还是正常配置http或https都支持import feign.Client; import feign.Contract; import feign.RequestInterceptor; import feign.codec.ErrorDecoder; import feign.jaxrs.JAXRSContract; import okhttp3.ConnectionPool; import okhttp3.OkHttpClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import java.security.SecureRandom; import java.security.cert.X509Certificate; import java.util.concurrent.TimeUnit; Configuration public class FeignConfiguration { Autowired private BusinessConfig businessConfig; /** * yaml中的配置未生效暂时在配置类中配置 */ Bean public Contract getFeignContract() { return new JAXRSContract(); } Bean public ErrorDecoder getFeignErrorDecoder() { return new FeignExceptionDecoder(); } Bean public OkHttpClient okHttpClient() { if(businessConfig.getRootServiceUrl() ! null businessConfig.getRootServiceUrl().contains(https)){ try { TrustManager[] trustManagers getTrustManager(); if (trustManagers null || trustManagers.length 0) { throw new IllegalStateException(Failed to create trust managers); } SSLSocketFactory sslSocketFactory getSSLSocketFactory(); if (sslSocketFactory null) { throw new IllegalStateException(Failed to initialize SSL socket factory); } return new OkHttpClient.Builder() .readTimeout(60, TimeUnit.SECONDS) .connectTimeout(60, TimeUnit.SECONDS) .writeTimeout(120, TimeUnit.SECONDS) .connectionPool(new ConnectionPool()) .sslSocketFactory(sslSocketFactory, (X509TrustManager) trustManagers[0]) .hostnameVerifier((hostname, session) - true) .build(); } catch (Exception e) { throw new RuntimeException(Failed to create OkHttpClient, e); } } return new OkHttpClient.Builder() .readTimeout(60, TimeUnit.SECONDS) .connectTimeout(60, TimeUnit.SECONDS) .writeTimeout(120, TimeUnit.SECONDS) .connectionPool(new ConnectionPool()) .build(); } Bean public RequestInterceptor requestInterceptor() { return new CustomRequestInterceptor(businessConfig); } Bean public Client feignClient(OkHttpClient okHttpClient) { return new CustomClient(new feign.okhttp.OkHttpClient(okHttpClient)); } private TrustManager[] getTrustManager() { try { TrustManager[] trustAllCerts new TrustManager[]{ new X509TrustManager() { public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; } public void checkClientTrusted(X509Certificate[] certs, String authType) {} public void checkServerTrusted(X509Certificate[] certs, String authType) {} } }; return trustAllCerts; } catch (Exception e) { throw new RuntimeException(e); } } private SSLSocketFactory getSSLSocketFactory() { try { SSLContext sc SSLContext.getInstance(TLS); sc.init(null, getTrustManager(), new SecureRandom()); return sc.getSocketFactory(); } catch (Exception e) { throw new RuntimeException(e); } } }

相关新闻

智慧乡村管理系统项目。将 DeepSeek 大模型 接入传统的 Spring Boot + Vue 业务系统,实现了从“信息化管理”到“智能化服务”

智慧乡村管理系统项目。将 DeepSeek 大模型 接入传统的 Spring Boot + Vue 业务系统,实现了从“信息化管理”到“智能化服务”

智慧乡村管理系统,接入deepseek大模型,实现AI智能问答,最近刚刚完成的项目 Springboot Vue 技术栈搭建,采用 MySQL 数据库,运行于 jdk1.8 和 mysql8.0 环境。亮点创新:接入deepseek大模型,系统…

2026/7/5 0:52:52 阅读更多 →
前端核心技术要点 之 【Pinia 状态管理核心原理】

前端核心技术要点 之 【Pinia 状态管理核心原理】

Pinia 相比 Vuex 更简洁,其核心优势在于天然的 TypeScript 支持和 Composition API 风格。 重点难点: store 实例化机制:defineStore 返回函数而非直接对象响应式状态管理:状态变更的追踪和更新机制插件扩展机制:如何开…

2026/5/17 9:31:33 阅读更多 →
基于Java+SSM+Django大学生校园招聘网(源码+LW+调试文档+讲解等)/大学生招聘/校园招聘/应届生招聘/招聘网站/大学生求职/高校毕业生就业/校园招聘会/大学生找工作/就业信息网

基于Java+SSM+Django大学生校园招聘网(源码+LW+调试文档+讲解等)/大学生招聘/校园招聘/应届生招聘/招聘网站/大学生求职/高校毕业生就业/校园招聘会/大学生找工作/就业信息网

博主介绍 💗博主介绍:✌全栈领域优质创作者,专注于Java、小程序、Python技术领域和计算机毕业项目实战✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 2025-2026年最新1000个热门Java毕业设计选题…

2026/5/17 9:31:32 阅读更多 →

最新新闻

DockDoor终极指南:重新定义macOS窗口管理与效率革命

DockDoor终极指南:重新定义macOS窗口管理与效率革命

DockDoor终极指南:重新定义macOS窗口管理与效率革命 【免费下载链接】DockDoor Window peeking, alt-tab and other enhancements for macOS 项目地址: https://gitcode.com/gh_mirrors/do/DockDoor 你是否曾经在macOS上同时打开多个窗口,却为频繁…

2026/7/5 0:52:02 阅读更多 →
Elsevier Tracker:科研投稿状态监控的终极解决方案

Elsevier Tracker:科研投稿状态监控的终极解决方案

Elsevier Tracker:科研投稿状态监控的终极解决方案 【免费下载链接】Elsevier-Tracker 项目地址: https://gitcode.com/gh_mirrors/el/Elsevier-Tracker 还在为每天反复登录Elsevier系统查看论文审稿状态而烦恼吗?想象一下,当你提交了…

2026/7/5 0:52:02 阅读更多 →
5步轻松掌握Winhance:Windows系统优化终极指南

5步轻松掌握Winhance:Windows系统优化终极指南

5步轻松掌握Winhance:Windows系统优化终极指南 【免费下载链接】Winhance-zh_CN A Chinese version of Winhance. C# application designed to optimize and customize your Windows experience. 项目地址: https://gitcode.com/gh_mirrors/wi/Winhance-zh_CN …

2026/7/5 0:50:01 阅读更多 →
TB9051FTG与PIC18F67K40实现直流电机静音驱动方案

TB9051FTG与PIC18F67K40实现直流电机静音驱动方案

1. 项目背景与核心挑战直流电机在工业自动化、消费电子和机器人领域的应用越来越广泛,但传统驱动方案存在明显的噪声问题。这种噪声主要来源于两个方面:PWM开关频率引起的电磁噪声,以及电机换向时电流突变产生的机械振动。TB9051FTG这款H桥驱…

2026/7/5 0:48:00 阅读更多 →
终极解决方案:用ChromaControl实现所有RGB设备在雷蛇生态中的完美同步

终极解决方案:用ChromaControl实现所有RGB设备在雷蛇生态中的完美同步

终极解决方案:用ChromaControl实现所有RGB设备在雷蛇生态中的完美同步 【免费下载链接】ChromaControl 3rd party device lighting support for Razer Synapse. 项目地址: https://gitcode.com/gh_mirrors/ch/ChromaControl 还在为桌面上不同品牌的RGB设备各…

2026/7/5 0:45:59 阅读更多 →
Ceph自动化运维开发:openeuler/ceph_dev中Ansible与Terraform集成

Ceph自动化运维开发:openeuler/ceph_dev中Ansible与Terraform集成

Ceph自动化运维开发:openeuler/ceph_dev中Ansible与Terraform集成 【免费下载链接】ceph_dev ceph_dev is a project focus on some feature developing based on ceph 项目地址: https://gitcode.com/openeuler/ceph_dev 前往项目官网免费下载:h…

2026/7/5 0:43:58 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻