在apache上托管多个SSL证书

Jim*_*Jim 14 ssl apache2

我希望有人能帮助我.我有2个IP可用于执行此操作,需要在同一个Apache服务器上托管2个不同的安全(SSL)域.我已经读过Apache 2.2的内容,可以使用单个IP,使用某种加载项,但我希望尽可能简单,并且愿意使用这两个IP来完成这项任务.我已经拥有2个域名签名证书.

我在这里发布的这个设置有效,但我遇到的问题是,当我去domain2.net时,我收到一个浏览器警告告诉我证书与域名不匹配但匹配domain1.com

我正在使用CentOS 5和Apache 2.2.3.CentOS有一个ssl.conf文件,这些行是我认为给我带来的麻烦:

SSLCertificateFile /etc/pki/tls/certs/domain1.com.crt
SSLCertificateKeyFile /etc/pki/tls/private/domain1.com.key
Run Code Online (Sandbox Code Playgroud)

我的印象是我可以在虚拟主机容器中覆盖这些值并引用我需要的键,但它不会出现这种情况.当我在ssl.conf文件中注释掉这两行时,Apache将不会重启.ssl_log暗示:SSLCertificateKeyFile

这些是我的虚拟容器:

<VirtualHost 2.2.2.2:443>
   SSLEngine on
   SSLCertificateFile /etc/pki/tls/certs/domain2.net.crt
   SSLCertificateKeyFile /etc/pki/tls/private/domain2.net.key

  DocumentRoot "/var/www/domain2"
   ServerName domain2.net
   ServerAlias domain2.net
   DirectoryIndex "index.php"

   <Directory /var/www/html/domain2>
     Options -Indexes FollowSymLinks
     AllowOverride All
     Order allow,deny
     Allow from all
   </Directory>
</VirtualHost>


<VirtualHost 1.1.1.1:444>
   SSLEngine on
   SSLCertificateFile /etc/pki/tls/certs/domain1.com.crt
   SSLCertificateKeyFile /etc/pki/tls/private/domain1.com.key

  DocumentRoot "/var/www/html"
   ServerName domain1.com
   ServerAlias domain1.com
   DirectoryIndex "index.php"

   <Directory /var/www/html>
     Options -Indexes FollowSymLinks
     AllowOverride All
     Order allow,deny
     Allow from all
   </Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

如何使用SSL使这两个域工作?我也试过为不同的IP使用相同的端口,但同样,Apache不会重启.

我真的迷失了,所以如果有人能伸出援助之手,我真的很感激.

ghb*_*att 10

好问题!

我能够在同一台服务器上获得两个SSL证书.你应该能够做你想做的事.

你的配置中的东西对我来说很奇怪:

  1. 我建议将端口443用于两个受SSL保护的站点.您应该在apache的conf文件中有一个特定的指令,用于侦听端口443.对我而言,它位于/etc/apache2/ports.conf

    Listen 443
    
    Run Code Online (Sandbox Code Playgroud)

    .

  2. 使用ServerName和ServerAlias每个虚拟主机使用相同的域似乎很奇怪.尝试使ServerAlias不同或将其删除:

    ServerName domain1.com
    ServerAlias www.domain1.com
    
    Run Code Online (Sandbox Code Playgroud)

    .

  3. 我假设你在你发布的conf中替换了你的IP和域名.即使它们不是您正在使用的实际IP,您可能需要仔细检查它们是否可以将您带到SSL之外的正确位置(因为显然SSL不起作用).

.

检查apache2错误日志以获取更多信息.对我来说,日志位于:/var/log/apache2/error.log.您可以使用以下命令设置它:ErrorLog /var/log/apache2/error.log

最后,供您参考的是我的ssl-default(ssl.conf).我将您的域名和IP替换为您在示例conf中使用的域名和IP.我有多个子域使用NameVirtualHost,因为我有一个通配符证书:

<IfModule mod_ssl.c>
<Directory />
  Options FollowSymLinks
  AllowOverride All
</Directory>
<Directory /var/www/>
  Options  FollowSymLinks MultiViews
  AllowOverride All
  Order allow,deny
  allow from all
</Directory>

NameVirtualHost 1.1.1.1:443
NameVirtualHost 2.2.2.2:443

ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/ssl_access.log combined

<FilesMatch "\.(cgi|shtml|phtml|php)$">
  SSLOptions +StdEnvVars
</FilesMatch>

# 1.1.1.1 = domain1.com

<VirtualHost 1.1.1.1:443>
  ServerName www.domain1.com

  ServerAdmin admin@domain1.com

  SSLEngine on
  SSLCertificateKeyFile /var/www/ssl/domain1.key
  SSLCertificateFile /var/www/ssl/wildcard.domain1.crt

  BrowserMatch ".*MSIE.*" \
    nokeepalive ssl-unclean-shutdown \
    downgrade-1.0 force-response-1.0

  DocumentRoot /var/www/domain1/www.domain1.com/web
  DirectoryIndex index.php index.html
</VirtualHost>

<VirtualHost 1.1.1.1:443>
  ServerName secure.domain1.com

  ServerAdmin admin@domain1.com

  SSLEngine on
  SSLCertificateKeyFile /var/www/ssl/domain1.key
  SSLCertificateFile /var/www/ssl/wildcard.domain1.crt

  BrowserMatch ".*MSIE.*" \
    nokeepalive ssl-unclean-shutdown \
    downgrade-1.0 force-response-1.0

  DocumentRoot /var/www/domain1/secure.domain1.com/
  DirectoryIndex index.php index.html
</VirtualHost>


# 2.2.2.2 = *.domain2.com

<VirtualHost 2.2.2.2:443>
  ServerName admin.domain2.com

  ServerAdmin admin@domain2.com

  SSLEngine on
  SSLCertificateKeyFile /var/www/ssl/domain2.key
  SSLCertificateFile /var/www/ssl/domain2.crt

  BrowserMatch ".*MSIE.*" \
    nokeepalive ssl-unclean-shutdown \
    downgrade-1.0 force-response-1.0

  LogLevel warn
  CustomLog /var/log/apache2/access.log combined
  ErrorLog /var/log/apache2/error.log

  DocumentRoot /var/www/domain2/secure.domain2.com/web
  DirectoryIndex index.php index.html

  php_flag display_errors on
  php_value error_reporting 7
</VirtualHost>

</IfModule>
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助!!