apache - 选择正确的客户端证书 - https - ssl 相关
问题描述
我有这种情况
- 为 https 连接和一些虚拟主机配置的 Apache Web 服务器。他们都运行良好,完全没有问题。Ubuntu 20.04 LTS
- 其中一个网站,我们称之为 alfa.com,通过 Soap 向远程服务器发送一些消息(我们称之为 beta.com)
- alfa.com 使用 let'sencrypt 公开一个 crt。每个用户和检查都可以,证书没有问题。
- 同一台服务器 beta.com 向 alfa.com 发送响应和消息,但 beta.com 需要一个客户端证书(由 alfa.com 公开),该证书必须是他们给我的
- beta.com 所需的证书不能用作 alfa.com 的主要证书,因为它有一个不受信任的 CA,我不能让我的网站公开“这个网站不安全”...
如何将 Let'sEncrypt 证书用于客户端,而将 StrangeCert 用于 beta.com?任何建议都是有帮助的,除了要求 beta.com 提供另一个证书,这是不可能的。
阿帕奇代理?iptables?还有什么?
解决方案
我找到了解决方案!使用 iptables 和 NAT 链,我可以在 Apache 的另一个虚拟主机部分重定向 beta.com SSL 请求,让“另一个世界”的一面保持不变。
- 网络上的每个客户端都访问 alfa.com:443 并使用 Let'sEncrypt 证书进行正常、完美的握手。虚拟主机配置
<VirtualHost *:443>
ServerName alfa.com
ServerAlias www.alfa.com
....
SSLCertificateFile /var/www/clients/client1/ssl/sitecert-le.crt
SSLCertificateKeyFile /var/www/clients/client1/ssl/sitecert -le.key
....
</VirtualHost>
- 只有 beta.com 对应的源网络(比如 1.2.3.0/24)通过 iptables 中的 trought NAT 链并转到 alfa.com:8080
<VirtualHost *:8080>
ServerName alfa.com
ServerAlias www.alfa.com
....
SSLCertificateFile /var/www/clients/client1/ssl/beta.com.crt
SSLCertificateKeyFile /var/www/clients/client1/ssl/beta .com.key
....
</VirtualHost>
- 这是相关的 iptables 命令
iptables -t nat -A PREROUTING -p tcp -s 1.2.3.0/20 --dport 443 -j DNAT --to-destination 192.168.1.10:8080
iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.10 - -dport 8080 -j SNAT --to-source 192.168.1.10
- 当然,如果只允许 beta.com 网络看到 alfa.com:8080,我们可以拒绝彼此的访问
iptables -A 输入 -s !1.2.3.0/20 -p tcp --destination-port 8080 -j DROP
推荐阅读
- excel - Powershell - 获取包含指向其他文件的外部链接的所有 excel 文件的列表
- django - 优化django rest框架API
- java - 忽略 ArrayIndexOutOfBoundsException
- html - 拆分宽表,每列一个值
- ios - 为什么视图没有及时更新?
- cloud - 如何将 docker 镜像拉取到 GCP Cloud
- visual-studio-code - Kinesis data stream to lambda function
- api - How to install Open CTI on MacBook
- javascript - Node js post request with axios and validate the user with joi
- r - 如何将月/日/年分类为R中的几个月