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

Java实现HTTPS双向认证的终极指南:从原理到实战

背景说明

在与某个外部系统进行API对接,比如银行支付网关或第三方服务,这些系统通常要求双向SSL认证来确保通信双方的身份
;前端端交互的时候或者进行HTTPS协议传输的时候,其实已经帮我实现了,就不需要通过代码层进行解决了,但是目前就有这个需求,在于第三方系统接口交互的时候需要进行双向认证,那么在实战之前,大家肯定需要对双向认证原理进行个熟悉的认知

HTTPS双向认证实践:Spring Boot RestTemplate的正确配置之道

@Data
@Configuration
@ConfigurationProperties("pki")
public class PkiConfig {

    private String brand;

    private Map<String,String> urlMap;

    private String alg;

    private String sha;

    private String certificateAddr;

    private String certificatePwd="";


    private String platformID;

    private String iWallAK;

    private String iWallSK;

    private String v23Uri;

    private String iWallUri;

    private String iWallKeyID;

    private String signAlg;

    private Integer iWallMode;

    private Integer mode;

}
@Configuration
@Slf4j
public class RestTemplateConfig {
    @Autowired
    private PkiConfig pkiConfig;

    @Bean
    public RestTemplate restTemplate() throws Exception {
        log.info("pkiConfig:{}",pkiConfig);
// PFX 文件路径
        String pfxPath = "src/main/resources/test-Lion.OTA.pfx";
        // PFX 文件密码
        String pfxPassword = pkiConfig.getCertificatePwd();

        Resource resource = new ClassPathResource("test-Lion.OTA.pfx");


        KeyStore keyStore = KeyStore.getInstance("PKCS12");
        keyStore.load(resource.getInputStream(), pfxPassword.toCharArray());

        // 创建一个信任所有证书的 TrustStrategy
        TrustStrategy acceptingTrustStrategy = (X509Certificate[] chain, String authType) -> true;

        SSLContext sslContext = SSLContextBuilder.create()
                .loadKeyMaterial(keyStore, pfxPassword.toCharArray())
                .loadTrustMaterial(null, acceptingTrustStrategy)
                .build();

        SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);

        CloseableHttpClient httpClient = HttpClients.custom(
http://www.dtcms.com/a/16189.html

相关文章:

  • DeepSeek R1打造本地化RAG知识库
  • 腾讯发布混元-3D 2.0: 首个开源高质3D-DiT生成大模型
  • CentOS-Stream 9安装
  • 【开源免费】基于SpringBoot+Vue.JS商品秒杀系统(JAVA毕业设计)
  • DeepSeek应用——与word的配套使用
  • Java多线程交替打印
  • 网络编程套接字
  • 2.14日学习总结
  • csghub安装(docker方式)
  • 单片机原理与运用
  • C#01项目——计算器
  • react传递函数与回调函数原理
  • 在Win11电脑上安装mysql并成功登录
  • MongoDB 常用命令速查表
  • 【JavaEE进阶】IoC详解
  • 芯麦GC6208:革新摄像机与医疗设备的智能音频解决方案
  • 单位切换且后换算得方法
  • 【Java八股】JVM
  • springboot如何将lib和jar分离
  • 配置Mysql8读写分离(未完成)
  • Node.js 调用 DeepSeek API 完整指南
  • AI大模型(如GPT、BERT等)可以通过自然语言处理(NLP)和机器学习技术,显著提升测试效率
  • 达梦 跟踪日志诊断
  • 附录 面向对象
  • C++ ——构造函数
  • C语言简单练习题
  • Python自动化实现思路
  • 安科瑞光储充一体化微电网系统的设计与优化研究-安科瑞 蒋静
  • Windows 找不到文件gpedit.msc,没有组策略编辑器,解决办法附上
  • 前端知识速记—JS篇:JS数组方法