我在 apache2 上设置了两个 SSL 证书,但当我使用域输入时,第一个证书有效,当我使用服务器 ipaaddress 输入时,它显示与我在域上拥有的证书相同的证书。我已禁用默认和默认 SSL 虚拟主机。以下是我的虚拟主机:
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName example.com:443
ServerAlias www.example.com:443
DocumentRoot /var/www/example.com/public_html
ErrorLog /var/log/apache2/error-log.log
CustomLog /var/log/apache2/custom-log.log common
DirectoryIndex index.html index.php index.xhtml index.htm
#Allow phpmyadmin /usr/share/phpmyadmin
<Directory /usr/share/phpmyadmin>
Options -Indexes FollowSymLinks
AllowOverride None
Order deny,allow
allow from all
</Directory>
<Directory />
Options -Indexes FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
</Directory>
<Directory /var/www/>
Options FollowSymLinks MultiViews -Includes -ExecCGI -Indexes
AllowOverride All
Order allow,deny
allow from all
LimitRequestBody 104857600
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
SSLEngine on
SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
SSLCertificateFile /etc/apache2/ssl/first-ssl.crt
SSLCertificateKeyFile /etc/apache2/ssl/first-ssl.key
SSLCertificateChainFile /etc/apache2/ssl/first-ssl.crt
</VirtualHost>
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName 188.226.208.247
DocumentRoot /var/www/
SSLEngine on
SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
SSLCertificateFile /etc/apache2/ssl/second-ssl.crt
SSLCertificateKeyFile /etc/apache2/ssl/second-ssl.key
</VirtualHost>
答案1
“...由于 SSL 的性质,建立 SSL 连接时不会使用主机信息。Apache 将始终使用默认虚拟主机的证书,该证书是基于名称的虚拟主机的第一个定义的虚拟主机。 虽然这并不意味着您将永远无法访问第二个虚拟主机,但这确实意味着您的用户在尝试访问 some.domain2.com 时始终会收到证书不匹配警告...”
来自阿帕奇文档:
“...原因是 SSL 协议是一个封装 HTTP 协议的单独层。因此 SSL 会话是一个单独的事务,发生在 HTTP 会话开始之前。服务器在 IP 地址 X 和端口 Y(通常为 443)上接收 SSL 请求。由于 SSL 请求不包含任何 Host: 字段,服务器无法决定使用哪个 SSL 虚拟主机。通常,它只是使用它找到的第一个与指定的端口和 IP 地址匹配的虚拟主机。...”
一个 IP 地址可以拥有多个 SSL 证书,信噪比(服务器名称指示)但仅限于最新版本的 Apache 和 OpenSSL(Apache v2.2.12 和 OpenSSL v0.9.8j)。
简而言之:
如果您想为虚拟主机使用不同的 SSL 证书,那么您需要为每个虚拟主机提供不同的 IP 地址或使用 SNI。
答案2
请检查为哪个域名购买的第二个 SSL,并且请输入域名而不是 IP 地址。
ServerName 188.226.208.247
change to
ServerName domainname .