【问题标题】:Getting 404 not found when calling rest API using https ssl使用 https ssl 调用 rest API 时找不到 404
【发布时间】:2018-10-29 16:07:05
【问题描述】:

请你帮忙。我在 Java 中创建了一个 Rest API 并将 WAR 文件导出到我的云 Tomcat 8 服务器。使用http://www.mydomain.co.uk:8080/MyProject/...

但我现在已将 TLS\SSL 应用到我的服务器(购买了 Comodo 证书),现在,当我使用类似的 URL 调用 https://www.mydomain.co.uk/MyProject/ 时,使用我的应用程序或 Postman 会出现连接超时... 粘贴在我的浏览器中的相同 URL 也给出了“连接响应时间过长”。 我没有对 Rest API 项目或我在两次调用之间传递给它的 HTTP 请求标头进行任何更改。为什么现在不能读取?

禁用防火墙没有任何区别。使用 443 端口没有区别,使用 8443 在邮递员中给出“无法得到任何响应”。

我已正确安装了我的第 3 方证书。我知道这一点,因为在我的浏览器中,如果我只运行“https://www.mydomain.co.uk/MyProject”(无端口)它会下载 WAR 文件。我还可以正确查看我的 Tomcats /usr/share 中的测试 GIF 文件“https://www.mydomain.co.uk/test.gif”,并且浏览器显示“安全”,我可以看到正在使用正确的证书。 所以我不认为这是 Tomcat 端口/防火墙问题或证书问题。 由于我的浏览器可以使用相同的前半部分 URL 下载 WAR 文件,那么这一定意味着 WAR 文件的位置是可以的。

这似乎与实际调用 Rest API 相关,正如我所说,如果我执行“http://www.mydomain.co.uk:8080/MyProject/...”,它可以正常工作

几乎似乎是 Postman 或应用程序调用 API 的方式。仅供参考,我唯一相关的请求标头我传递它'Content-Type' ='application/json'。 非常感谢

2018 年 5 月 20 日更新 当前位置: 当我向我的 rest api“https://www.mydomain.co.uk/MyProject/some_path_params”发出 URL 调用(使用 http 和 8080 可以正常工作)时,我在所有调用位置(例如邮递员)都得到一个“404 Not Found”。

查看 apache2 error.log 它显示“AH00128:文件不存在:/var/lib/tomcat8/webapps/MyProject/some_path_params”。 这是正确的,因为文件不存在,但这是因为端点是 MyProject。

有谁知道为什么它试图找到 URL 中表示的文件,而不是调用其余 API 并进入以 '@Path("/some_path_params")' 开头的 java 类?

为什么 Postman 在 https 模式下不直接运行 Rest API?

如果我输入https://www.mydomain.co.uk/MyProject,它会显示文件结构,所以我可以访问那个目录。

顺便说一句,当我重新启动 apache2 时,日志确认 TLS 证书已正确加载。

如果相关,我已将其包含在 Java 项目的 web.xml 中:

<security-constraint>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>

我的 apache.conf 有这些部分:

<VirtualHost *:443>
 SSLEngine on
 SSLCertificateFile /etc/ssl/certs/mydomain_co_uk.crt
 SSLCertificateKeyFile /etc/ssl/private/www.mydomain.co.uk.key
 SSLCertificateChainFile /etc/ssl/certs/mydomain_co_uk.ca-bundle
 ServerName www.mydomain.co.uk
 Alias /MyProject "/var/lib/tomcat8/webapps/MyProject"

<Location />
Require all granted
</Location>

【问题讨论】:

  • 您在服务器日志中看到了什么?卡特琳娜和其他日志?您在 Codename One 网络监视器中看到了什么?如果您可以在没有端口的情况下在 https 上连接以查看 gif,则不应将端口用于 SSL。
  • 更新。我重新启动了 apache2(/etc/init.d/apache2 restart)并且错误发生了变化。然后说在邮递员和浏览器中找不到404。这指向我认为读取 /webapps 文件夹的权限,但不确定。所以磕磕绊绊地将这一行添加到apache2.conf文件中:别名/ProjectName“/var/lib/tomcat8/webapps/ProjectName”。我现在收到 403 权限错误。我在我的应用程序 web.xml 中添加了一个基本的 部分,但这并没有什么不同。日志显示没有任何相关内容。任何帮助表示赞赏
  • 另一个没有影响的更改是将其添加到 apache2.conf: 选项索引 FollowSymLinks AllowOverride all Allow from all 奇怪的是,当我使用 Postman 反复发送 Rest 请求时,它通常会显示 403 Forbidden,有时会显示 404 Not Found。
  • 在 apache.conf 中,我设置了“LogLevel debug”,并在我的 apache error.log 中发现了权限错误。所以还放了“ 要求所有授予的 ”,这解决了这些错误,但现在错误日志给出“AH00128:文件不存在”并指向完整的 URL 请求。当然这不存在,因为这是 Rest 类中的 @Path 参数。还是卡住了。
  • 我曾经在模拟器上运行的一个应用程序的代号超时,我正在摆弄 ConnectionRequest 认为有问题,后来我意识到这是由于在返回之前使用服务器发送邮件对用户的回应。我延迟发送邮件并立即返回回复,这为我解决了超时问题。顺便说一句,我使用的是 PHP 后端。

标签: rest ssl codenameone tomcat8 tls1.2


【解决方案1】:

经过 2 周的调整终于解决了这个问题。我的解决方案是反对这个电话

https://stackoverflow.com/posts/comments/87979638

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    相关资源
    最近更新 更多