gSoap:通过IP连接导致SSL / TLS证书主机名不匹配

时间:2016-04-06 10:31:16

标签: ssl gsoap

我正在使用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地址来解决这个问题?

2 个答案:

答案 0 :(得分:1)

  

我是否应该将此视为gSoap中的错误并提交补丁

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

答案 1 :(得分:0)

我会考虑以下补丁,并在域和IP地址中支持通配符(*):

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