如何在 Ubuntu 12.04 上使用 Apache 在一个 IP 上设置多个 SSL 证书
状态:已弃用
本文涵盖不再受支持的 Ubuntu 版本。如果您目前正在运行运行 Ubuntu 12.04 的服务器,我们强烈建议您升级或迁移到受支持的 Ubuntu 版本:
- 升级到 Ubuntu 14.04。
- 从 Ubuntu 14.04 升级到 Ubuntu 16.04
- 将服务器数据迁移到支持的版本
原因:
请参阅:
您可以使用服务器名称指示 (SNI) 在一个 IP 地址上托管多个 SSL 证书。
关于 SNI
虽然在单个虚拟专用服务器上托管多个站点对于使用虚拟主机来说不是一个挑战,但为每个站点提供单独的 SSL 证书传统上需要单独的 IP 地址。最近通过使用服务器名称指示 (SNI) 简化了该过程,它向站点访问者发送与请求的服务器名称匹配的证书。
笔记:
SNI 只能用于从您的 Web 服务器为多个 SSL 站点提供服务,并且根本不可能在其他守护进程(例如邮件服务器等)上工作。还有一小部分较旧的 Web 浏览器可能仍然会出现证书错误。维基百科有一份更新的软件列表,列出了支持和不支持此 TLS 扩展的软件。
设置
SNI 确实需要注册域名才能提供证书。
本教程中的步骤要求用户具有 root 权限。您可以在初始服务器设置教程的第 3 步和第 4 步中了解如何进行设置。
Apache 应该已经安装并运行在您的 VPS 上。
sudo apt-get install apache2
第一步——创建您的 SSL 证书
出于本教程的目的,这两个证书都是自签名的。我们将努力创建一个同时托管 example.com 和 example.org 的服务器。
SSL证书有两部分主要部分:证书本身和公钥。为了使所有相关文件易于访问,我们应该为每个虚拟主机的 SSL 证书创建一个目录。
mkdir -p /etc/apache2/ssl/example.com
mkdir -p /etc/apache2/ssl/example.org
第二步——激活 SSL 模块
下一步是在 Droplet 上启用 SSL。
sudo a2enmod ssl
通过重新启动 Apache 进行跟进。
sudo service apache2 restart
第三步——创建自签名 SSL 证书
当我们申请新证书时,我们可以通过将 365 更改为我们喜欢的天数来指定证书应保持多长时间。目前,该证书将在一年后到期。
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/example.com/apache.key –out /etc/apache2/ssl/example.com/apache.crt
使用此命令,我们将同时创建自签名 SSL 证书和保护它的服务器密钥,并将它们都放入新目录中。
此命令将提示终端显示需要填写的字段列表。
最重要的一行是“Common Name”。在这里输入您的官方域名,或者,如果您还没有,请输入您网站的 IP 地址。
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:New York
Locality Name (eg, city) []:NYC
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Awesome Inc
Organizational Unit Name (eg, section) []:Dept of Merriment
Common Name (e.g. server FQDN or YOUR name) []:example.com
Email Address []:webmaster@awesomeinc.com
然后继续对第二个 (example.org) 域执行相同的步骤:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/example.org/apache.key -out /etc/apache2/ssl/example.org/apache.crt
第四步——创建虚拟主机
保存并准备好证书后,您可以在虚拟主机文件中添加您的信息。
虽然不是必需的,但我们可以创建两个虚拟主机文件来将虚拟主机信息存储在单独的文件中,从默认的虚拟主机文件中复制配置。
sudo nano /etc/apache2/sites-available/example.com
sudo nano /etc/apache2/sites-available/example.org
继续并打开每个文件并粘贴到下面的配置中。
此外,此配置包括一项重要更改,可促进多个 SSL 证书。而默认的 SSL 配置具有以下行,将证书指定为服务器的默认证书,
<VirtualHost _default_:443>
下面的配置没有对默认证书的引用。这是关键。
总的来说,默认配置文件提供了各种有用的指令和可以添加到虚拟主机的附加配置选项。但是,以下信息将为服务器提供在一个 IP 地址上设置多个 SSL 证书所需的一切。
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName example.com
DocumentRoot /var/www
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin webmaster@localhost
ServerName example.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/example.com/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/example.com/apache.key
</VirtualHost>
</IfModule>
这些配置文件中有几行需要定制。
- ServerAdmin:这只是您网站管理员的电子邮件地址
- ServerName:这是您的域名。确保你写的时候没有前缀 www。
- DocumentRoot:这是您保存站点信息的目录。当前它指向 apache 默认目录。对于 2 个不同的虚拟主机,您可能会有不同的服务器根目录。
- SSLCertificateFile:该指令指向证书文件的位置。每个站点的证书都存储在我们之前在教程中创建的目录中。
- SSLCertificateKeyFile :该指令指向证书密钥的位置。每个站点的证书密钥都存储在我们之前在教程中创建的目录中。
设置两个域的配置。在单独的 SSL 证书在两个服务器上工作之前,我们还有更多的步骤。
第五步——编辑 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>
第六步——激活虚拟主机
sudo a2ensite example.com
sudo a2ensite example.org
(您可以使用以下命令停用虚拟主机: sudo a2dissite example.com
)
启用所有虚拟主机后,重新启动 apache。
sudo service apache2 restart
您现在应该能够访问这两个站点,每个站点都有自己的域名和 SSL 证书。
您可以通过仅输入域(例如 example.com 或 example.org)或带有 https 前缀的域(https://example.com 或 https://示例.org)。