我对所有服务器内容都很陌生,并且我有一个关于 Apache 代理安全性的疑问。
我正在做的是:我有一个在同一个系统上的端口 11221 上以非安全模式运行的 websocket 服务器(仅限本地主机,但使用 apache,它是一个不同的应用程序)。
在我的 apache 中,我创建了一个带有该服务器代理的配置:
ServerName websocket.example.com
SSLCertificateFile /path/to/fullchain.pem
SSLCertificateKeyFile /path/to/privkey.pem
ProxyPass / ws://localhost:11221/
ProxyPassReverse / ws://localhost:11221/
这种组合工作完美,我可以使用安全的websocket 连接到服务器(使用wss://websocket.example.com
)。我检查过,我无法直接连接到它。ws://websocket.example.com:11221
将失败,并显示连接被拒绝(正如预期的那样)。
我现在的问题是:这安全吗?也就是说,即使更改为 websocket 协议后,连接是否仍保持加密状态?据我从研究中所了解,它确实保持加密状态,但我找不到明确的答案。
答案1
显然,SSL 层仅适用于从客户端到 apache 的连接;这才是您配置 apache 的原因,不是吗?(也称为“SSL 卸载”。我通常为此使用 pound 或 haproxy,如果您仅使用 apache 进行此操作,则它们比 apache 更简单/更小。)
apache 与监听端口 11221 的任何对象之间的通信必然是未加密的;否则您还需要将 SLL 证书安装到 websocket 应用程序中(并且使用 https:// 而不是 ws://)。
也就是说,如果您无法让一个进程将数据传输到同一系统上的另一个进程(毕竟您使用进程localhost
进行通信),那么您将面临更大的问题。理论上,在本地系统上拥有适当权限的人可以窃听通信,但该人也可以简单地使用所strace
涉及的进程来获取数据。