为单个虚拟主机设置自签名证书

为单个虚拟主机设置自签名证书

我按照本指南为本地开发服务器生成了自签名证书https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-apache-in-ubuntu-18-04

当系统询问时,我将服务器 IP 设置为“通用名称”值。我没有设置防火墙。

一旦完成了指南建议的所有其他修改,我就可以https://192.168.1.202

问题在于

我有一些想要保护的虚拟主机,因此我尝试使用相同的证书通过 https 访问我的网站,但我总是被重定向到 apache 根页面。

这是我的配置文件

/etc/apache2/sites-enabled/kopakabana.conf

<VirtualHost *:80>
    SSLEngine on
    SSLCertificateFile     /etc/ssl/certs/apache-selfsigned.crt
    SSLCertificateKeyFile  /etc/ssl/private/apache-selfsigned.key`
    ....
</VirtualHost>

我哪里错了?

答案1

您似乎在虚拟主机配置中监听端口 80 而不是端口 443。

第一行应该是:

<VirtualHost *:443>

可能还存在其他问题。您提到了以下内容:

我有一些想要保护的虚拟主机,因此我尝试使用相同的证书通过 https [...] 访问我的网站。

然而,您还提到您正在使用服务器的 IP 地址访问您的网站。

这种方法不起作用,您不能让多个虚拟主机监听同一台主机,只有一个可以起作用。

例如,假设您有以下两个虚拟主机:

  • example.conf
  • kopakabana.conf

当您通过 Apache 访问您的服务器时,它需要确定需要为哪个站点提供服务。它无法同时为两个站点提供服务。

由于您通过 IP 访问您的网站,Apache 将为第一个匹配的虚拟主机提供服务。在您的情况下,它可能会解析为默认配置文件。

您需要做的是实际为虚拟主机分配一个服务器名称。如果您想使用相同的证书运行它们,您可以将它们创建为子域并为其分配通配符证书。

例如,考虑以下虚拟主机:

  • example.conf

    <VirtualHost *:443>
        ServerName example.mymachine.local
        # [...]
    </VirtualHost>
    
  • kopakabana.conf

    <VirtualHost *:443>
        ServerName kopakabana.mymachine.local
        # [...]
    </VirtualHost>
    

*.mymachine.local在这种情况下,您可以为它们两者创建一个证书并在其上使用它。

接下来,只需在您自己的机器上编辑该/etc/hosts文件并将以下内容附加到其中,以便您的浏览器可以正确解析域。

192.168.1.202   example.mymachine.local
192.168.1.202   kopakabana.mymachine.local

https://192.168.1.202最后,您不是访问 ,而是访问https://kopakabana.mymachine.localhttps://example.mymachine.local

相关内容