选择正确的客户端证书 - https - ssl 相关

发布时间:2021-02-25 13:29

我有这种情况

  • 为 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再给一个证书,这是不可能的。

Apache 代理? iptables?还有什么?

回答1

我找到了解决方案! 使用 iptables 和 NAT 链,我能够在 Apache 的另一个虚拟主机部分重定向 beta.com SSL 请求,让“另一个世界”的一面保持不变。

  • 网络上的每个客户端都访问 alfa.com:443 并与 Let'sEncrypt 证书进行正常、完美的握手。 虚拟主机配置
<块引用>

<虚拟主机 *:443>
服务器名称 alfa.com
服务器别名 www.alfa.com
....
SSLCertificateFile /var/www/clients/client1/ssl/sitecert-le.crt
SSLCertificateKeyFile /var/www/clients/client1/ssl/sitecert-le.key
....

  • 只有对应于 beta.com 的源网络(比如 1.2.3.0/24)通过 iptables 中的 NAT 链并转到 alfa.com:8080
<块引用>

<虚拟主机 *:8080>
服务器名称 alfa.com
服务器别名 www.alfa.com
....
SSLCertificateFile /var/www/clients/client1/ssl/beta.com.crt
SSLCertificateKeyFile /var/www/clients/client1/ssl/beta.com.key
....

  • 这是相关的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