Android改装2插槽tls连接

时间:2016-10-05 11:08:29

标签: java android sockets retrofit2 tls1.2

最近几天,我尝试使用能够接受TLS连接的套接字连接到服务器。 (TLSv1.2工作)

我有自定义TLSSocketFactory在Android设备上启用TLSv1.2> 16 我有验证服务器证书的代码(自签名服务器证书) - 它是一个众所周知的自定义SSLSocketFactory等...这一切都很好,但问题是当我尝试连接到服务器时 - 我得到了SocketTimeoutException

构建OkHttpClient和Retrofit的代码(使用匕首):

"fabc",3000.0,1
"fdef",3650.0,1
"ghi",3000.0,2

服务器示例地址: air.sample.com ,端口: 2559 我的改造基本网址如下:https://air.sample.com:2559

我的UserService界面:

@Provides
@Singleton
HttpLoggingInterceptor provideHttpLoggingInterceptor() {
    HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
    interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
    return interceptor;
}

@Provides
@Singleton
OkHttpClient provideOkHttpClient(Context context, Integer connTimeout, HttpLoggingInterceptor loggingInterceptor) {

    OkHttpClient.Builder httpBuilder = new OkHttpClient.Builder();
    httpBuilder.addInterceptor(loggingInterceptor);
    httpBuilder.connectTimeout(connTimeout, TimeUnit.SECONDS);
    httpBuilder.readTimeout(0, TimeUnit.NANOSECONDS);

    try {
        TLSSocketFactory tlsSocketFactory = new TLSSocketFactory(context);
        httpBuilder.sslSocketFactory(tlsSocketFactory, tlsSocketFactory.systemDefaultTrustManager());
    } catch (NoSuchAlgorithmException | KeyManagementException e) {
        LogHelper.printLogMsg("Failed to create Socket connection ");
        e.printStackTrace();
    }

    return httpBuilder.build();
}

@Provides
@Singleton
UserService provideUserService(String baseUrl, OkHttpClient httpClient) {
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(baseUrl)
            .client(httpClient)
            .addConverterFactory(ProtoConverterFactory.create())
            .build();

    return retrofit.create(UserService.class);
}

}

首先:我不确定改装@Body注释是否正确,因为我无法访问服务器而且没有文档。

问题是当我尝试将数据发送到服务器时,我收到了SocketTimeoutException:

public interface UserService {
@POST("./")
Call<Protos.LoginResponse> requestUserLogin(@Body Protos.LoginRequest loginRequest);

如果我尝试从基本网址中删除“https://”,我会收到一个例外:非法网址... 如果有人知道如何解决这个问题,请告诉我解决方案。另外,我编写了简单的python脚本,使用Socket连接到服务器(服务器地址没有'https://':'air.sample.com'),效果很好,所以问题出现在我的代码中,但我可以'弄明白了。

0 个答案:

没有答案