我们有一台带有 GoDaddy 的专用服务器,运行需要 SSL 的 Plesk。
我已经生成了证书文件,并创建了 vhost_ssl.conf(因为我无法编辑默认的 plesk apache 配置 http.include,所以 vhost_ssl.conf 包含在 httpd.include 中),它告诉 apache 在哪里找到证书文件:
SSLCertificateFile /usr/local/psa/var/certificates/domain.com.crt
SSLCertificateKeyFile /usr/local/psa/var/certificates/domain.com.key
SSLCertificateChainFile /usr/local/psa/var/certificates/sub.class1.server.ca.pem
当我停止/启动 apache 时,它拒绝启动。error_log 上也没有任何内容(这很奇怪)。
然后我打开 httpd.include 并发现了这一点:
<VirtualHost 208.xxx.xxx.xxx:443>
ServerName domain.com:443
ServerAlias www.domain.com
UseCanonicalName Off
SSLEngine on
SSLVerifyClient none
SSLCertificateFile /usr/local/psa/var/certificates/certagC9054
Include /var/www/vhosts/domain.com/conf/vhost_ssl.conf
然后我评论了
SSLCertificateFile /usr/local/psa/var/certificates/certagC9054
(即 plesk 的 SSL 证书)并重新启动 apache,它运行良好。
看来 Apache 不喜欢同一个 VirtualHost 指令内的多个 SSLCertificateFile?
任何使用过 plesk 的人都知道,我不能直接删除 httpd.include 中的 SSLCertificateFile 指令,因为当有人使用它时 plesk 会覆盖我的更改 - 这就是它位于 vhost_ssl.conf 中的原因。
所以我陷入了困境,这超出了我微薄的管理技能。如果知道他在做什么的人能告诉我发生了什么,我将不胜感激。
提前致谢。
答案1
根据我使用 Plesk 的经验,当我使用 Plesk 管理站点来管理我的站点时,通常比手动编辑配置文件效果更好。Plesk 对 SSL 证书的内置支持非常好 - 您可以轻松添加从第三方获得的证书并将其与您在 Plesk 中配置的站点之一关联。
如果您选择直接修改配置文件,我在您的帖子中看到的危险信号是您试图将两个不同的证书应用于同一个虚拟主机。根据我的经验,SSL 证书通常仅在 IP 地址和 SSL 证书之间存在 1:1 关系时才有效。我的建议是删除其中一个 SSL 证书,或者将虚拟主机分成两个位于不同 IP 地址上的独立站点。
答案2
这与 Plesk 无关。问题在于 SSL 和 HTTP 的工作方式。基本上,SSL 在启动之前不知道服务器的名称,因此 Apache 无法选择使用哪组证书。请参阅http://www.modssl.org/docs/2.8/ssl_faq.html#ToC47了解有关“先有鸡还是先有蛋”问题的更多详细信息。