我正在为拥有带有自签名 SSL 证书的服务器的客户工作。
我正在使用包装好的 OkHttp 客户端使用 Retrofit + CustomClient:
RestAdapter restAdapter = new RestAdapter.Builder().setEndpoint(Config.BASE_URL + Config.API_VERSION)
.setClient(new CustomClient(new OkClient(), context))
.build();
OkHttp 是否支持默认调用自签名 SSL 证书服务器?
顺便一提。哪个客户端默认使用 Retrofit?我以为它是 OkHttp 但当我进一步研究时,我意识到我需要导入 OkHttp 依赖项
原文由 cesards 发布,翻译遵循 CC BY-SA 4.0 许可协议
是的,它确实。
Retrofit 允许您设置自定义 HTTP 客户端,该客户端已根据您的需要进行配置。
至于自签名 SSL 证书, 这里 有讨论。该链接包含将自签名 SSL 添加到 Android 的
DefaultHttpClient
并将此客户端加载到 Retrofit 的代码示例。如果您需要
OkHttpClient
接受自签名 SSL,则需要通过setSslSocketFactory(SSLSocketFactory sslSocketFactory)
方法传递自定义javax.net.ssl.SSLSocketFactory
实例。获取套接字工厂的最简单方法是从
javax.net.ssl.SSLContext
获取一个,如此 处 讨论。下面是配置 OkHttpClient 的示例:
okhttp3 的更新代码(使用构建器):
这里的
client
现在配置为使用来自你的KeyStore
的证书。但是,它只会信任您的KeyStore
中的证书,并且不会信任任何其他证书,即使您的系统默认信任它们。 (如果您的KeyStore
中只有自签名证书,并尝试通过 HTTPS 连接到 Google 主页,您将获得SSLHandshakeException
)。您可以从文件中获取
KeyStore
实例,如 文档 所示:如果你在 android 上,你可以把它放在
res/raw
文件夹中并从Context
实例中获取它使用有几个关于如何创建密钥库的讨论。例如 这里