我发现使用 IPv6 可以为一个接口分配多个地址。我想利用这一点来表能够拥有与特定地址关联的特定 https 证书,而不是尝试使用一个包罗万象的证书。有谁知道如何在 Linux (Ubuntu) 上指定绑定到接口的 IP 地址集合?
我将使用 Nginx,因此它可以在指定虚拟主机时绑定到 IP 地址。
顺便说一句,访问我正在设置的服务的客户端启用了 IPv6,因此我不担心无法获得任何基于 IPv4 的连接。
答案1
是的,您可以为接口分配任意数量的 IPv6 地址(事实上,也可以分配 IPv4 地址)。这可以通过程序来完成ip
(例如sudo ip addr add 2001:db8:1:2::1/64 dev eth0
)。这大致相当于拥有多个接口,每个接口都有一个地址,只不过流量通过同一接口。如何使地址在重新启动后保持不变取决于 Linux 发行版,请参阅您的发行版的文档。
配置侦听这些地址的服务器时,您就像每个地址有一个接口一样。
答案2
多年来,您不再需要为每个证书提供 IP 地址。十年前,每个证书都需要一个 IP,这确实是事实。
对于包罗万象的证书,大多数公共 CA 不鼓励使用它们,并且常常拒绝颁发它们。
据我所知,ngINX 支持 SNI(服务器名称指示),因此,只要 ngINX 编译时支持 SNI(默认情况下),就需要配置多个(SSL)虚拟主机。
SNI 的要点还在于不必创建多主机证书。您为每个虚拟主机创建不同的证书。因此,vhost www.example1.com 指向 www.example1.com 的证书,而 www.example2.com 的 vhost 则指向仅包含 www.example2.com 的不同证书。
从如何在 Ubuntu 12.04 上使用 Nginx 在一个 IP 上设置多个 SSL 证书
关于SNI
尽管使用虚拟主机在单个虚拟专用服务器上托管多个站点并不是一个挑战,但为每个站点提供单独的 SSL 证书传统上需要单独的 IP 地址。最近通过使用服务器名称指示 (SNI) 简化了该过程,它向站点访问者发送与所请求的服务器名称相匹配的证书。