同一个IP的不同域名如何申请不同的SSL证书?

How to apply different SSL certificates to different domains on the same IP?

如何在同一个IP、同一个服务器、同一个虚拟主机(我使用的是apache 2.2)的不同域上应用不同的SSL证书?现在它不工作,需要在 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>

我们将不胜感激。

谢谢

法比奥

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

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.Edit 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 证书。