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

使用StormCrawler爬取部分URL时遭遇X509证书异常

解决StormCrawler爬取HTTPS网站时的SunCertPathBuilderException异常

这个错误本质上是JVM无法验证目标网站的SSL证书导致的——要么网站用的是自签名证书,要么颁发证书的CA不在JVM默认的信任证书库中。下面给你两种可行的解决思路,按需选择:

方法一:将网站证书导入JVM信任库(推荐生产环境)

这是最安全的做法,让JVM信任目标网站的证书:

  • 第一步:获取目标网站的证书
    你可以通过浏览器导出(比如Chrome:访问网站→点击地址栏锁图标→证书→详细信息→复制到文件→选择Base64编码的X.509格式保存),或者用openssl命令抓取:
    openssl s_client -connect example.com:443 </dev/null | openssl x509 -outform PEM > example.crt
    
  • 第二步:导入到JVM的cacerts信任库
    找到你的JDK安装目录,执行以下命令(默认密码是changeit):
    keytool -importcert -file /path/to/example.crt -keystore $JAVA_HOME/jre/lib/security/cacerts -alias example-website-cert
    
    注意:如果是JDK 9+,信任库路径为$JAVA_HOME/lib/security/cacerts。

方法二:临时跳过SSL证书验证(仅测试环境使用)

如果只是测试爬取,不想折腾证书导入,可以让StormCrawler忽略SSL验证,但生产环境绝对不要这么做,会带来安全风险:

  1. 创建一个自定义的HttpClientBuilderConfigurator类,实现忽略SSL验证的逻辑:
    import org.apache.http.conn.ssl.NoopHostnameVerifier;
    import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
    import org.apache.http.ssl.SSLContexts;
    import org.apache.storm.crawler.protocol.httpclient.HttpClientBuilderConfigurator;
    import javax.net.ssl.SSLContext;
    import java.security.cert.X509Certificate;
    import org.apache.http.conn.ssl.TrustStrategy;
    
    public class IgnoreSSLConfig implements HttpClientBuilderConfigurator {
        @Override
        public void configure(org.apache.http.impl.client.HttpClientBuilder builder) {
            try {
                // 信任所有证书
                TrustStrategy trustAll = (X509Certificate[] chain, String authType) -> true;
                SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null, trustAll).build();
                SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
                builder.setSSLSocketFactory(sslSocketFactory);
            } catch (Exception e) {
                throw new RuntimeException("Failed to configure SSL ignoring", e);
            }
        }
    }
    
  2. 在StormCrawler的crawler-conf.xml配置文件中,指定这个自定义类:
    <property>
        <name>httpclient.configurator.class</name>
        <value>com.your.package.IgnoreSSLConfig</value>
    </property>
    
  3. 重新打包或部署StormCrawler拓扑,让配置生效。

额外检查项

确认你已经在StormCrawler配置中正确设置了默认HTTPS协议:

http.agent.protocol: https

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:31:35