gpt4 book ai didi

java - 在给定的 java 代码中禁用 SSL 连接

转载 作者:太空宇宙 更新时间:2023-11-03 14:58:12 24 4
gpt4 key购买 nike

我在下面的代码 ( source ) 中收到安全证书错误。异常(exception)情况是:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target.

如何禁用安全证书检查?

import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.Page;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.DomNode;
import com.gargoylesoftware.htmlunit.html.HtmlElement;
import com.gargoylesoftware.htmlunit.html.HtmlFileInput;
import com.gargoylesoftware.htmlunit.html.HtmlForm;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlPasswordInput;
import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
import com.gargoylesoftware.htmlunit.html.HtmlTextInput;

public class WebRobot {
public static void login(String username, String password) {
String loginUrl = "http://example.com";
int loginFormNum = 1;
String usernameInputName = "nameinput";
String passwordInputName = "passinput";
String submitLoginButtonValue = "Sign In";

// create the HTMLUnit WebClient instance
WebClient wclient = new WebClient();

// configure WebClient based on your desired
wclient.getOptions().setPrintContentOnFailingStatusCode(false);
wclient.getOptions().setCssEnabled(false);
wclient.getOptions().setThrowExceptionOnFailingStatusCode(false);
wclient.getOptions().setThrowExceptionOnScriptError(false);

try {
// get the login page by connect to the URL
final HtmlPage loginPage = (HtmlPage)wclient.getPage(loginUrl);

// get the login form by its form number. mine is 1 (form[1])
final HtmlForm loginForm = loginPage.getForms().get(loginFormNum);

// get the text input field by the name and set the value
final HtmlTextInput txtUser = loginForm.getInputByName(usernameInputName);
txtUser.setValueAttribute(username);

// get the password input field by the name and set the value
final HtmlPasswordInput txtpass = loginForm.getInputByName(passwordInputName);
txtpass.setValueAttribute(password);

// get the submit button by the text value
final HtmlSubmitInput submitLogin = loginForm.getInputByValue(submitLoginButtonValue);

// after we set the name & password then we click the submit button
// it will return a page (redirect or message alert or somethin, different sites different behaviour)
// or it could throws an exception
final HtmlPage returnPage = submitLogin.click();

// we can analyze the return page based on the body
// ex: mine is check if its body contains less than 5 elements
final HtmlElement returnBody = returnPage.getBody();
if (returnBody==null || returnBody.getChildElementCount()<5) {
// bla.. bla.. bla..
}

} catch(FailingHttpStatusCodeException e) {
e.printStackTrace();
} catch(Exception e) {
e.printStackTrace();
}
}
}

最佳答案

在执行此操作之前,您必须添加以下代码:

System.setProperty("jsse.enableSNIExtension", "false");

行前:

// get the login page by connect to the URL
final HtmlPage loginPage = (HtmlPage) wclient.getPage(loginUrl);

如果你不这样做,你会得到一个错误:

javax.net.ssl.SSLProtocolException: handshake alert:  unrecognized_name

然后,根据您使用的 WebClient 类的版本,尝试以下代码行之一:

wclient.setUseInsecureSSL(true);
wclient.getOptions().setUseInsecureSSL(true);

注意 - 禁用安全性非常危险。所以不要在生产代码中这样做。

关于java - 在给定的 java 代码中禁用 SSL 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26479463/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com