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