有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用来自Apple(Netty)的ServiceTalk作为一个RESTful API和Jersey,让我们加密HTTPS

因此,基本上,我已经使用苹果(Netty实现)和泽西(Jersey)的ServiceTalk制作了一个RESTful API,它可以正常工作。不过只能通过http。我已经看到,当我让我的React网页通过http发出POST请求时,它会抱怨CORS(我仍在尝试修复),并且浏览器(至少是Brave)不允许发出请求,因为它是http,我的网页使用let’s encrypt cert在https上运行。我如何修复这个问题?我需要用Netty添加SSL吗?如果是这样的话,我怎么能用一个每隔一段时间就会发生变化的证书做到这一点呢

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


共 (1) 个答案

  1. # 1 楼答案

    你是对的,如果你已经有了为你的静态内容(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之间的连接不会被加密。在某些环境中,根据安全策略和要求,这可能是不合适的。如果是这种情况,还需要使用返回HttpServerSecurityConfiguratorHttpServerBuilder.secure()方法为ServiceTalk配置SSL/TLS。下面是一个secure ServiceTalk server的例子

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

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

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