mengyxu
V2EX  ›  Java

Java https 请求绕过 SSL 证书验证问题

  •  
  •   mengyxu · Dec 13, 2022 · 2508 views
    This topic created in 1252 days ago, the information mentioned may be changed or developed.
    • 问题

    同一个方法,用 JUnit 测试类跑没有问题,程序运行起来定时器跑就抛异常(No subject alternative names present),半天了没有头绪,求帮忙分析分析. JDK17,springboot2.7.1,JUnit5

    4 replies    2022-12-13 22:48:32 +08:00
    blankmiss
        1
    blankmiss  
       Dec 13, 2022
    你为什么不发哥 gist 出来
    Hancock
        2
    Hancock  
       Dec 13, 2022
    mengyxu
        3
    mengyxu  
    OP
       Dec 13, 2022
    @Hancock 我用 apache 的 httpclient 是没有问题的,我是想着换成 jdk11 自带 httpClient,结果遇到了这个问题
    b2byco
        4
    b2byco  
       Dec 13, 2022
    试试这个
    try {
    X509TrustManager x509TrustManager = new X509TrustManager() {@
    Override
    public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {}@
    Override
    public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {}@
    Override
    public X509Certificate[] getAcceptedIssuers() {
    return new X509Certificate[0];
    }
    };
    SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
    sslContext.init((KeyManager[]) null, new X509TrustManager[] {
    x509TrustManager
    }, (SecureRandom) null);
    HttpClient client = HttpClient.newBuilder().sslContext(sslContext).followRedirects(HttpClient.Redirect.ALWAYS).version(HttpClient.Version.HTTP_1_1).build();
    URI uri = new URI("https", "//", null);
    HttpRequest r = HttpRequest.newBuilder().uri(uri).GET().build();
    var s = client.send(r, HttpResponse.BodyHandlers.ofString());
    System.out.println(s.body());
    } catch(Exception e) {}
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   970 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 21:48 · PVG 05:48 · LAX 14:48 · JFK 17:48
    ♥ Do have faith in what you're doing.