如何在 Square MockWebServer 中使用 SSL?

2024-04-25

我尝试启用 SSLSquare 的 MockWebServer https://github.com/square/okhttp/tree/master/mockwebserver在测试下模拟我的 Android 应用程序中的所有 Web 服务调用。我想启用 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);

Or:

SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, null, null);
server.useHttps(sslContext.getSocketFactory(), false);

有人可以帮忙吗?


您需要创建自己的密钥库:

keytool -genkey -v -keystore mystore.keystore.jks -alias alias_name -keyalg RSA -keysize 2048 -validity 10000

或参见:https://developer.android.com/studio/publish/app-signing.html https://developer.android.com/studio/publish/app-signing.html

创建密钥库后,将其加载到代码中并按以下方式使用它:

        FileInputStream stream = new FileInputStream("mystore.keystore.jks");
        char[] serverKeyStorePassword = "yourcode".toCharArray();
        KeyStore serverKeyStore = KeyStore.getInstance(KeyStore.getDefaultType());
        serverKeyStore.load(stream, serverKeyStorePassword);

        String kmfAlgorithm = KeyManagerFactory.getDefaultAlgorithm();
        KeyManagerFactory kmf = KeyManagerFactory.getInstance(kmfAlgorithm);
        kmf.init(serverKeyStore, serverKeyStorePassword);

        TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(kmfAlgorithm);
        trustManagerFactory.init(serverKeyStore);

        SSLContext sslContext = SSLContext.getInstance("SSL");
        sslContext.init(kmf.getKeyManagers(), trustManagerFactory.getTrustManagers(), null);
        SSLSocketFactory sf = sslContext.getSocketFactory();
        mockWebServer.useHttps(sf, false);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Square MockWebServer 中使用 SSL? 的相关文章

随机推荐