我尝试在Square's MockWebServer上启用SSL,以模拟我测试下的Android应用中的所有WebService调用。我希望使SSL能够像在真实条件下一样获得相同的错误。我不想为测试禁用SSL,也不想实现忽略SSL的HTTPClient。
每次请求时,我都会收到这个javax.net.ssl.SSLPeerUnverifiedExceptionecxeption:
org.springframework.web.client.ResourceAccessException: I/O error on POST request for "https://localhost:42451/api/blabla": No peer certificate; nested exception is javax.net.ssl.SSLPeerUnverifiedException: No peer certificate
我似乎需要为MockWebServer设置证书。但我不知道怎么..。
以下是我尝试启用SSL的方法:
SSLContext sslContext = new SslContextBuilder(InetAddress.getLocalHost().getHostName()).build();
server.useHttps(sslContext.getSocketFactory(), true);
或者:
SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, null, null);
server.useHttps(sslContext.getSocketFactory(), false);
有人能帮忙吗?
4条答案
按热度按时间bvhaajcl1#
您将需要创建自己的密钥库:
或参阅:https://developer.android.com/studio/publish/app-signing.html
创建密钥库后,将其加载到您的代码中并按以下方式使用它:
w9apscun2#
如here所述,实现此目的的一种方法是执行以下操作:
首先创建自签名证书和私钥,并将它们添加到项目中。一个文件应该同时包含证书和私钥,这将与MockWebServer一起使用。另一个只包含证书,这将在网络安全配置中使用。
将证书添加到网络安全配置
然后将证书与MockWebServer一起使用
xxslljrj3#
您可以使用okhttp-tls中的帮助器生成本地主机证书,并将其用于
MockWebServer
和OkHttpClient
:使用TLS的简单易用的API。
HeldCertificate
是证书及其私钥。使用构建器创建测试服务器可用于HTTPS的自签名证书:HandshakeCertificates
保留用于TLS握手的证书。使用其构建器定义HTTPS服务器向其客户端返回哪些证书。返回的示例可以创建实现此策略的SSLSocketFactory
:HandshakeCertificates
还适用于其工作是定义要信任的根证书的客户端。在这个简化的示例中,我们信任服务器的自签名证书:kkbh8khc4#
我是这样做的:
这对我很管用。