【问题标题】:gSoap: connect via IP results in SSL/TLS certificate host name mismatchgSoap:通过 IP 连接导致 SSL/TLS 证书主机名不匹配
【发布时间】:2016-04-06 10:31:15
【问题描述】:

我正在使用 gSoap 连接到通过其固定 IP 地址知道的服务器。

我希望这可以工作,因为服务器证书包含此 IP 地址的“主题备用名称”条目。但是,我收到“tcp_connect 中的 SSL/TLS 证书主机名不匹配”。

搜索这个问题,我找到了this SE post。查看那里显示的代码,我发现仅针对 URL 测试了 DNS 名称,而不是 IP 地址(stdsoap2.cpp):

if (nval && !strcmp(nval->name, "DNS") && !strcmp(nval->value, host))
{ ok = 1;
  break;
}

我设法通过更改如下代码使连接正常工作:

if (nval && !strcmp(nval->name, "DNS") && !strcmp(nval->value, host))
{ ok = 1;
  break;
}

if (nval && !strcmp(nval->name, "IP Address") && !strcmp(nval->value, host))
{ ok = 1;
  break;
}

问题: 我应该认为这是 gSoap 中的一个错误并提交一个补丁,还是它是错误 SSL 使用的结果?我是否应该通过将 IP 添加到主题备用名称作为 DNS 名称而不是 IP 地址来解决此问题?

【问题讨论】:

    标签: ssl gsoap


    【解决方案1】:

    我是否应该认为这是 gSoap 中的错误并提交补丁

    我认为这是一个错误。这与 Microsoft 在 IE 等方面存在的错误相同,因为它们检查 dNSName 条目中的 IP 地址,而不是(像所有其他人一样)在 IPAddress 条目中。

    【讨论】:

    • 感谢您的解释!这听起来是因为不使用 IPAddress 条目是一种常见的懈怠,所以这两个选项在某种程度上都是有效的......
    • @philipp:我不会因为某些大公司多年来一直存在这个错误而认为它在某种程度上是有效的。 RFC 5280 对 DNS 名称使用 dNSName 和 IP 地址使用 iPAddress 非常清楚。
    【解决方案2】:

    我会考虑使用以下补丁进行额外改进,以支持域和 IP 地址中的通配符 (*):

    if (nval &&
        (!strcmp(nval->name, "DNS") || !strcmp(nval->name,"IP Address")) &&
        !soap_tag_cmp(nval->value, host))
    { ok = 1;
      break;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-05
      • 1970-01-01
      • 1970-01-01
      • 2014-08-30
      • 1970-01-01
      • 2021-01-03
      • 2021-07-07
      相关资源
      最近更新 更多