当前位置: 首页 > news >正文

Java + 阿里云 Gmsse 实现 SSL 国密通信

前言

解决接口或页面仅密信浏览器(或 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.lqws.cn/news/578017.html

相关文章:

  • 用基础模型构建应用(第四章)AI Engineering: Building Applications with Foundation Models学习笔记
  • Springboot + vue + uni-app小程序web端全套家具商场
  • MongoDB 安装使用教程
  • 第81题:搜索旋转排序数组Ⅱ
  • 【软考高项论文】论信息系统项目的干系人管理
  • 百度文库智能PPT月访问量超3400万,用户规模翻倍增长
  • 中钧科技亮相2025 亚欧商品贸易博览会,赋能数字经济新未来!
  • pyspark driver 上传pod本地文件到对象存储
  • AWS 开源 Strands Agents SDK,简化 AI 代理开发流程
  • Hive SQL 实战:电商销售数据分析全流程案例
  • Git远程仓库迁移与分支关联技术分享
  • 【Python使用】嘿马python运维开发全体系教程第2篇:日志管理,Linux概述【附代码文档】
  • 【硬核数学 · LLM篇】3.1 Transformer之心:自注意力机制的线性代数解构《从零构建机器学习、深度学习到LLM的数学认知》
  • Android Compose Modifier 详细解析
  • K8s-Pod深度解析
  • 鸿蒙进阶——Mindspore Lite AI框架源码解读之模型加载详解(五)
  • 阶段二开始-第一章—8天Python从入门到精通【itheima】-121节+122节(函数和方法的类型注解+Union联合类型注解)
  • Ruby 安装使用教程
  • 单例模式7种实现
  • Golang的多环境配置
  • Golang快速开发框架——项目立项与系统配置读取组件viper(一)
  • uni-app使用uview2自定义tabber
  • camera调试:安卓添加xml注册
  • 【软考高项论文】论信息系统项目的整体管理
  • Java 图书管理系统
  • 使用Verilog设计模块输出中位数,尽可能较少资源使用
  • 华为智选焕新鸿蒙智选,继续携手IAM赋能智慧家居健康生态协同演进
  • SmartDV推出先进的H.264和H.265视频编码器和解码器IP
  • Flutter 布局之 IntrinsicHeight 组件
  • 类图+案例+代码详解:软件设计模式----生成器模式(建造者模式)