gpt4 book ai didi

android retrofit 主机名未验证

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:13:39 26 4
gpt4 key购买 nike

我获得了为 IP 地址(不是通用名称)颁发的证书,我正在尝试使用该证书连接到服务器。

OkHttpClient.Builder builder = new OkHttpClient().newBuilder();
OkHttpClient okHttpClient = builder.build();
Gson gson = new GsonBuilder()
.setLenient()
.create();
retrofit = new Retrofit.Builder()
.baseUrl(url)
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
ServerRouts service = retrofit.create(ServerRouts.class);
Resp_json> call = service.login(param, user, pw);

我得到一个错误:

Hostname 11.8.222.333 not verified:

但是当我使用

builder.hostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
});

然后一切正常。

如何在不关闭主机名验证程序的情况下解决该错误?

附言我为IP(11.8.222.333)颁发的证书

最佳答案

我重新定义了这样的验证方法(只是从 DefaultHostnameVerifier.java 复制了源代码),现在一切正常。我不知道为什么它不起作用,但现在好了。

builder.hostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {

Certificate[] certs;
try {
certs = session.getPeerCertificates();
} catch (SSLException e) {
return false;
}
X509Certificate x509 = (X509Certificate) certs[0];
// We can be case-insensitive when comparing the host we used to
// establish the socket to the hostname in the certificate.
String hostName = hostname.trim().toLowerCase(Locale.ENGLISH);
// Verify the first CN provided. Other CNs are ignored. Firefox, wget,
// curl, and Sun Java work this way.
String firstCn = getFirstCn(x509);
if (matches(hostName, firstCn)) {
return true;
}
for (String cn : getDNSSubjectAlts(x509)) {
if (matches(hostName, cn)) {
return true;
}
}
return false;

}
});


private String getFirstCn(X509Certificate cert) {
String subjectPrincipal = cert.getSubjectX500Principal().toString();
for (String token : subjectPrincipal.split(",")) {
int x = token.indexOf("CN=");
if (x >= 0) {
return token.substring(x + 3);
}
}
return null;
}

关于android retrofit 主机名未验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41542435/

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