最近,又在网上看了许多关于类似PKIX问题的文章,发现了一种通过X509TrustManager绕过https认证的一种方式,拿了几个网站做例子,果然可以实现! javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSession; import javax.net.ssl.TrustManager ; import javax.net.ssl.X509TrustManager; import javax.security.cert.X509Certificate; /** * How to ignore sun.security.provider.certpath.SunCertPathBuilderException: unable to * find valid certification path to requested target */ TrustManager [] trustAllCerts = new TrustManager[] { new X509TrustManager() { public java.security.cert.X509Certificate
javax.net.ssl.HostnameVerifier; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSession; import javax.net.ssl.TrustManager ; import javax.net.ssl.X509TrustManager; import java.nio.charset.StandardCharsets; import java.security.cert.CertificateException 接口,用于绕过验证,不用修改里面的方法 X509TrustManager trustManager = new X509TrustManager() { @Override getAcceptedIssuers() { return null; } }; sc.init(null, new TrustManager [] { trustManager }, null); return sc; } /** * 构造RestTemplate * * @return
final TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() { @Override public throws Exception { // Create a trust manager that does not validate certificate chains final TrustManager [] trustAllCerts = new TrustManager[]{new X509TrustManager() { //证书中的公钥 public static trustManager : tmf.getTrustManagers()) { ((X509TrustManager) trustManager).checkServerTrusted HttpsUtils.getSslSocketFactory(); builder.sslSocketFactory(sslParams1.sSLSocketFactory, sslParams1.trustManager
* @return */ public OkHttpClient getUnsafeOkHttpClient() { try { final TrustManager [] trustAllCerts = new TrustManager[]{ new X509TrustManager() { OkHttpClient.Builder builder = new OkHttpClient.Builder(); builder.sslSocketFactory(sslSocketFactory,(X509TrustManager
description 忽略https证书验证 * * @author yanzy * @version 1.0 * @date 2021/9/8 14:42 */ private static TrustManager [] getTrustManager() { TrustManager[] trustAllCerts = new TrustManager[]{ new X509TrustManager() { @Override public void checkClientTrusted
------------恢复内容开始------------ 不导入证书方式 1.增加以下代码 static class miTM implements TrustManager, X509TrustManager String authType) throws CertificateException { return; } } try{ TrustManager [] trustAllCerts = new TrustManager[1]; TrustManager tm = new miTM(); trustAllCerts
JSSE中,默认的信任管理器类为TrustManager。 图1 部分JSSE类的关系图 假设自己实现的X509TrustManager类的类名为:MyX509TrustManager,下面的代码片断说明了如何使用MyX509TrustManager 的类MyX509TrustManager信任该证书。 下面我们来看看实现X509TrustManager的接口实现https请求代码 1、实现X509TrustManager获取SSLSocketFactory [java] view plain ; import javax.net.ssl.X509TrustManager; public class BZX509TrustManager implements X509TrustManager
; import javax.net.ssl.X509TrustManager; /** * java 信任SSL证书 * @author 凯哥Java * @website www.kaigejava.com public class SslUtils { private static void trustAllHttpsCertificates() throws Exception { TrustManager [] trustAllCerts = new TrustManager[1]; TrustManager tm = new miTM(); trustAllCerts[0 HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); } static class miTM implements TrustManager ,X509TrustManager { public X509Certificate[] getAcceptedIssuers() { return null;
自定义证书校验逻辑 使用上面的公钥字符串构建X509TrustManager对象,在checkServerTrusted方法中校验服务端证书: X509TrustManager trustManager = new X509TrustManager() { @Override public void checkClientTrusted(X509Certificate[] chain, String 设置OkHttpClient校验证书 然后使用上面的trustManager构建OkHttpClient SSLSocketFactory sslSocketFactory = null; try { SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, new TrustManager[]{trustManager new OkHttpClient.Builder() .hostnameVerifier(hostnameVerifier) .sslSocketFactory(sslSocketFactory, trustManager
public class SslUtils { private static void trustAllHttpsCertificates() throws Exception { TrustManager [] trustAllCerts = new TrustManager[1]; TrustManager tm = new miTM(); trustAllCerts[0 HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); } static class miTM implements TrustManager ,X509TrustManager { public X509Certificate[] getAcceptedIssuers() { return null;
缺少相应的安全校验很容易导致中间人攻击,而漏洞的形式主要有以下3种: 自定义X509TrustManager 在使用HttpsURLConnection发起 HTTPS 请求的时候,提供了一个自定义的X509TrustManager 如果不提供自定义X509TrustManager,代码运行起来可能会报异常(原因下文解释),初学者就很容易在不明真相的情况下提供了一个自定义的X509TrustManager,却忘记正确地实现相应的方法 这里引用部分相关代码: TrustManager tm = new X509TrustManager() { public void checkClientTrusted(X509Certificate 也就是说对于特定证书生成的TrustManager,只能验证与特定服务器建立安全链接,这样就提高了安全性。 解决方案2 同方案1,打包一份到证书到 app 内部,但不通过KeyStore去引导生成的TrustManager,而是干脆直接自定义一个TrustManager,自己实现校验逻辑; 校验逻辑主要包括
.*; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManager ; import javax.net.ssl.X509TrustManager; import java.io.IOException; import java.net.URLEncoder; import https请求的证书跳过 * * @return */ private static SSLSocketFactory createSSLSocketFactory(TrustManager ) { e.printStackTrace(); } return ssfFactory; } private static TrustManager [] buildTrustManagers() { return new TrustManager[]{ new X509TrustManager() {
.*; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManager ; import javax.net.ssl.X509TrustManager; import java.io.IOException; import java.net.URLEncoder; import https请求的证书跳过 * * @return */ private static SSLSocketFactory createSSLSocketFactory(TrustManager ) { e.printStackTrace(); } return ssfFactory; } private static TrustManager [] buildTrustManagers() { return new TrustManager[]{ new X509TrustManager() {
} }; private static void trustAllHttpsCertificates() throws Exception { javax.net.ssl.TrustManager [] trustAllCerts = new javax.net.ssl.TrustManager[1]; javax.net.ssl.TrustManager tm = new miTM(); , javax.net.ssl.X509TrustManager { public java.security.cert.X509Certificate[] getAcceptedIssuers defaultTrustManager = (X509TrustManager) tmf .getTrustManagers()[0]; SavingTrustManager tm = new { private final X509TrustManager tm; private X509Certificate[] chain; SavingTrustManager(X509TrustManager
org.springframework.web.client.RestTemplate; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager ; import javax.net.ssl.X509TrustManager; import java.io.IOException; import java.io.OutputStream; import ClientHttpRequestFactory httpComponentsClientHttpRequestFactory() throws Exception { // 自定义证书校验器 TrustManager [] trustAllCerts = new TrustManager[]{ new X509TrustManager() { @
defaultTrustManager = (X509TrustManager) tmf .getTrustManagers()[0]; SavingTrustManager tm = new SavingTrustManager(defaultTrustManager); context.init(null, new TrustManager[] { return sb.toString(); } private static class SavingTrustManager implements X509TrustManager { private final X509TrustManager tm; private X509Certificate[] chain; SavingTrustManager(X509TrustManager tm) { this.tm = tm; } public
return new OkHttpClient.Builder() .sslSocketFactory(sslSocketFactory(), x509TrustManager hostnameVerifier((hostname, session) -> true) .build(); } @Bean public X509TrustManager x509TrustManager() { return new X509TrustManager() { @Override public SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, new TrustManager []{x509TrustManager()}, new SecureRandom()); return sslContext.getSocketFactory();
. */ public static void handleSSLHandshake() { try { TrustManager[] trustAllCerts = new TrustManager[]{ new X509TrustManager() { public X509Certificate[] getAcceptedIssuers
实现自定义的TrustManager:在某些开发或测试场景中,可以自定义TrustManager,绕过证书验证(不推荐用于生产环境)。 以下是使用自定义TrustManager的代码示例: import javax.net.ssl.*; import java.security.cert.X509Certificate; public void connectToServerWithCustomTrustManager(String urlString) { try { // 创建一个信任所有证书的TrustManager TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { successfully."); } catch (Exception e) { e.printStackTrace(); } } 代码说明: 这里创建了一个信任所有证书的TrustManager
keyStore.load(null, null); keyStore.setCertificateEntry("ca", ca); // Create a TrustManager that trusts the CAs in our KeyStore console.log("[+] Creating a TrustManager that trusts the CA TrustManagerFactory.getInstance(tmfAlgorithm); tmf.init(keyStore); console.log("[+] Our TrustManager SSLContext.init.overload("[Ljavax.net.ssl.KeyManager;", "[Ljavax.net.ssl.TrustManager;", "java.security.SecureRandom this, a, tmf.getTrustManagers(), c); console.log("[+] SSLContext initialized with our custom TrustManager