Can't Access SOAP Web Service Over HTTPS
我要执行的操作是使用SSL命中一个Web服务(由我构建)。它似乎似乎没有用。一些相关信息:
-
使用HTTP一切正常。该问题仅在使用HTTPS时发生。
-
输出的实际错误消息如下:
SOAP错误:解析WSDL:无法从...加载:无法加载外部实体...
- https证书有效吗?
-
您是否正在使用(邪恶的)PHP本机SOAP扩展(ihateitihateitihateit)?改用NuSOAP-我换了头发,现在头发逐渐恢复原状。
-
证书是有效的,并且不是自签名的。适用于在同一服务器上运行的普通网站上的HTTPS。是的,使用(邪恶的)本机SOAP扩展。可以尝试使用NuSOAP,但不必担心这是问题所在,因为相同的测试代码可以在开发服务器上使用。必须是一些配置问题。
-
Works for HTTPS on normal website running on same server.-您的域在证书的域范围内运行的服务吗?相同的服务器!=相同的域,这与SSL证书有关。想知道您是否可以使用cURL或其他内容检索原始XML-查明这是WSDL中的解析错误还是网络传输问题。如果是后者,cURL也将为您提供更多有用的错误消息。
-
服务在同一域的范围内运行。主站点就像www.site.com,服务就像www.site.com/service/。但是,cURL请求确实给出了有趣的错误消息:curl:(35)错误:140770FC:SSL例程:SSL23_GET_SERVER_HELLO:未知协议即将开始谷歌搜索以获得洞察力
-
请问您正在运行哪个版本的PHP?另请确认您已连接到正确的端口,几乎就像您碰到了未启用SSL的端口一样,或者如果您运行的是非常旧的PHP版本,则可能是服务器希望使用SSLv3,而PHP却没有支持它。
-
是php 5.3。 Nginx很可能不支持cURL正在使用或期望的SSL协议。可能有点鲱鱼。我的另一条支持线是告诉我,nginx是如何将请求转发到apache服务器的。不知道会是什么配置。
-
我认为您正在使用Nginx反向代理吗?无论如何,如果cURL给您错误35,则应表明SSL配置或证书有问题。在出现错误35的阶段,通信链接尚未打开(A problem occurred somewhere in the SSLTLS handshake.),因此Nginx尚未收到请求,因此不知道需要将其转发/转发至何处。我的下一步将是Wireshark,尽管您将需要私钥才能对其进行任何理解...
-
是的,那很有趣。使用Web浏览器,我可以看到请求命中了nginx访问日志,但是卷曲却没有。我仍然愿意接受建议,但我的调查现在正朝着不同的方向发展。也许我应该在serverfault上发布此内容=(
-
我认为serverfault是个好主意,可能是网站管理员?投票决定迁移到SF,如果您不想等待/希望5个人投票相同,可以将其标记为主持人注意...
我想指出的是,这可能与您的nginx配置有关,对于SSL,有几个不错的地方可以开始寻找:
验证您在nginx上的监听端口是443
验证您的代理位置是127.0.0.1:80(端口80,因为它是HTTP,除非您对其进行了自定义)
如果您使用的是CentOS,我发现iptables是许多问题的元凶。有时我只是忘记在防火墙中打开端口443。要进行配置,请转到/etc/sysconfig/iptables/并添加防火墙规则。
最后但并非最不重要....
我发现了这个关于SSL的SOAP指南:) http://soapoverhttps.blogspot.ca/
- 您的观点1是实际问题的缩写。对于其他询问者,我从兼职服务器管理员那里得到了帮助,他发现问题有两个方面:a)实际上有两个代理服务器-一个主服务器和一个故障转移服务器。故障转移keepalived配置是错误的,因此它在不应该处理请求时。 b)因为是故障转移,所以它正在侦听默认端口并将SSL流量绑定到非SSL端口。无论如何,接受我自己的答案是没有意义的,所以我在标记您接受的答案。