我试图使用Groovy使用Rest API,这里是我使用的代码:
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
CloseableHttpClient client = HttpClients.createDefault();
HttpResponse response = null;
HttpPost request = new HttpPost("http://path_to_my_server/rest_api_path");
String auth = "login:password";
String encoding = auth.bytes.encodeBase64().toString()
request.setHeader("Authorization", "Basic " + encoding);
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addPart("postVar", new StringBody("value",ContentType.MULTIPART_FORM_DATA));
HttpEntity entity = builder.build();
request.setEntity(entity);
response = client.execute(request);
问题是,每次我执行它时,它都会向我显示一个错误:
如何在Groovy中使用SSL和自签名证书?
所有这些都不起作用,有什么帮助吗?
尽管我并不推荐这个选项,因为您不应该忽略ssl验证。更好的方法是创建一个包含可信证书的TrustStore.jks,并将其加载到http客户机中。
然而,你正在努力做的事情是可能的。您可以做的与这里的答案类似:禁用弹性搜索Restclient在Java中不工作的SSL验证
我建议使用X509ExtenderTrustManager
而不是X509TrustManager
,因为它在这类用例中的行为可能不同。
import javax.net.ssl.SSLEngine;
import javax.net.ssl.X509ExtendedTrustManager;
import java.net.Socket;
import java.security.cert.X509Certificate;
public final class UnsafeX509ExtendedTrustManager extends X509ExtendedTrustManager {
private static final X509ExtendedTrustManager INSTANCE = new UnsafeX509ExtendedTrustManager();
private static final X509Certificate[] EMPTY_CERTIFICATES = new X509Certificate[0];
private UnsafeX509ExtendedTrustManager() {}
public static X509ExtendedTrustManager getInstance() {
return INSTANCE;
}
@Override
public void checkClientTrusted(X509Certificate[] certificates, String authType) {}
@Override
public void checkClientTrusted(X509Certificate[] certificates, String authType, Socket socket) {}
@Override
public void checkClientTrusted(X509Certificate[] certificates, String authType, SSLEngine sslEngine) {}
@Override
public void checkServerTrusted(X509Certificate[] certificates, String authType) {}
@Override
public void checkServerTrusted(X509Certificate[] certificates, String authType, Socket socket) {}
@Override
public void checkServerTrusted(X509Certificate[] certificates, String authType, SSLEngine sslEngine) {}
@Override
public X509Certificate[] getAcceptedIssuers() {
return EMPTY_CERTIFICATES;
}
}
HostnameVerifier hostnameVerifier = (host, sslSession) -> true;
TrustManager[] trustManagers = new TrustManager[]{UnsafeX509ExtendedTrustManager.getInstance()};
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, trustManagers, null);
LayeredConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(sslContext, hostnameVerifier);
CloseableHttpClient httpClient = HttpClients.custom()
.setSSLSocketFactory(socketFactory)
.build();
有关更详细的解释,请参见我对另一个stackoverflow的引用:https://stackoverflow.com/A/64982379/6777695
问题内容: 如何忽略Apache HttpClient 4.3的SSL证书(全部信任)? 我在SO上找到的所有答案都对待以前的版本,并且API更改了。 编辑: 仅用于测试目的。孩子们,不要在家(或生产中)尝试 问题答案: 以下代码可用于信任自签名证书。创建客户端时,必须使用TrustSelfSignedStrategy: 我没有故意包括:重点是允许使用自签名证书进行测试,因此您不必从证书颁发机构获
如何忽略Apache HttpClient4.3的SSL证书(信任所有证书)? null 仅用于测试目的。孩子们,不要在家里(或生产中)尝试
问题内容: 我必须使用无效的SSL证书调用Web服务器上托管的HTTP服务。在开发人员中,我使用 keytool 导入证书,但是证书在每个客户端安装中都会有所不同,因此我不能将其捆绑在一起。 前言:我 不要 知道跳过SSL验证实在是太丑了。在这种特定情况下,我什至不需要SSL,并且系统中的所有其他通信都是通过简单HTTP进行的。所以我真的不在乎MITM攻击之类。攻击者无需破坏SSL,因为数据没有S
我正在开发一个应用程序,使用rest API将其连接到数据库,我的服务器有一个SSL证书,当我试图发送请求时,从我的反应本地应用程序显示此错误msg是有办法禁用SSL验证反应原生Android。 如果有人知道,帮忙。
如果某个接口不需要进行验证工作,可以在@Api注解上设置属性ignoreValidate=true(默认false)。这样调用接口时,不会进行验证操作。 同样的,在@ApiService注解里也有一个对应的ignoreValidate属性,设置为true的话,Service类下面所有的接口都忽略验证。 忽略所有接口验证 设置ApiConfig.setIgnoreValidate(true),所有接
主要内容:自签名证书错误,Maven依赖关系,接受自签名证书通常,开发人员将在本地机器上或项目的开发阶段使用自签名证书。 默认情况下,HttpClient(和Web浏览器)不会接受不可信的连接。 但是,可以配置以允许不可信的自签名证书。 注意:这是一个可能存在安全风险,因为您将其用于生产时,基本上会禁用所有的认证检查,这可通导致受到攻击。 在这个例子中,我们演示了如何忽略Apache HttpClient 4.5中的SSL / TLS证书错误。 自签名证书