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

【java】在springboot中实现证书双向验证

证书生成

public static void main(String[] args) throws Exception {// 生成密钥对KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");keyPairGenerator.initialize(2048);KeyPair keyPair = keyPairGenerator.generateKeyPair();// 获取私钥和公钥PrivateKey privateKey = keyPair.getPrivate();PublicKey publicKey = keyPair.getPublic();// 打印私钥和公钥System.out.println("Private Key (Base64): " + Base64.getEncoder().encodeToString(privateKey.getEncoded()));System.out.println("Public Key (Base64): " + Base64.getEncoder().encodeToString(publicKey.getEncoded()));// 生成证书X500Name subject = new X500Name("CN=localhosttt, O=demo1, L=City, ST=State, C=US");X500Name issuer = subject;BigInteger serialNumber = new BigInteger(64, new SecureRandom());Date notBefore = new Date(System.currentTimeMillis() - 10000);Date notAfter = new Date(System.currentTimeMillis() + 365L * 24 * 60 * 60 * 1000);JcaX509v3CertificateBuilder certBuilder = new JcaX509v3CertificateBuilder(issuer, serialNumber, notBefore, notAfter, subject, keyPair.getPublic());ContentSigner signer = new JcaContentSignerBuilder("SHA256withRSA").build(keyPair.getPrivate());X509Certificate cert = new JcaX509CertificateConverter().getCertificate(certBuilder.build(signer));// 将证书和私钥存入 KeyStoreKeyStore keyStore = KeyStore.getInstance("JKS");keyStore.load(null, null);keyStore.setCertificateEntry("mycert", cert);keyStore.setKeyEntry("mykey", keyPair.getPrivate(), "password".toCharArray(), new Certificate[]{cert});// 保存到文件try (FileOutputStream fos = new FileOutputStream("keystore.jks")) {keyStore.store(fos, "password".toCharArray());}// 导出为 CRT 文件(证书文件)try (PEMWriter pemWriter = new PEMWriter(new FileWriter("certificate.crt"))) {pemWriter.writeObject(cert);}// 导出为 KEY 文件(私钥文件)try (PEMWriter pemWriter = new PEMWriter(new FileWriter("private.key"))) {pemWriter.writeObject(keyPair.getPrivate());}// 导出为 CER 文件(证书文件)try (FileOutputStream fos = new FileOutputStream("certificate.cer")) {fos.write(cert.getEncoded());  // 通过getEncoded()方法直接获取证书的编码}
}

证书强制验证

在spring boot中强制验证证书,在application.yml中添加如下配置
server.port=
server.ssl.enabled=true
server.ssl.key-store=classpath:server.jks
server.ssl.key-store-password=your_password
server.ssl.trust-store=classpath:localhost.jks
server.ssl.trust-store-password=your_password
server.ssl.client-auth=need
http://www.xdnf.cn/news/912511.html

相关文章:

  • 告别繁琐配置:在线运行 Matplotlib 画图,Python 环境免安装新体验!
  • 嵌入(Embedding)技术的实现原理与应用场景解析
  • 基于KNN算法的入侵检测模型设计与实现【源码+文档】
  • vue3 按钮 增加快捷方式
  • 易思维报考上市:国投基金清仓退出,郭寅“套现”超6500万元
  • Gerrit相对Git提供了一个特有的命名空间“refs/for/”用来定义我们的提交上传到哪个branch
  • c++重点知识总结
  • win10/win11禁止系统更新
  • AI书签管理工具开发全记录(十三):TUI基本框架搭建
  • 辊式矫平机:金属板材平整加工的基石
  • @Minikube 部署与配置
  • ngx_stream_access_module基于 IP 的流式访问控制实践指南
  • C++.OpenGL (6/64)坐标系统(Coordinate Systems)
  • GPU纹理复用技术实战:显存占用狂降70%的革命性优化方案
  • C++ --- vector
  • MySQL 事务详解
  • CSS6404L 在物联网设备中的应用优势:低功耗高可靠的存储革新与竞品对比
  • 常用操作符,操作符相关笔试题(谷歌)及算法的优化
  • [蓝桥杯]整理玩具
  • 【乐企板式文件】货物运输类发票,多页支持
  • 爱普生研发全新恒温晶体振荡器 “省、小、精”加速通信产业释放新质动能!
  • Java并发编程实战 Day 12:阻塞队列与线程协作
  • 文件上传/下载接口开发
  • Python训练第四十六天
  • 将内网地址转换成外网地址,让局域网外也能访问本地服务资源
  • 第21讲、Odoo 18 配置机制详解
  • 双面沉金PCB应用:打造卓越电子设备的黄金工艺
  • Android第十四次面试总结
  • Redis 哨兵模式
  • 【Qt】:设置新建类模板