当前位置: 首页 > 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(

相关文章:

  • 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读写分离(未完成)
  • 常见的网站首页布局有哪几种/crm系统网站
  • wordpress 样式丢失/网站seo推广员招聘
  • 有个网站发任务 用手机可以做/搜狗友链交换
  • 网站制作的步骤不包括哪些/医院营销策略的具体方法
  • 两个相同的网站对做优化有帮助/曲靖百度推广
  • 奶茶加盟网站建设公司哪家好/seo门户网站优化