我在esp32上实现了一个websocket服务器,在android studio模拟器上运行的应用程序上使用okhttp lib。
我已经用ws/http测试过了,而且工作正常。我已经用wss/https访问网站“wss:// with .websocket.org”进行了测试,并且工作正常。我被告知网站“wss:// from .websocket.org”使用了letsencrypt的证书。
在esp32上访问我的When服务器时,出现android/okhttp错误:找不到证书路径的"java.security.cert.CertPathValidatorException:信任锚“。所以我在网页上搜索"https://developer.android.com/training/articles/security-ssl#java",我在android应用程序中放入了服务器的相同证书。错误已经消失了,但出现了一个新的:“主机名未验证”,见附件中的图片。
我想在局域网中使用https/wss协议,用于esp32 websocket服务器和android / ios应用程序之间的通信。也许在未来,我会在云中运行一个服务器来与应用程序通信,也可以与esp32本地websocket服务器通信(零星通信)。首先,esp32本地websocket服务器将没有域,只有ip (可疑)。
我正在使用openssl命令生成自分配证书: openssl req -newkey rsa:2048 -nodes -keyout prvtkey.pem -x509 -days 3650 -out cacert.pem -subj "/CN=ESP32 HTTPS server example“
我不确定问题出在android/java还是okhttp lib上。
我如何解决这个问题,我已经在考虑生产版本了?
备注:
我可以控制esp32本地安全websocket服务器和客户端应用程序(以及云服务器)。Esp32局域网安全websocket服务器。okhttp版本:实现'com.squareup.okhttp3:okhttp:4.9.0‘。我对ssl/tls知之甚少。
谢谢你的帮助。
// This solved temporarily the problem.
// I would like to generate the private key and certificate using openSsl in the right way.
// and using the hostnameVerifier correctly too.
HostnameVerifier hostnameVerifier = new HostnameVerifier()
{
@Override
public boolean verify(String hostname, SSLSession session)
{
//return true;
if( hostname.equals("192.168.0.8") )
{
return true;
}
else
{
return false;
}
}
};
private final OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(5, TimeUnit.SECONDS)
//.writeTimeout(10, TimeUnit.SECONDS)
//.readTimeout(30, TimeUnit.SECONDS)
.pingInterval(25,TimeUnit.SECONDS)
.pingInterval(25,TimeUnit.SECONDS)
.hostnameVerifier(hostnameVerifier)
.build(); 发布于 2020-10-03 16:22:26
通过在主机名验证器中返回true,可以有效地禁用任何安全性。因此,您也可以使用addInsecureHost方法来允许这些请求。显然,请不要在您的生产应用程序中使用它。
val clientCertificates = HandshakeCertificates.Builder()
.addPlatformTrustedCertificates()
.addInsecureHost("192.168.0.8")
.build()
val client = OkHttpClient.Builder()
.sslSocketFactory(clientCertificates.sslSocketFactory(), clientCertificates.trustManager)
.build()https://stackoverflow.com/questions/64181090
复制相似问题