0

所以基本上,我使用 Apple(Netty 实现)和 Jersey 的 ServiceTalk 制作了一个 RESTful API,它可以工作。只能通过http。我已经看到,当我让我的 React 网页通过 http 发出 POST 请求时,它会抱怨 CORS(我仍在尝试修复)并且浏览器(至少勇敢)不会允许请求因为它是 http 并且我的网页使用让我们加密证书在 https 上运行。我该如何解决这个问题?我需要用 Netty 添加 SSL 吗?如果是这样,我该如何使用每隔一段时间就会更改的证书来做到这一点?

我还使用 Let's Encrypt 设置了 NGINX,并从 NGINX + Let's Encrypt 的设置向导中启用了自动更新证书设置。如果我能以某种方式让 NGINX 将 HTTPS 请求作为 http 上的 netty 服务器的代理运行,那么我认为这也是一个更好的解决方案。我知道这是 NodeJS Express + NGINX 的常见做法。

4

1 回答 1

2

你是对的,如果你已经拥有为你的静态内容(html/css/js)提供服务的 NGINX,最好将它配置为 ServiceTalk 后端服务的代理。这将使您将 SSL/TLS 配置保存在一个地方(仅限 NGINX 配置文件),并且您将能够使用其自动更新证书功能。有关如何将 NGINX 配置为后端服务的 SSL/TLS 代理的示例,请参见此处:https ://docs.nginx.com/nginx/admin-guide/security-controls/securing-http-traffic-upstream /

但是,在这种情况下,您在 NGINX 和 ServiceTalk 之间的连接不会被加密。在某些环境中,根据安全策略和要求,它可能不合适。如果是这种情况,您还需要使用HttpServerBuilder.secure()返回的方法为 ServiceTalk 配置 SSL/TLS HttpServerSecurityConfigurator。这是一个安全 ServiceTalk 服务器的示例。

为了避免 CORS,即使 ServiceTalk 也配置了 SSL/TLS 连接,请继续使用 NGINX 作为代理。如果需要在浏览器和后端服务之间避免额外的代理,请直接定位 ServiceTalk。但是 NGINX 提供了额外的功能,比如多个后端实例之间的负载平衡。

为了在 ServiceTalk/Netty 中获得最佳 SSL 性能,我们建议使用提供的 OpenSSL 而不是内置的 JDK 提供程序。有关更多信息,请参阅性能/netty-tcnative OpenSSL 引擎文档部分。

注意:ServiceTalk 不会自动更新 SSL/TLS 证书。当证书过期时,您将需要重新启动服务器。

于 2019-11-19T20:59:52.207 回答