Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 具有主机名不匹配的播放的SSL握手_Scala_Ssl_Playframework_Sslhandshakeexception - Fatal编程技术网

Scala 具有主机名不匹配的播放的SSL握手

Scala 具有主机名不匹配的播放的SSL握手,scala,ssl,playframework,sslhandshakeexception,Scala,Ssl,Playframework,Sslhandshakeexception,我们正在使用Play2.5+Scala,需要使用SSL通过https连接到远程客户端 问题是我们从客户端获得的证书有类似于api.*.net的CN 但我们试图点击的实际URL包含一个IP地址: https://123.234.34.56/service/resource/operation... 由于证书中的公共名称与URL中的主机名(ipAddress)不匹配,我们看到了以下错误 SSLHandshakeException:没有主题替代名称出现 所以我尝试在Scala中实现如下所示的Hostn

我们正在使用Play2.5+Scala,需要使用SSL通过https连接到远程客户端

问题是我们从客户端获得的证书有类似于
api.*.net的CN

但我们试图点击的实际URL包含一个IP地址:
https://123.234.34.56/service/resource/operation...

由于证书中的公共名称与URL中的主机名(ipAddress)不匹配,我们看到了以下错误

SSLHandshakeException:没有主题替代名称出现

所以我尝试在Scala中实现如下所示的HostnameVerifier,但Play或Netty并没有接收到这段代码

 HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier()
        {
            public boolean verify(String hostname, SSLSession session)
            {
               // custom logic here to match hostname and IpAddress
                return true;
            }
        });
我不知道为什么Play/Netty没有在运行时拾取它,但我们正在使用Play WS访问远程客户端:

import play.api.libs.ws.WS 
WS.url(url).get()...
我也在考虑尝试这里提到的解决方案:

但我不确定是否需要按照上面的链接实现ChannelFactory,如图所示
http://netty.io/3.10/xref/org/jboss/netty/example/securechat/SecureChatClientPipelineFactory.html

此外,我在SO的其他帖子中也看到:

如果证书中的主机名未解析为地址,则服务器配置错误。不过,您应该能够更改本地DNS解析,将该名称指向/etc/hosts文件中的该IP地址(如果在Linux或其Windows等效版本下)

我不知道如何用Java/Scala编程实现这一点

任何帮助都将不胜感激

谢谢

Suresh“主机”修复程序如下所示:

  • hosts
    文件()中添加一行,如下所示

  • 现在使用主机名“api.a.b.c.net”而不是其IP地址连接到服务器

  • 由于
    主机
    覆盖,您的计算机将不会对此名称执行DNS查找,而是使用该IP地址。但是,SSL客户端将满足主机名与证书匹配的要求,错误应消失

  • 对于HostnameVerifier修复程序,您需要按照链接到的答案中的说明进行操作。Netty SSL客户端不使用您当前使用的静态全局配置。

    主机修复程序如下所示:

  • hosts
    文件()中添加一行,如下所示

  • 现在使用主机名“api.a.b.c.net”而不是其IP地址连接到服务器

  • 由于
    主机
    覆盖,您的计算机将不会对此名称执行DNS查找,而是使用该IP地址。但是,SSL客户端将满足主机名与证书匹配的要求,错误应消失


  • 对于HostnameVerifier修复程序,您需要按照链接到的答案中的说明进行操作。Netty SSL客户端不使用您当前使用的静态全局配置。

    @Bruno请查看我上面的查询?Thanks@Bruno你能看看我上面的问题吗?ThanksHI@Rich,谢谢你的回复,我无法访问
    hosts
    文件。是否有一种方法可以用Java/Scala编程更新hosts文件?我还实现了一个类似的代码,如图所示
    http://docs.jboss.org/netty/3.2/xref/org/jboss/netty/example/securechat/SecureChatClientPipelineFactory.html
    但是netty在durin没有收到这个代码g runtime/startuo感谢Java/Scala中没有办法更新主机,这是一个O/S配置任务。HI@Rich,感谢您的响应,我无法访问主机文件。有没有办法用Java/Scala编程更新主机文件?我还实现了类似的代码,如图所示
    http://docs.jboss.org/netty/3.2/xref/org/jboss/netty/example/securechat/SecureChatClientPipelineFactory.html
    但netty没有在运行时获取此代码/startuo感谢没有办法从Java/Scala内部更新主机,这是一项O/S配置任务。
    123.234.34.56 api.a.b.c.net