【发布时间】:2019-05-07 07:22:05
【问题描述】:
我工作的应用程序的服务器使用证书来允许请求。 例如,我在桌面 Chrome 浏览器中安装了它,它运行良好。这是带有扩展名 .cer
的普通证书现在我必须让这个证书在我的 android 应用程序中也能工作,老实说,我从来没有做过,我有点迷茫。
要发出请求,我使用的是 okhttp2,如您在此示例中所见:
public String makeServiceCall(String url, JSONObject data) {
final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
OkHttpClient client = new OkHttpClient();
client.setConnectTimeout(45, TimeUnit.SECONDS);
client.setReadTimeout(45, TimeUnit.SECONDS);
client.setProtocols(Arrays.asList(Protocol.HTTP_1_1));
RequestBody body = RequestBody.create(JSON, data.toString());
Request request = new Request.Builder()
.url(url)
.header("Accept","application/json")
.post(body)
.build();
try {
Response response = client.newCall(request).execute();
return response.body().string();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
到目前为止,一切都很完美,但是在搜索和阅读教程、示例等之后,(其中许多来自此页面)我还没有设法让它工作。使其与证书一起使用。
从来没有这样做过,并且已经有点困惑,我希望得到以下澄清:
我拥有的.cer格式的证书,我想我应该把它转换成另一种格式才能在android中使用它... 这是正确的吗?如果正确,我该怎么做?
好的,我已经将我的证书转换为 BKS 并托管在 res / raw 文件夹中,但我仍然无法将其成功应用于请求 okhttp2 ..
- 一旦拥有格式正确的证书, 它是如何用我已经在我设置的代码中提出的请求来实现的?
我已经搜索了有关使用 okhttp3 执行此操作的信息,但我也无法授权请求。
This article 对我很有用,但我没有使用改造,将其调整为 okhttp2 也不起作用。
我希望能解释一下如何做到这一点
【问题讨论】:
-
请澄清:您的 .cer 文件是否包含 客户端证书,可用于识别客户端而不是客户端密码?或者您的 .cer 文件是否包含客户端应该接受的服务器证书?
标签: android certificate okhttp