我们的团队抓取网站来保持我们的信息是最新的。 我也陷入了爬行HTTPS页面时,安全异常 。 问题是,Java的有问题来自网页接受的自签名的证书。
而不是保持证书的列表接受(这可能是很难在未来维持),我使用的是由周围提供neu242工作, 禁用SSL证书验证 。
public static void disableCertificateValidation()
{
// Create a trust manager that does not validate certificate chains
TrustManager[] trustAllCerts = new TrustManager[] {
new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
@Override
public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException
{
// TODO Auto-generated method stub
}
@Override
public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException
{
// TODO Auto-generated method stub
}
}};
// Ignore differences between given hostname and certificate hostname
HostnameVerifier hv = new HostnameVerifier() {
@Override
public boolean verify(String arg0, SSLSession arg1)
{
// TODO Auto-generated method stub
return true;
}
};
// Install the all-trusting trust manager
try {
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(hv);
} catch (Exception e) {}
}
当然,这是冒充显著的安全风险。 但是,如果我只使用这个代码与我的下载程序(下载图像和PDF文档的程序),而我没有使用该程序的敏感信息发送,存在哪些安全隐患? 据我了解,这种信任管理器将只对正在运行的JVM(运行程序在操作系统级别将不会禁用证书验证服务器)设置。 此外,如果我对图像和文档的请求被拦截,我的代码将尝试分别形成响应为图像或PDF格式,而不会推出任何恶意软件。 有我缺少某些地方的安全风险?