对于静态网站,我们在 Web 服务器中安装证书,例如 Apache 或 Nginx。
但是 Web API 或 Web 服务呢?例如,假设您有一个 Web 服务正在被客户调用。您的 Web 服务位于负载均衡器(例如 Nginx)后面的服务器上。您有自己的证书颁发机构,并且您向客户和自己的 Web 服务颁发证书,因为您需要相互认证。
您在哪里安装 Web 服务的证书?它是特定于语言的吗?
答案1
您可以将其安装在 TLS 连接终止的任何地方;它与“静态网站”的情况没有根本区别。
因此,如果您的应用服务器本身使用 HTTPS(可能位于 TCP 级负载平衡器后面),那么它们需要拥有服务器的证书/密钥(并且它们还将执行客户端证书的验证)。例如,Python(WSGI)世界中的 Gunicorn 可以自行处理 TLS。
同时,负载均衡器或反向代理也常常代表仅支持 HTTP 的应用服务器执行 TLS 终止。因此,如果您的应用位于 Nginx 后面,那么您可以允许 Nginx 处理 TLS。(如果使用 HTTP 级反向代理,那么它也不可避免地必须执行 TLS,否则它就无法完成处理 HTTP 请求的工作。)
许多通过 Apache 或 Nginx 托管的网站不是静态 – 数以百万计的网站和 API 使用直接托管在 Web 服务器中的动态解释器,例如 Apache 的 mod_php 或 IIS 的 ASP.NET,还有许多网站和 API 使用 Apache/Nginx 作为基于 FastCGI 的应用程序(例如 php-fpm)的前端。因此,如果您有一个使用 PHP 通过 Apache 托管的动态网站,Apache 仍然会执行所有操作,包括 TLS。