这是我在stackoverflow上的第一篇文章。希望我不打扰任何人...... :) 我一直在使用gSOAP连接到我的iPhone App的http-webservice一段时间了。现在我试图切换到https-webservice。我在项目中包含了openssl并添加了compileflat -DWITH_OPENSSL。 Build& Run正在运行,但不幸的是openssl不会让我验证网络服务器证书 打开DEBUG-MODE,我发现Web服务器证书存在问题:
SSL验证错误或警告 深度证书1:无法获得 本地发行人证书 issuer / C = US / O = VeriSign,Inc. / OU = Class 3公共初级认证 权威证书科目 / O = VeriSign Trust Network / OU = VeriSign, Inc./OU=VeriSign国际服务器 CA - Class 3 / OU = www.verisign.com / CPS Incorp.by Ref。责任有限公司(c)97 VeriSign公司
使用SSL Shoppers SSL Checker进行检查会导致:
证书应该受到信任 所有主要的网络浏览器(全部 正确的中间证书是 安装)。
有关如何解决该问题的任何想法?
BR
马丁
答案 0 :(得分:0)
好吧,有时RTFM确实有帮助:)
第19.20节(使用HTTPS / SSL的安全SOAP客户端)读取:“要禁用服务器身份验证以进行测试,请使用以下命令:”
if (soap_ssl_client_context(&soap,
SOAP_SSL_NO_AUTHENTICATION,
NULL,
NULL,
NULL,
NULL,
NULL
))
{
soap_print_fault(&soap, stderr);
exit(1);
}
不幸的是,-DSOAP_DEBUG选项仍然显示“SSL验证错误或警告,证书深度为1:无法获得本地颁发者证书”。无论如何,它现在正在运作。
答案 1 :(得分:0)
禁用Auth不是正确的解决方案。我怀疑你没有设置openssl用来信任CA的ca证书文件路径。
soap_ssl_client_context(& soapObject,SOAP_SSL_DEFAULT,NULL,NULL, cacerts.pem ,NULL,NULL))
你可以从mozilla获得cacerts.pem。如果您的应用只允许连接到一个网站,那么您应该留下发布网站证书的CA的哈希值,并从pem文件中删除所有不需要的内容。