状态: 已弃用
本文介绍了不再受支持的 Ubuntu 版本。 如果您当前正在运行运行 Ubuntu 12.04 的服务器,我们强烈建议您升级或迁移到受支持的 Ubuntu 版本:
原因: Ubuntu 12.04 已于 2017 年 4 月 28 日终止生命周期 (EOL) and no longer receives security patches or updates. This guide is no longer maintained.
请参阅:
本指南可能仍可用作参考,但可能不适用于其他 Ubuntu 版本。 如果可用,我们强烈建议使用为您正在使用的 Ubuntu 版本编写的指南。 您可以使用页面顶部的搜索功能来查找更新的版本。
您可以使用服务器名称指示 (SNI) 在一个 IP 地址上托管多个 SSL 证书。
关于 SNI
尽管使用虚拟主机在单个虚拟专用服务器上托管多个站点并不是挑战,但为每个站点提供单独的 SSL 证书通常需要单独的 IP 地址。 最近通过使用服务器名称指示 (SNI) 简化了该过程,它向站点访问者发送与请求的服务器名称匹配的证书。
笔记:
SNI 只能用于从您的 Web 服务器为多个 SSL 站点提供服务,并且根本不可能在其他守护进程上工作,例如邮件服务器等。 还有一小部分较旧的 Web 浏览器可能仍会出现证书错误。 Wikipedia 更新了支持和不支持此 TLS 扩展的软件列表。
设置
SNI 确实需要注册域名才能提供证书。
本教程中的步骤要求用户具有 root 权限。 您可以在 初始服务器设置教程 的第 3 步和第 4 步中查看如何设置它。
Apache 应该已经在您的 VPS 上安装并运行。 如果不是这种情况,您可以使用以下命令下载它:
sudo apt-get install apache2
第一步——创建您的 SSL 证书
出于本教程的目的,这两个证书都是自签名的。 我们将努力创建一个同时托管 example.com 和 example.org 的服务器。
SSL 证书有 2 个主要部分:证书本身和公钥。 为了使所有相关文件易于访问,我们应该为每个虚拟主机的 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 证书和保护它的服务器密钥,并将它们都放入新目录中。
该命令将提示终端显示需要填写的字段列表。
最重要的一行是“通用名称”。 在此处输入您的官方域名,或者,如果您还没有,请输入您网站的 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
继续打开每个文件并粘贴下面的配置。 此配置是两个独立配置文件的简化版本:默认虚拟服务器配置文件位于 /etc/apache2/sites-available/default 和默认 SSL 配置位于 /etc/apache2 /sites-available/default-ssl。
此外,此配置还包括一项重要更改,可促进多个 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>
第六步——激活虚拟主机
The last step is to activate the hosts. Apache makes activating and deactivating hosts very easy.
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://example.org)。