我已经为我的服务器制作了 SSL 证书,但我只能将 SSL 用于特定网站吗?
例如,里面/var/www
有很多 Web 文件夹,我希望“A”网站使用 HTTPS,而其他网站不使用 HTTPS。
如何設定?
答案1
这Apache 维基有一个不错的页面使用 SNI 的虚拟主机的 SSL。他们一步一步地描述了设置过程。我会在这里写下要点。
您需要 OpenSSL 0.9.8f 或更高版本。如果您使用 Ubuntu Hardy Heron (8.04) 或更高版本,您将获得正确的版本。此外,OpenSSL 应该启用 TLSExtensions。这是自 0.9.8k 版本(Lucid、10.04)以来的默认情况。您的 Apache 版本应该有 SNI 支持。查看您的error.log
:
[警告] 初始化:基于名称的 SSL 虚拟主机仅适用于支持 TLS 服务器名称指示的客户端(RFC 4366)
如果您发现上述消息,则表示 SNI 已启用,如果您看到下面的消息,则表示 SNI 未内置。
您不应将基于名称的虚拟主机与 SSL 结合使用
在您的默认配置中,您应该将 TLSv1 设置为支持的协议。查找变量SSLProtocol
。如果找不到任何设置,您可以添加:
SSLProtocol All -SSLv2
这增加了对所有已知 SSL 和 TLS 版本的支持,但不包括 SSL 版本 2。
现在您必须设置您的虚拟主机并且可能还需要激活 SSL 支持(sudo a2ensite ssl
加上 Apache 重启):
<virtualhost *:443>
SSLEngine On
SSLCertificateFile /path/to/your/sslcert
DocumentRoot /path/your/webcontent
</virtualhost>
此外,还要设置SSLStrictSNIVHostCheck on
您的 Apache 或 vhost 配置。现在您可以重新启动 Apache,并且可能会获得 SSL 支持。但是 SNI 有很多陷阱。如果遇到任何错误,请检查您的 error.log。它可能会为您提供错误提示。
Apache 文档有一些关于其 SSL 支持的详细描述。