背景
在某些特殊的项目中虽然使用了HTTPS,但其证书管理又不是采用常规模式,如服务端用了个自签名的证书。
很多组织的内部项目因为各种原因采用了这种方式。(先不深挖这种模式的利弊)
这种情况下,大多数HTTP客户端工具或框架都默认禁止此类证书。
为了让客户端忽略SSL证书校验,需要额外的客户端代码设置。
实现方式
本文针对两种Java常见HTTP客户端请求方式,提供实现样例。
HttpClient(org.apache.http.client)
简单直接的方式
SSLContext sslContext = SSLContextBuilder.create() .loadTrustMaterial((chain, authType) -> true) .build(); HttpClient httpClient = HttpClients.custom() .setSSLContext(sslContext) .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE) .build();
复杂的方式——更多自定义配置
HttpClient只是个Interface,这里可自定义的内容非常多。
如,我们可以通过工具类 HttpClientBuilder 来设置各种细节,最终构建出一个 HttpClient。
此处仅提供一些简单的示例。真实项目中需具体问题具体分析,设置合适的策略。
SSLContext sslContext = new SSLContextBuilder() .loadTrustMaterial(null, (chain, authType) -> true) .build(); SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory( sslContext, // 添加你想支持的协议 new String[]{"SSLv2Hello", "SSLv3", "TLSv1", "TLSv1.2"}, null, NoopHostnameVerifier.INSTANCE); // 或其它重载方法,如: // new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE) Registry socketFactoryRegistry = RegistryBuilder.create() .register("http", PlainConnectionSocketFactory.INSTANCE) .register("https", sslConnectionSocketFactory) .build(); PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry); HttpClient httpClient = HttpClients.custom() .setConnectionManager(connectionManager) .build();
RestTemplate(org.springframework.web.client)
步骤1:参照前文所述的HttpClient,创建一个HttpClient实例
步骤2:创建RestTemplate实例
// httpClient 是步骤1中创建的 HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); RestTemplate restTemplate = new RestTemplate(requestFactory);
相关推荐
http远程接口调用-httpClient+跳过SSL证书校验. 里面分别有3个httpClient的工具类代码。 还有一个专门为了跳过SSL证书校验的工具类。
java的get和post请求,获取json的工具类,https时会存在ssl校验的问题,工具会自动去除ssl校验。
java信任SSL证书的工具类 忽略HTTPS请求的SSL证书,必须在openConnection之前调用
使用HttpClient4.5实现https请求忽略SSL证书验证工具类
httplient向https发送请求会因为证书校验而报错,该工具类提供绕开HTTPS证书校验方法,以实现访问https网站的功能
android ssl证书验证
SSL跳过证书 java ctx.init(null, new TrustManager[] { tm }, new java.security.SecureRandom()); // SSLConnectionSocketFactory ssf = new SSLConnectionSocketFactory( // ctx, NoopHostnameVerifier.INSTANCE)...
ssl自制全套证书(包含服务器端、客户端、ca端的证书,格式有.crt,.key,.truststore,.keystore,.p12,.cer,.pem等类型),当时要配置webservice接口、tomca、nginx通过ssl访问的证书,弄了好久才生成了一套能使用的。...
访问带https请求忽略ssl证书,避免url.openStream报错javax.net.ssl.SSLHandshakeException url = new URL(imageUrl); if("https".equalsIgnoreCase(url.getProtocol())){ SslUtils.ignoreSsl(); } //不添加...
以上自己测试是可行的,直接拿过去导入即可,直接用main
自己封装的SSLClient,用https访问外部API接口
弱哈希算法签名的SSL证书(CVE-2004-2761)。 远程服务使用SSL证书链,该证书链已使用加密弱哈希算法(例如MD2、MD4、MD5或SHA1)签名。这些签名算法很容易受到碰撞攻击。攻击者可以利用这一点生成另一个具有相同数字...
弱哈希算法签名的SSL证书(CVE-2004-2761)。 远程服务使用SSL证书链,该证书链已使用加密弱哈希算法(例如MD2、MD4、MD5或SHA1)签名。这些签名算法很容易受到碰撞攻击。攻击者可以利用这一点生成另一个具有相同数字...
windows 2003环境SSL证书安装
域名SSL证书在线生成系统_SSL在线自签证书工具_免费SSL在线生成源码 源码没有后台没有数据库,源码简单便捷,上传到空间内即可使用,虚拟主机,vps,服务器,甚至二级目录,都可以,方便快捷! 随时可以生成自己的...
C# SSL服务端连接及安装数字证书
工具内容有完整的CSR生成及对应秘钥保存,使用java.securtiy Signature类
这是一款二次元风格向的SSL证书自签工具源码,可随时随地签发SSL证书 运行环境: 你的 PHP 必须 >=5.6,且安装了 OpenSSL 扩展 所有文件都已本地化,大部分PHP默认开启OpenSSL 安装: 下载源码导入网站目录访问...
Java Https请求,跳过证书,直接访问 相关jar包全有 直接下载就能调试
客户端与服务器SSL双向认证(客户端:java-服务端:java):详细的过程,注意事项,运行成功!