gpt4 book ai didi

scala - 与 Play 的 SSL 握手在主机名上不匹配

转载 作者:太空宇宙 更新时间:2023-11-03 13:50:59 25 4
gpt4 key购买 nike

我们正在使用 Play 2.5 + Scala,需要使用 SSL 连接到使用 https 的远程客户端。

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

但我们尝试访问的实际 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()...

我也在考虑尝试这里提到的解决方案: Netty SSL hostname verification support

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

此外,我还在 SO 帖子的其他地方看到:

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

我不知道如何在 Java/Scala 中以编程方式实现这一点

任何帮助将不胜感激!

谢谢

苏雷什

最佳答案

“主机”修复看起来像这样:

  1. 将如下一行添加到您的 hosts 文件 ( instructions for Windows or Linux here )

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

  3. 由于 hosts 覆盖,您的机器将不会为此名称执行 DNS 查找,但会使用该 IP 地址。但是,SSL 客户端会对主机名与证书匹配感到满意,并且错误应该消失。

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

关于scala - 与 Play 的 SSL 握手在主机名上不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45262531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com