当前位置: 首页 > 知识库问答 >
问题:

Websocket安全错误:未验证主机名

艾泰
2023-03-14

我正在esp32上实现一个websocket服务器,并且在android studio Simulator上运行的应用程序上使用okhttp lib。

我正在使用由openssl命令生成的自分配证书:openssl req-newkey rsa:2048-nodes-keyout prvtkey.pem-x509-days 3650-out cacert.pem-subj“/cn=esp32 HTTPS服务器示例

我不确定问题是出在Android/Java还是okhttp库中。

我怎么解决这个问题,已经在想量产版了?

// 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(); 

共有1个答案

卢子民
2023-03-14

通过在主机名验证器中返回true,您可以有效地禁用任何安全性。因此,您可以只使用addInsecureHost方法来允许这些请求。请不要在你的生产应用程序中使用这个。

参见https://github.com/square/okhttp/blob/482f88300f78c3419b04379fc26c3683c10d6a9d/samples/guide/src/main/java/okhttp3/recipes/kt/devserver.kt#l40

  val clientCertificates = HandshakeCertificates.Builder()
      .addPlatformTrustedCertificates()
      .addInsecureHost("192.168.0.8")
      .build()

  val client = OkHttpClient.Builder()
      .sslSocketFactory(clientCertificates.sslSocketFactory(), clientCertificates.trustManager)
      .build()
 类似资料:
  • 问题内容: 我正在开发一个Android应用,并且需要访问一个HTTPS地址。我正在使用Volley来请求我的数据,但现在却收到此错误 要获得SSL工厂,我需要这样做: 队列初始化: 这是堆栈跟踪: 我搜索了错误,但没有找到适合我的情况的内容。谁能帮我? 问题答案: 让我们假设你的服务器的应用程序是具有服务器证书中的服务器机内托管的,例如。然后,在验证方法内部,您可以验证。 您可以通过以下链接阅读

  • 我没有编写C++代码,因为我的首要任务是创建有效的xml和XSD。 xml: XSD: 为了验证,我转到:https://www.freeformatter.com/xml-validator-xsd.html 错误:s4s-att-invalid-value:元素“Element”中“type”的属性值无效。记录原因:cvc-datatype-valid.1.2.1:“xs:”不是“QName”

  • 问题内容: 非常奇怪的错误。我使用的是http://developers.facebook.com/docs/authentication/。所以我创建了对fb的请求并传递redirect_uri。我在本地主机上使用测试站点。所以如果我通过 redirect_uri = http://localhost/test_blog/index.php 它工作正常,但如果我通过 redirect_uri =

  • 我想对post请求主体密钥-值对中的一个进行身份验证,但我想在拦截器/过滤器的帮助下进行同样的验证。我该怎么做?

  • 主要内容:拒绝服务,中间人攻击,XSS,WebSocket本机防御机制应该出于安全原因设计协议。WebSocket是一种全新的协议,并非所有Web浏览器都能正确实现它。例如,它们中的一些仍然允许HTTP和WS的混合,尽管规范显示相反。在本章中,我们将讨论用户应该注意的一些常见安全攻击。 拒绝服务 拒绝服务(DoS)攻击会尝试使请求它的用户无法使用计算机或网络资源。假设有人向Web服务器发出无限数量的请求,没有或只有很短的时间间隔。服务器无法处理每个连接,并将停止响应

  • 问题内容: 跟进正则表达式以匹配主机名或IP地址? 并使用对有效主机名的限制作为参考,在Python中匹配/验证主机名/ fqdn(完全限定域名)的最易读,简洁的方法是什么?我在下面的尝试中已经回答过,欢迎改进。 问题答案: import re def is_valid_hostname(hostname): if len(hostname) > 255: return False if host