You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

域名大小写不匹配证书引发SSLPeerUnverifiedException,如何支持大小写不敏感?

解决HttpClient 4.5.2中域名大小写不匹配的SSL异常问题

这个问题我之前帮不少开发者处理过——HttpClient 4.5.2默认的SSL主机名验证是严格区分大小写的,所以当你请求的域名是machine1.mydomain.COM,而证书里的CN是machine1.MYDOMAIN.COM时,就会触发SSLPeerUnverifiedException。要实现域名大小写不敏感的验证,完全可以通过自定义主机名验证器来搞定,具体步骤如下:

1. 自定义忽略大小写的HostnameVerifier

我们可以实现javax.net.ssl.HostnameVerifier接口,重写verify方法时将主机名和证书中的域名统一转成小写后再对比:

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLSession;

public class CaseInsensitiveHostnameVerifier implements HostnameVerifier {
    @Override
    public boolean verify(String hostname, SSLSession session) {
        // 获取证书关联的主机名
        String peerHost = session.getPeerHost();
        // 统一转成小写后做相等判断
        return hostname != null && peerHost != null 
            && hostname.toLowerCase().equals(peerHost.toLowerCase());
    }
}

2. 将自定义验证器配置到HttpClient中

接下来需要把这个验证器绑定到HttpClient的SSL连接工厂里,替换默认的严格验证逻辑:

import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLContextBuilder;

public class HttpClientConfig {
    public static CloseableHttpClient createCaseInsensitiveHttpClient() throws Exception {
        // 创建默认SSL上下文(若需自定义信任证书库,可在此扩展配置)
        SSLContext sslContext = SSLContextBuilder.create().build();
        
        // 实例化带自定义验证器的SSL连接工厂
        SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(
            sslContext,
            new CaseInsensitiveHostnameVerifier() // 传入我们的大小写不敏感验证器
        );
        
        // 构建并返回配置好的HttpClient
        return HttpClients.custom()
            .setSSLSocketFactory(sslSocketFactory)
            .build();
    }
}

补充说明

  • 嫌单独写类麻烦的话,也可以用匿名内部类简化实现,效果完全一致。
  • 虽然这个方案能满足你域名大小写不敏感的需求,但要注意:放宽主机名的大小写验证,理论上会略微降低SSL连接的安全性(比如可能被恶意利用大小写混淆的域名进行钓鱼攻击),请确保你的业务场景确实需要这个特性后再使用。
  • 你提到主机名“machine1”本身支持大小写不敏感,这个方案完全适配该场景,不管主机名部分是大写还是小写,都会被统一转成小写后验证。

内容的提问来源于stack exchange,提问作者AmM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:32:44