前言

解决接口或页面仅密信浏览器(或 360 国密浏览器)能访问的问题

测试页面

测试网站-中国银行:https://ebssec.boc.cn/boc15/help.html

  • 使用其他浏览器(google,edge等)打开
    在这里插入图片描述
  • 使用密信浏览器打开
    在这里插入图片描述

解决方案

如果你想在 Java 中简单地发起使用国密(GM/T)算法的 HTTPS 请求,推荐直接使用 阿里云开源的 gm-jsse。它封装成一个 Maven 包,使用方式极其简洁,只需引入依赖即可:

<dependency><groupId>com.aliyun</groupId><artifactId>gmsse</artifactId><version>1.3.1</version>
</dependency>

然后在代码中用它来初始化 SSLContext – 一行即可启用国密套件:

package com.example.sm4;import cn.hutool.core.date.DateUtil;
import cn.hutool.crypto.SecureUtil;
import com.aliyun.gmsse.GMProvider;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;@Slf4j
public class GmSSLHttpsClient {private static final String baseUrl = "xxx";public static void main(String[] args) {GmSSLHttpsClient.query();}@SneakyThrowspublic static void query() {GMProvider provider = new GMProvider();SSLContext sc = SSLContext.getInstance("TLS", provider);TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {public void checkClientTrusted(X509Certificate[] chain, String authType) {}public void checkServerTrusted(X509Certificate[] chain, String authType) {}public X509Certificate[] getAcceptedIssuers() {return new X509Certificate[0];}}};sc.init(null, trustAllCerts, new SecureRandom());// 创建HTTPS连接URL url = new URL(baseUrl);HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();// 设置请求方法connection.setRequestMethod("GET");// 时间戳,30分钟有效String timestamp = DateUtil.current() + "";// 签名String data = "xxx" + timestamp;String sign = SecureUtil.md5().digestHex(data);// 设置请求头connection.setRequestProperty("timestamp", timestamp);connection.setRequestProperty("sign", sign);connection.setRequestProperty("Accept", "application/json");log.info("请求url:{}", baseUrl);log.info("请求参数,timestamp:{}", timestamp);log.info("请求参数,sign:{}", sign);connection.setSSLSocketFactory(sc.getSocketFactory());connection.connect();log.info("Cipher Suite: " + connection.getCipherSuite());// 读取响应内容try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8))) {String line;while ((line = reader.readLine()) != null) {log.info("响应参数:{}", line);}}connection.disconnect();}}

这个库支持 SM2/SM3/SM4 等国密算法,SSL/TLS 通信全链路纯 Java 实现,示例:
github.com
国密TLS设计和实现
腾讯Kona国密套件对外开源

更深入说明

  • gm-jsse 是 Apache-2.0 开源许可,纯 Java 实现,不依赖 JNI 或底层 C 库,适合快速集成
  • 支持国密 HTTPS 的双向认证,只需设置 KeyManager 和 TrustManager 即可完成客户端证书和信任链配置 。
  • 如果你想探索更底层或更全面的支持,比如服务端 TLS、证书管理、命令行工具,也可以看看 GmSSL(北京大学团队)附国密SSL实验室

总结推荐

场景推荐库说明
简单的 Java 客户端国密 HTTPSgm-jsse一行代码启用,纯 Java,适合快速用
带命令行工具、高度定制和服务端支持GmSSLC/C++ 实现,功能更全面,需 JNI/包构建

后续建议

  • 在项目中添加 gm-jsse 依赖,写几行代码测试连接即可;
  • 如果需要国密服务器的 CA 或双向认证,按照 README 中的示例补 TrustManager/KeyManager;
  • 想更深入定制或者做服务端,也可以考虑 GmSSL Java 绑定。

源码

https://gitee.com/zhaomingjian/workspace_luoan_demo/tree/master/spring-boot-sm4

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/86923.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/86923.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/86923.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国产数据库分类总结

文章目录 一、华为系数据库1. 华为 GaussDB 二、阿里系数据库1. 阿里云 OceanBase2. PolarDB&#xff08;阿里云自研&#xff09; 三、腾讯系数据库1. TDSQL&#xff08;腾讯云&#xff09;2. TBase&#xff08;PostgreSQL增强版&#xff09; 四、传统国产数据库1. 达梦数据库&…

解密闭包:函数如何记住外部变量

&#x1f9e0; 什么是闭包&#xff1f; 闭包是一个函数对象&#xff0c;它不仅记住它的代码逻辑&#xff0c;还记住了定义它时的自由变量&#xff08;即非全局也非局部&#xff0c;但被内部函数引用的变量&#xff09;。即使外部函数已经执行完毕&#xff0c;这些自由变量的值…

I2C协议详解及STM32 HAL库硬件I2C卡死问题分析

一、I2C协议详解 1. I2C协议概述 Inter-Integrated Circuit (I2C) 是由 Philips 半导体&#xff08;现 NXP 半导体&#xff09;于 1980 年代设计的一种同步串行通信总线协议。该协议采用半双工通信模式&#xff0c;支持多主从架构&#xff0c;专为短距离、低速率的芯片间通信…

HTTP协议-后端接收请求

起因就是不知道post这个请求体中这些格式有什么区别&#xff0c;后端又怎么去接收这些不同格式的内容 Get请求 get请求是比较简单的一类 正常的直接用参数接收&#xff08;不写的话名字要匹配&#xff09;或者RequestParam都可以接收&#xff0c;用对象绑定也可以 resultful…

HTML5 实现的圣诞主题网站源码,使用了 HTML5 和 CSS3 技术,界面美观、节日氛围浓厚。

以下是一个 HTML5 实现的圣诞主题网站源码&#xff0c;使用了 HTML5 和 CSS3 技术&#xff0c;界面美观、节日氛围浓厚。它包括&#xff1a; 圣诞树动画 &#x1f384;雪花飘落特效 ❄️圣诞祝福语 &#x1f381;响应式布局&#xff0c;适配移动端 你可以将代码保存为 index.…

Spring Cloud Bus 和 Spring Cloud Stream

Spring Cloud Bus 和 Spring Cloud Stream 都是 Spring Cloud 生态中的消息通信组件&#xff0c;但它们的定位和使用场景有显著区别&#xff1a; 1. Spring Cloud Bus 核心定位&#xff1a;分布式系统的消息广播&#xff08;配置刷新、事件传播&#xff09;。 典型场景&#x…

磁悬浮轴承位移信号的高精度估计:卡尔曼滤波算法深度解析

无需位移传感器,滤波算法如何实现微米级精度? 磁悬浮轴承作为革命性的非接触式支承技术,凭借无磨损、无需润滑、高转速等优势,在飞轮储能、高速电机、人工心脏泵和航空航天领域获得了广泛应用。其核心控制依赖于对转子位移信号的高精度实时检测,传统电涡流传感器虽能提供位…

DAY 43 预训练模型

目录 一、预训练的概念 二、 经典的预训练模型 2.1 CNN架构预训练模型 2.2 Transformer类预训练模型 2.3 自监督预训练模型 三、常见的分类预训练模型介绍 3.1 预训练模型的发展史 3.2 预训练模型的训练策略 知识点回顾&#xff1a; 预训练的概念常见的分类预训练模型图像…

Redis:事物

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Redis &#x1f525; 什么是事务 Redis的事务和MySQL的事务概念上是类似的.都是把⼀系列操作绑定成⼀组.让这⼀组能够批量执⾏. 但是注意体会Redis的事务和MySQL事务的区别: 弱化的原⼦性:redi…

CppCon 2018 学习:An allocator is a handle to a heap Lessons learned from std::pmr

“An allocator is a handle to a heap — Lessons learned from std::pmr” 翻译过来就是&#xff1a;“分配器&#xff08;allocator&#xff09;是对堆&#xff08;heap&#xff09;的一种句柄&#xff08;handle&#xff09;——从 std::pmr 中学到的经验”。 基础概念 分…

设备健康实时监测方法演进:从传感网络到AI决策树的工业智能实践

引言&#xff1a;当设备运维遇上AIoT革命 在工业4.0进程中&#xff0c;​毫秒级设备状态捕获能力正成为智能工厂的核心竞争力。传统监测方法因数据滞后、诊断粗放被诟病&#xff0c;本文将深入探讨三大前沿实时监测技术路径&#xff0c;并揭秘中讯烛龙系统如何通过深度强化学习…

剑指offer53_二叉树的深度

二叉树的深度 输入一棵二叉树的根结点&#xff0c;求该树的深度。 从根结点到叶结点依次经过的结点&#xff08;含根、叶结点&#xff09;形成树的一条路径&#xff0c;最长路径的长度为树的深度。 数据范围 树中节点数量 [ 0 , 500 ] [0,500] [0,500]。 样例 输入&#…

探秘AI的秘密:leaked-system-prompts

揭秘:揭秘系统提示合集背后的秘密 在当今这个人工智能技术迅速发展的时代,了解和使用大型语言模型(LLM)已成为技术爱好者、开发者和研究人员的共同目标。而作为核心组成部分,系统提示(system prompts)的设计和应用直接影响了LLM的表现和功能。今天, 我们将为大家揭示一…

Gaming Mode四大功能(VRR、QMS、QFT、ALLM)

HDMI 2.1定义的Gaming Mode四大功能&#xff08;VRR、QMS、QFT、ALLM&#xff09;通过协同优化帧传输、刷新率同步与延迟控制&#xff0c;显著提升了游戏和影音的流畅性与响应速度。以下是这些功能的详细解析及其应用价值&#xff1a; &#x1f504; 1. 可变刷新率&#xff08;…

数据库总结(关系代数-函数依赖-范式)

以下是关系代数中基本操作的详细说明&#xff1a; 并&#xff08;Union&#xff09; 关系R和S的并操作表示为R ∪ S&#xff0c;要求R和S具有相同的属性集&#xff08;并相容性&#xff09;。结果包含所有属于R或S的元组&#xff0c;自动去除重复项。 示例&#xff1a; R …

react经验:在nextjs中使用motion组件

什么是motion组件&#xff1f; 一种动画组件 motion组件文档 在nextjs中的应用步骤 1.安装motion npm i framer-motion2.在next.config.js中配置转义 export default {transpilePackages: [framer-motion] }3.开始应用 **注意要点&#xff1a;**在服务端渲染不可直接用&am…

怎样大语言模型 遵守规则

如何让应用中的提示工程更能适应未来变化 目录 如何让应用中的提示工程更能适应未来变化怎样大语言模型 遵守规则提示词 很有效:Memorize these rules提示可分为稳定组件和易变组件怎样大语言模型 遵守规则 实验背景:让大语言模型可靠地遵守规则很难,尤其是规则数量增多时。…

如何通过SSL证书配置防止源站IP泄露 - 全面防护指南

问题背景&#xff1a;SSL证书如何导致源站IP泄露 近期多位站长反馈&#xff0c;即使已部署高防CDN并做好源站IP保密工作&#xff0c;服务器仍频繁遭受DDoS攻击。经深入排查&#xff0c;发现问题根源在于SSL证书。当前网络环境中存在大量爬虫工具24小时不间断扫描全网IP地址&am…

医院信息化发展要经过哪几个阶段

目前&#xff0c;几乎所有的医院都离不开信息技术的建设和支持。没有信息技术&#xff0c;医院的业务可能无法继续。医院信息化的发展主要经历三个阶段&#xff0c;即医院管理信息化阶段、临床管理信息化阶段和医疗智能化阶段。从基础设施的角度来看&#xff0c;每个阶段都有不…

【Vscode】Vscode切换成中文语言

安装中文语言包 启动 VSCode。按下Ctrl Shift X&#xff08;或者点击左侧边栏的扩展图标&#xff09;&#xff0c;打开扩展面板。在搜索框中输入Chinese (Simplified)&#xff0c;在搜索结果里找到Chinese (Simplified) Language Pack for Visual Studio Code并点击安装按钮…