1

这是我在 stackoverflow 上的第一篇文章。希望我不会打扰任何人... :)
我一直在使用 gSOAP 连接到我的 iPhone 应用程序的 http-webservice 一段时间。现在我正在尝试切换到 https-webservice。我在项目中包含了 openssl 并添加了 compileflat -DWITH_OPENSSL。Build&Run 正在运行,但不幸的是 openssl 不会让我验证网络服务器证书。
打开 DEBUG-MODE,我发现 webservers 证书有问题:

SSL 在深度 1 处使用证书验证错误或警告:无法获取本地颁发者证书证书颁发者 /C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority 证书主题 /O=VeriSign Trust Network/OU= VeriSign, Inc./OU=VeriSign International Server CA - Class 3/OU=www.verisign.com/CPS Incorp.by Ref. LIABILITY LTD.(c)97 VeriSign

使用SSL Shoppers SSL Checker 检查会导致:

所有主要的网络浏览器都应该信任该证书(安装了所有正确的中间证书)。

关于如何解决该问题的任何想法?

BR

马丁

4

2 回答 2

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 证书的警告:无法获取本地颁发者证书”。无论如何,它现在正在工作。

于 2010-12-16T12:58:54.837 回答
0

禁用 Auth 不是正确的解决方案。我怀疑您没有设置 openssl 用于信任 CA 的 ca 证书文件路径。

soap_ssl_client_context(&soapObject, SOAP_SSL_DEFAULT, NULL, NULL, cacerts.pem , NULL, NULL))

您可以从 Mozilla 获取 cacerts.pem。如果您的应用只允许连接到一个网站,那么您应该只保留颁发网站证书的 CA 的哈希值,并从 pem 文件中删除所有不需要的 ca。

于 2016-06-21T01:12:47.543 回答