如何在Ubuntu 12.04上用Apache在一个IP上设置多个SSL证书

您可以使用服务器名称指示(SNI)在一个IP地址上托管多个SSL证书。

关于SNI

虽然在单个虚拟专用服务器上托管多个站点不是使用虚拟主机的一个挑战,为每个站点提供单独的SSL证书传统上需要单独的IP地址。 最近通过使用服务器名称指示(SNI)简化了该过程,该服务器名称指示(SNI)向站点访问者发送与所请求的服务器名称匹配的证书。

注意:

SNI只能用于从您的Web服务器提供多个SSL站点,并且不可能在其他守护程序(例如邮件服务器等)上工作。还有一小部分旧的Web浏览器仍然可能会出现证书错误。 维基百科拥有的软件,不和不支持此TLS扩展的更新列表。

建立

SNI确实需要注册域名才能提供证书。

本教程中的步骤要求用户具有root权限。 你可以看到如何设置了在初始服务器设置教程第3步和4。

Apache应该已经在您的VPS上安装和运行。 如果不是这样,您可以使用此命令下载:

sudo apt-get install apache2

第一步 - 创建SSL证书

为了本教程的目的,两个证书都将是自签名的。 我们将努力创造托管两种example.comexample.org的服务器。

SSL证书有2个主要部分:证书本身和公钥。 为了使所有相关文件易于访问,我们应为每个虚拟主机的SSL证书创建一个目录。

mkdir -p /etc/apache2/ssl/example.com
mkdir -p /etc/apache2/ssl/example.org

第二步 - 激活SSL模块

下一步是在Droplet上启用SSL。

sudo a2enmod ssl
后续重新启动Apache。
sudo service apache2 restart

第三步 - 创建自签名的SSL证书

当我们请求新的证书时,我们可以通过将365更改为我们喜欢的天数来指定证书应该保持有效的时间。 因为它认为这个证书将在一年后过期。

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/example.com/apache.key –out /etc/apache2/ssl/example.com/apache.crt

使用此命令,我们将创建自签名SSL证书和保护它的服务器密钥,并将它们放置到新目录中。

此命令将提示终端显示需要填写的字段列表。

最重要的一行是“Common Name”。 在这里输入您的官方网域名称,如果您还没有,请输入您网站的IP位址。

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:New York
Locality Name (eg, city) []:NYC
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Awesome Inc
Organizational Unit Name (eg, section) []:Dept of Merriment
Common Name (e.g. server FQDN or YOUR name) []:example.com                  
Email Address []:webmaster@awesomeinc.com
然后对第二个(example.org)域执行相同的步骤:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/example.org/apache.key -out /etc/apache2/ssl/example.org/apache.crt

第四步 - 创建虚拟主机

一旦您保存并准备好证书,就可以在虚拟主机文件中添加您的信息。

虽然不是必需的,但我们可以创建两个虚拟主机文件,将虚拟主机信息存储在单独的文件中,从默认虚拟主机文件复制配置。

sudo nano /etc/apache2/sites-available/example.com
sudo nano /etc/apache2/sites-available/example.org

继续,打开每个文件,并粘贴在下面的配置。 这种配置是两个独立的配置文件的简化版本:在的/ etc / apache2的/网站的可用/默认和位于/ etc / apache2的/网站的可用/默认SSL默认的SSL配置中找到的默认虚拟服务器的配置文件。

此外,此配置包括有助于多个SSL证书的重要更改。 而缺省SSL配置具有以下行,将证书指定为服务器的默认证书,

&ltVirtualHost _default_:443>

下面的配置没有引用默认证书。 这是关键。

总的来说,默认配置文件提供了各种有用的指令和可以添加到虚拟主机的其他配置选项。 但是,以下信息将为服务器提供在一个IP地址上设置多个SSL证书所需的一切。

&ltVirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName example.com
        DocumentRoot /var/www

&lt/VirtualHost>


&ltIfModule mod_ssl.c>
&ltVirtualHost *:443>

        ServerAdmin webmaster@localhost
        ServerName example.com
        DocumentRoot /var/www

        #   SSL Engine Switch:
        #   Enable/Disable SSL for this virtual host.
        SSLEngine on

        #   A self-signed (snakeoil) certificate can be created by installing
        #   the ssl-cert package. See
        #   /usr/share/doc/apache2.2-common/README.Debian.gz for more info.
        #   If both key and certificate are stored in the same file, only the
        #   SSLCertificateFile directive is needed.
        SSLCertificateFile /etc/apache2/ssl/example.com/apache.crt
        SSLCertificateKeyFile /etc/apache2/ssl/example.com/apache.key
&lt/VirtualHost>

&lt/IfModule>

这些配置文件中有几行需要自定义。

  • 的ServerAdmin:这简直是网站管理员的电子邮件地址
  • 服务器名称 :这是您的域名。 确保您在没有前置www的情况下编写它。
  • 的DocumentRoot:这是你保持你的网站信息的目录。 目前它指向apache的默认目录。 您可能有不同的服务器根为2个不同的虚拟主机。
  • 了SSLCertificateFile:这个指令指向证书文件的位置。 每个站点的证书存储在我们之前在教程中创建的目录中。
  • 了SSLCertificateKeyFile:这个指令指向证书密钥的位置。 每个站点的证书密钥存储在本教程前面创建的目录中。

设置两个域的配置。 我们仍然有更多的步骤,单独的SSL证书将在两个服务器上工作。

第五步 - 编辑ports.conf文件

确保多个证书在一个VPS上工作所需的最后一步是告诉服务器在端口443上监听。将粗体线添加到apache ports配置文件。

sudo nano /etc/apache2/ports.conf 
NameVirtualHost *:80
NameVirtualHost *:443

Listen 80

&ltIfModule mod_ssl.c>
    # If you add NameVirtualHost *:443 here, you will also have to change
    # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
    # to 
  
   
    # Server Name Indication for SSL named virtual hosts is currently not
    # supported by MSIE on Windows XP.
    Listen 443
&lt/IfModule>

&ltIfModule mod_gnutls.c>
    Listen 443
&lt/IfModule>
  

第六步 - 激活虚拟主机

最后一步是激活主机。 Apache使激活和停用主机非常容易。
sudo a2ensite example.com
sudo a2ensite example.org

(您可以禁用虚拟主机的命令: sudo a2dissite example.com

在启用所有虚拟主机后,重新启动apache。

sudo service apache2 restart

您现在应该可以访问这两个网站,每个网站都有自己的域名和SSL证书。

您只需在网域(例如example.com或example.org)或https前置网址(https://example.com或https://)输入网址,即可查看包含或不包含已签署SSL凭证的网站。 example.org)。

作者Etel Sverdlov
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏