如何将不同的SSL证书应用于同一IP上的不同域?

时间:2018-08-11 16:42:55

标签: apache ssl virtualhost

如何将不同的SSL证书应用于同一IP,同一服务器和同一虚拟主机上的不同域(我正在使用apache 2.2)?目前,它无法正常工作,需要在apache 2.2上使用单个虚拟主机。

下面是我正在尝试的内容:

<VirtualHost *:80>
  ServerName main_url.com
  ServerAlias *.main_url.com
  DocumentRoot /app_path
  <Directory "/app_path">
    Options FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>



NameVirtualHost *:443

<VirtualHost *:443>
  ServerName main_url.com
  ServerAlias *.main_url.com
  DocumentRoot /app_path
  <Directory "/app_path">
    Options FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
  </Directory>
  SSLEngine on
  SSLCertificateFile /certs/main_url_com.crt
  SSLCertificateKeyFile /certs/main_url_com.key
  SSLCertificateChainFile /certs/main_url_com.ca-bundle
</VirtualHost>

<VirtualHost *:80>
  ServerName url_site1.com
  Redirect permanent / https://url_site1.com/
</VirtualHost>

<VirtualHost *:443>
  ServerName url_site1.com
  DocumentRoot /app_path
  <Directory "/app_path">
    Options FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
  </Directory>
  SSLEngine on
  SSLCertificateFile /certs/url_site1.crt
  SSLCertificateKeyFile /certs/url_site1.key
  SSLCertificateChainFile /certs/url_site1.ca-bundle
</VirtualHost>


<VirtualHost *:80>
  ServerName url_site2.com
  Redirect permanent / https://url_site2.dk/
</VirtualHost>

<VirtualHost *:443>
  ServerName url_site2.com
  DocumentRoot /app_path
  <Directory "/app_path">
    Options FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
  </Directory>
  SSLEngine on
  SSLCertificateFile /certs/url_site2.crt
  SSLCertificateKeyFile /certs/url_site2.key
  SSLCertificateChainFile /certs/url_site2.ca-bundle
</VirtualHost>

所有帮助将不胜感激。

谢谢

Fabio

1 个答案:

答案 0 :(得分:1)

如果您熟悉服务器配置,这将非常容易。请按照下面提到的步骤操作,您一定会实现您想要的。

1。您必须为两个域创建两个不同的目录。

mkdir -p /etc/apache2/ssl/example1.com
mkdir -p /etc/apache2/ssl/example2.com

2。接下来,您必须激活SSL模式

sudo a2enmod ssl
sudo service apache2 restart

3。为第一个域创建自签名SSL证书

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

4。然后填写您要求的详细信息:-

Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:Clifornia
Locality Name (eg, city) []:Los Angeles
Organization Name (eg, company) [Internet Widgits Pty Ltd]:AFffas LLC
Organizational Unit Name (eg, section) []:Dept of marketing
Common Name (e.g. server FQDN or YOUR name) []:example1.com                  
Email Address []:johndoe@example1.com

5。采取相同的步骤进行第二次(example2.com)

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

6。现在需要创建虚拟主机

sudo nano /etc/apache2/sites-available/example1.com
sudo nano /etc/apache2/sites-available/example2.com

接下来打开每个文件,然后粘贴以下配置。此配置是两个单独的配置文件的简化版本:在/ etc / apache2 / sites-available / default中找到的默认虚拟服务器配置文件,在/ etc / apache2 / sites-available / default-ssl中的默认SSL配置。

此配置包含一项重要更改,该更改有助于使用多个SSL证书。默认的SSL配置包含以下行,将证书指定为服务器的默认证书,

<VirtualHost _default_:443>
下面的

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

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

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName example1.com
        DocumentRoot /var/www

</VirtualHost>


<IfModule mod_ssl.c>
<VirtualHost *:443>

        ServerAdmin webmaster@localhost
        ServerName example1.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/example1.com/apache.crt
        SSLCertificateKeyFile /etc/apache2/ssl/example1.com/apache.key
</VirtualHost>

</IfModule>

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

ServerAdmin :这只是您的网站站长的电子邮件地址 ServerName::这是您的域名。确保您在没有前置www的情况下写入。 DocumentRoot::这是您保存站点信息的目录。当前它指向apache默认目录。对于2个不同的虚拟主机,您可能具有不同的服务器根目录。 SSLCertificateFile::此伪指令指向证书文件的位置。每个站点的证书都存储在本教程前面创建的目录中。 SSLCertificateKeyFile::此伪指令指向证书密钥的位置。每个站点的证书密钥存储在本教程前面创建的目录中。 设置两个域的配置。在将单独的SSL证书同时在两台服务器上使用之前,我们还有更多步骤。

7。编辑ports.conf文件 确保多个证书可在一个VPS上工作的最后一步是告诉服务器侦听端口443。将粗体行添加到apache端口配置文件中。

sudo nano /etc/apache2/ports.conf 


NameVirtualHost *:80
NameVirtualHost *:443

Listen 80

<IfModule 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
</IfModule>

<IfModule mod_gnutls.c>
    Listen 443
</IfModule>

8。激活虚拟主机

sudo a2ensite example1.com
sudo a2ensite example2.com

之后,只需重新启动apache

sudo service apache2 restart

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