Java 我得到一个;证书中的主机名没有';“t匹配”;尝试连接到我的Android应用程序中的助手网站时出错

Java 我得到一个;证书中的主机名没有';“t匹配”;尝试连接到我的Android应用程序中的助手网站时出错,java,android,caddy,caddyfile,Java,Android,Caddy,Caddyfile,下午好,正如标题中所说,我无法在我的Android应用程序中连接到我的caddy网站上的子域。我正在将该应用程序的后端从Heroku迁移到我自己的digitalocean droplet,并且该应用程序在使用Heroku时可以正常工作 我得到的错误消息如下: W/System.err: javax.net.ssl.SSLException: hostname in certificate didn't match: <sub.domain.com> != <domain.com

下午好,正如标题中所说,我无法在我的Android应用程序中连接到我的caddy网站上的子域。我正在将该应用程序的后端从Heroku迁移到我自己的digitalocean droplet,并且该应用程序在使用Heroku时可以正常工作

我得到的错误消息如下:

W/System.err: javax.net.ssl.SSLException: hostname in certificate didn't match: <sub.domain.com> != <domain.com> OR <domain.com>
W/System.err:     at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:185)
W/System.err:     at org.apache.http.conn.ssl.BrowserCompatHostnameVerifier.verify(BrowserCompatHostnameVerifier.java:54)
W/System.err:     at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:114)
W/System.err:     at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:95)
W/System.err:     at org.apache.http.conn.ssl.SSLSocketFactory.createSocket(SSLSocketFactory.java:388)
W/System.err:     at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:165)
W/System.err:     at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
W/System.err:     at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
W/System.err:     at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
W/System.err:     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
W/System.err:     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
W/System.err:     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)

我可以在我的web浏览器中连接到子域,所以我真的不知道为什么会发生这种情况。我并不太热衷于禁用主机名验证,所以我想知道是否有办法在Caddy端修复它。

因此,我可以通过切换到okhttp库来解决这个问题

渐变依赖项:

dependencies {
    compile group: 'com.squareup.okhttp3', name: 'logging-interceptor', version: '3.8.0'
    compile 'com.squareup.okhttp3:okhttp:3.8.0'
}
课程的新版本:

/**
 * Created by luke on 8/29/2016.
 */

import android.net.Uri;

import org.apache.http.NameValuePair;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.Map;

import okhttp3.FormBody;
import okhttp3.HttpUrl;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Request.Builder;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;

public class HttpPostRequest {
    public static final MediaType JSON
        = MediaType.parse("application/json; charset=utf-8");
    InputStream content;
    String responseText;
    int code;

    HttpPostRequest(String url, Map<String, String> valuePair) {
    try {
        HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
        logging.setLevel(HttpLoggingInterceptor.Level.BODY);

        OkHttpClient client = new OkHttpClient.Builder().addInterceptor(logging).build();
        Uri uri = Uri.parse(url);


        HttpUrl.Builder httpUrlBuilder = new HttpUrl.Builder();
        httpUrlBuilder.host(uri.getHost());
        httpUrlBuilder.scheme(uri.getScheme());

        ArrayList<String> paths = new ArrayList<>(uri.getPathSegments());

        for (String path : paths) {
            httpUrlBuilder.addPathSegment(path);
        }

        Builder builder = new Request.Builder();

        FormBody.Builder formBuilder = new FormBody.Builder();

        ArrayList<NameValuePair> nameValuePairs = new ArrayList<>();
        for (Map.Entry<String, String> entry : valuePair.entrySet()) {
            formBuilder.add(entry.getKey(), entry.getValue());
        }
        builder.url(httpUrlBuilder.build());
        builder.post(formBuilder.build());
        Response response = client.newCall(builder.build()).execute();
        code = response.code();
        responseText = response.body().string();
        responseText = responseText != null ? responseText : "";

    } catch (Exception exc) {
        exc.printStackTrace();
        if (responseText != null) {
            System.out.println(responseText);
        }
    }

    }
}
/**
*由luke于2016年8月29日创建。
*/
导入android.net.Uri;
导入org.apache.http.NameValuePair;
导入java.io.InputStream;
导入java.util.ArrayList;
导入java.util.Map;
导入okhttp3.FormBody;
导入okhttp3.HttpUrl;
导入okhttp3.MediaType;
导入okhttp3.OkHttpClient;
导入okhttp3.请求;
导入okhttp3.Request.Builder;
导入okhttp3.响应;
导入okhttp3.logging.HttpLoggingInterceptor;
公共类HttpPostRequest{
公共静态最终媒体类型JSON
=MediaType.parse(“application/json;charset=utf-8”);
输入流内容;
字符串响应文本;
int代码;
HttpPostRequest(字符串url,映射值对){
试一试{
HttpLoggingInterceptor logging=新的HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient客户端=新建OkHttpClient.Builder().addInterceptor(logging.build();
Uri=Uri.parse(url);
HttpUrl.Builder httpUrlBuilder=新的HttpUrl.Builder();
httpUrlBuilder.host(uri.getHost());
httpUrlBuilder.scheme(uri.getScheme());
ArrayList路径=新的ArrayList(uri.getPathSegments());
用于(字符串路径:路径){
httpUrlBuilder.addPathSegment(路径);
}
Builder=newrequest.Builder();
FormBody.Builder formBuilder=新的FormBody.Builder();
ArrayList nameValuePairs=新的ArrayList();
对于(Map.Entry:valuePair.entrySet()){
添加(entry.getKey(),entry.getValue());
}
url(httpUrlBuilder.build());
builder.post(formBuilder.build());
响应=client.newCall(builder.build()).execute();
code=response.code();
responseText=response.body().string();
responseText=responseText!=null?responseText:;
}捕获(异常exc){
exc.printStackTrace();
if(responseText!=null){
System.out.println(responseText);
}
}
}
}

试试看,您可能会得到更多帮助。您可以在浏览器中连接到domain.com吗?这一行中
url
的值是多少
final-HttpPostHC4 post=new-HttpPostHC4(url)@Tobyalen嘿,我可以连接到domain.com,在我的浏览器中没有问题。然而,我最终通过使用okhttp库解决了这个问题。对不起,浪费了你的时间。也许可以用你所做的回答你自己的问题(如使用不同的图书馆)@TobyAllen好主意,我刚刚回答了。
dependencies {
    compile group: 'com.squareup.okhttp3', name: 'logging-interceptor', version: '3.8.0'
    compile 'com.squareup.okhttp3:okhttp:3.8.0'
}
/**
 * Created by luke on 8/29/2016.
 */

import android.net.Uri;

import org.apache.http.NameValuePair;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.Map;

import okhttp3.FormBody;
import okhttp3.HttpUrl;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Request.Builder;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;

public class HttpPostRequest {
    public static final MediaType JSON
        = MediaType.parse("application/json; charset=utf-8");
    InputStream content;
    String responseText;
    int code;

    HttpPostRequest(String url, Map<String, String> valuePair) {
    try {
        HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
        logging.setLevel(HttpLoggingInterceptor.Level.BODY);

        OkHttpClient client = new OkHttpClient.Builder().addInterceptor(logging).build();
        Uri uri = Uri.parse(url);


        HttpUrl.Builder httpUrlBuilder = new HttpUrl.Builder();
        httpUrlBuilder.host(uri.getHost());
        httpUrlBuilder.scheme(uri.getScheme());

        ArrayList<String> paths = new ArrayList<>(uri.getPathSegments());

        for (String path : paths) {
            httpUrlBuilder.addPathSegment(path);
        }

        Builder builder = new Request.Builder();

        FormBody.Builder formBuilder = new FormBody.Builder();

        ArrayList<NameValuePair> nameValuePairs = new ArrayList<>();
        for (Map.Entry<String, String> entry : valuePair.entrySet()) {
            formBuilder.add(entry.getKey(), entry.getValue());
        }
        builder.url(httpUrlBuilder.build());
        builder.post(formBuilder.build());
        Response response = client.newCall(builder.build()).execute();
        code = response.code();
        responseText = response.body().string();
        responseText = responseText != null ? responseText : "";

    } catch (Exception exc) {
        exc.printStackTrace();
        if (responseText != null) {
            System.out.println(responseText);
        }
    }

    }
}