未找到证书路径的Android Retrofit2信任锚

问题描述 投票:1回答:1

我有一个使用SLL认证的API当我打开api链接google chrome要求我登录时使用用户名和密码授权我连接网站API链接:https://45.55.43.15:9090/api/machine?page=0&size=10

我的问题是如何使用OkHttp3和Retrofit2实现这一点

这是我的审判

 public class RestAdapter {


    Context context;
    public static final String BASE_URL = "https://45.55.43.15:9090/api/";


    private OkHttpClient okHttpClient;
    private Authenticator authenticator = new Authenticator() {
        @Override
        public Request authenticate(Route route, Response response) {
            return null;
        }
    };


    private RestAdapter() {
    }

    public void setAuthenticator(Authenticator authenticator) {
        this.authenticator = authenticator;
    }


    public static class Builder {
        String email, password;
        RestAdapter apiManager = new RestAdapter();

        public Builder setAuthenticator(Authenticator authenticator) {
            apiManager.setAuthenticator(authenticator);
            return this;
        }

        public RestAdapter build(String param_email, String param_password) {
            this.email = param_email;
            this.password = param_password;
            return apiManager.newInstance(email, password);
        }

    }

    public class RequestTokenInterceptor implements Interceptor {
        String email, password;
        String credentials, basic;
        public RequestTokenInterceptor(String email, String password) {
            this.email = email;
            this.password = password;
            credentials = email + ":" + password;
            basic = "Basic " + Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP);
        }



        @Override
        public Response intercept(Interceptor.Chain chain) throws IOException {
            Request original = chain.request();
            Request.Builder builder = original.newBuilder()
                    .addHeader("Authorization", basic)
                    .method(original.method(), original.body());
            return chain.proceed(builder.build());
        }
    }

    private RestAdapter newInstance(String email, String password) {
        HttpLoggingInterceptor logging = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
            @Override
            public void log(String message) {
                Log.e("https", message);
            }
        });
        logging.setLevel(HttpLoggingInterceptor.Level.BODY);


        okHttpClient = new OkHttpClient.Builder()
                .addInterceptor(logging)
                .addInterceptor(new RequestTokenInterceptor(email, password))
                .authenticator(authenticator)
                .build();


        return this;
    }


    public <T> T createRest(Class<T> t) {
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .client(okHttpClient)
                .build();

        return retrofit.create(t);
    }
 }
android retrofit2 okhttp3
1个回答
0
投票

该服务器使用自签名证书。例如,Web浏览器将拒绝连接到它。

使用network security configurationOkHttp's custom certificate support来允许您的代码连接到此服务器。或者,切换到具有域名和标准SSL证书的服务器。

© www.soinside.com 2019 - 2024. All rights reserved.