gSoap:通过 IP 连接导致 SSL/TLS 证书主机名不匹配
gSoap: connect via IP results in SSL/TLS certificate host name mismatch
我正在使用 gSoap 连接到已知其固定 IP 地址的服务器。
我希望它能工作,因为服务器证书包含此 IP 地址的 "subject alternative name" 个条目。但是,我得到一个 "SSL/TLS certificate host name mismatch in tcp_connect".
搜索这个问题,我找到了。查看此处显示的代码,我发现仅针对 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 地址来解决此问题?
Should I consider this a bug in gSoap and file a patch
我会认为这是一个错误。这与 Microsoft 在 IE 等方面存在的错误相同,因为他们检查 dNSName 条目中的 IP 地址,而不是(像其他所有公司一样)检查 IPAddress 条目中的 IP 地址。
我会考虑使用以下补丁进行额外改进以支持域和 IP 地址中的通配符 (*):
if (nval &&
(!strcmp(nval->name, "DNS") || !strcmp(nval->name,"IP Address")) &&
!soap_tag_cmp(nval->value, host))
{ ok = 1;
break;
}
我正在使用 gSoap 连接到已知其固定 IP 地址的服务器。
我希望它能工作,因为服务器证书包含此 IP 地址的 "subject alternative name" 个条目。但是,我得到一个 "SSL/TLS certificate host name mismatch in tcp_connect".
搜索这个问题,我找到了
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 地址来解决此问题?
Should I consider this a bug in gSoap and file a patch
我会认为这是一个错误。这与 Microsoft 在 IE 等方面存在的错误相同,因为他们检查 dNSName 条目中的 IP 地址,而不是(像其他所有公司一样)检查 IPAddress 条目中的 IP 地址。
我会考虑使用以下补丁进行额外改进以支持域和 IP 地址中的通配符 (*):
if (nval &&
(!strcmp(nval->name, "DNS") || !strcmp(nval->name,"IP Address")) &&
!soap_tag_cmp(nval->value, host))
{ ok = 1;
break;
}