语境
我有一个如下所示的服务器设置:
- Apache 服务器正在监听
example.com
; - 公共端口
80
重定向至443
; - 公共端口
443
转发到 Symfony 项目; - 在同一台机器上,有一个用 Rust 编写的本地 API 服务器,它正在监听
http://127.0.0.1:8030
(不支持 SSL/TLS(英文): - 本地 API 能够响应一些敏感数据,例如 JWT 身份验证令牌;
https://example.com/api
是本地 API 服务器的代理(ProxyPass
以及ProxyPassReverse
,请参阅下面的 Apache 配置),以便:- 向最终用户公开 API支持 SSL/TLS,
- 并能够从公共 Symfony 网站向其发送 XHR javascript 请求。
笔记:我使用本地 API 的代理进行了此设置,因为我在 CORS 规则方面遇到了很多麻烦;但这是不是我的问题的主题(我猜有更好的设置)。
问题
这个设置可以被认为是安全的吗,或者是否应该为本地 API 添加 SSL/TLS 支持是一个好主意?
Apache 配置,稍微简化一下
<VirtualHost *:80>
ServerName example.com
Redirect / https://example.com
</VirtualHost>
<VirtualHost *:443>
ServerName example.com
DirectoryIndex /index.php
ProxyPass /api http://127.0.0.1:8030/
ProxyPassReverse /api http://127.0.0.1:8030/
SSLEngine on
SSLProtocol -ALL +TLSv1.2 +TLSv1.3
SSLCompression off
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
SSLCACertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
DocumentRoot /var/www/html/symfony_project/public
<Directory /var/www/html/symfony_project/public>
AllowOverride All
Require all granted
Allow from All
FallbackResource /index.php
</Directory>
ErrorLog /var/log/apache2/symfony_project_error.log
CustomLog /var/log/apache2/symfony_project_access.log combined
</VirtualHost>
答案1
取决于访问主机本身的权限。如果系统仅处理 http/https 流量,并且不允许任何用户(管理员除外)登录,我会说是的,这是安全的设计...
问题是谁和何时可能捕获敏感数据。SSL 终止无论如何都是在服务器上完成的,因此无论如何都会存在不安全数据的部分(例如 RAM)。因此,除非系统访问受到限制并且不安全数据不会离开系统(例如不会通过网卡),否则数据将是安全的。
本地连接上的 SSL 层不会带来太大的好处,因为所有密钥都位于系统上。解密本地流量所节省的资源可用于系统可以处理的更高连接量...