如何在Apache上为Ubuntu14.04创建SSL证书
介绍
TLS 或传输层安全性及其前身 SSL 安全套接字层是为将正常流量置于受保护的加密包装器中而创建的安全协议。
这些协议允许在远程各方之间安全地发送流量,而不会被中间人截获和读取流量。 它们还有助于通过将服务器建立为受证书颁发机构信任和真实的服务器来验证整个互联网的域和服务器的身份。
在本指南中,我们将介绍如何在 Ubuntu 14.04 服务器上为 Apache 创建 自签名 SSL 证书 ,这将允许您加密到服务器的流量。 虽然这并没有提供第三方验证您的服务器身份的好处,但它满足了那些只想安全传输信息的人的要求。
注意: 您可能需要考虑使用 Let's Encrypt 而不是自签名证书。 Let's Encrypt 是一个新的证书颁发机构,可颁发大多数 Web 浏览器都信任的免费 SSL/TLS 证书。 查看教程以开始使用:如何在 Ubuntu 14.04 上使用 Let's Encrypt 保护 Apache
先决条件
在开始之前,您应该已经完成了一些配置。
在本指南中,我们将以具有 sudo 权限的非 root 用户身份操作。 您可以按照我们的 Ubuntu 14.04 初始服务器设置指南 中的步骤 1-4 进行设置。
您还需要安装 Apache。 如果您还没有启动并运行它,您可以通过键入以下内容快速修复它:
sudo apt-get update sudo apt-get install apache2
第一步——激活 SSL 模块
SSL 支持实际上是 Ubuntu 14.04 Apache 软件包中的标准配置。 我们只需要启用它以利用我们系统上的 SSL。
通过键入以下内容启用模块:
sudo a2enmod ssl
启用 SSL 后,您必须重新启动 Web 服务器才能识别更改:
sudo service apache2 restart
有了这个,如果我们配置它,我们的 Web 服务器现在能够处理 SSL。
第二步 — 创建自签名 SSL 证书
让我们首先在 Apache 的配置层次结构中创建一个子目录来放置我们将制作的证书文件:
sudo mkdir /etc/apache2/ssl
现在我们有了放置密钥和证书的位置,我们可以通过键入以下内容一步创建它们:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt
让我们来看看这到底意味着什么。
- openssl:这是OpenSSL提供的基本命令行工具,用于创建和管理证书、密钥、签名请求等。
- req:这指定用于 X.509 证书签名请求 (CSR) 管理的子命令。 X.509 是 SSL 为其密钥和证书管理所遵循的公钥基础设施标准。 由于我们想要 创建 一个新的 X.509 证书,这就是我们想要的。
- -x509:此选项指定我们要制作自签名证书文件,而不是生成证书请求。
- -nodes:此选项告诉 OpenSSL 我们不希望使用密码来保护我们的密钥文件。 拥有受密码保护的密钥文件会妨碍 Apache 自动启动,因为每次服务重新启动时我们都必须输入密码。
- -days 365:这指定我们正在创建的证书有效期为一年。
- -newkey rsa:2048:此选项将同时创建证书请求和新的私钥。 这是必要的,因为我们没有提前创建私钥。
rsa:2048
告诉 OpenSSL 生成一个 2048 位长的 RSA 密钥。 - -keyout:此参数为正在创建的私钥文件命名输出文件。
- -out:此选项为我们正在生成的证书命名输出文件。
当你点击“ENTER”时,你会被问到一些问题。
请求的最重要的项目是显示“通用名称(例如 服务器 FQDN 或您的姓名)”。 您应该输入要与证书关联的域名,如果您没有域名,则应输入服务器的公共 IP 地址。
问题部分如下所示:
国家名称(2 个字母代码)[AU]:美国州或省名称(全名)[Some-State]:纽约地区名称(例如,城市)[]:纽约市组织名称(例如,公司)[Internet Widgits Pty Ltd]:您的公司组织单位名称(例如,部分)[]:小猫部门通用名称(例如 服务器 FQDN 或您的姓名)[]: your_domain.com电子邮件地址 []: your_email @领域 .com
密钥和证书将被创建并放置在您的 /etc/apache2/ssl
目录中。
第三步——配置 Apache 以使用 SSL
现在我们有了可用的证书和密钥,我们可以将 Apache 配置为在虚拟主机文件中使用这些文件。 您可以在此处了解有关 如何设置 Apache 虚拟主机 的更多信息。
我们的配置文件不是基于 sites-available
子目录中的 000-default.conf
文件,而是基于包含一些默认 SSL 配置的 default-ssl.conf
文件。
现在以 root 权限打开文件:
sudo nano /etc/apache2/sites-available/default-ssl.conf
删除注释后,文件如下所示:
默认 :443> ServerAdmin 网站管理员 @localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log 结合 SSLEngine on SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private /ssl-cert-snakeoil.key SSLOptions +StdEnvVars SSLOptions +StdEnvVars 浏览器匹配“MSIE [2-6]” nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0 BrowserMatch “MSIE [17-9]” ssl-unclean-shutdown
这可能看起来有点复杂,但幸运的是,我们不需要担心这里的大多数选项。
我们想要设置我们为虚拟主机(ServerAdmin、ServerName、ServerAlias、DocumentRoot 等)配置的正常内容,并更改 Apache 查找 SSL 证书和密钥的位置。
最后,它看起来像这样。 红色的条目是从原始文件修改的:
默认 :443> ServerAdmin管理员 @例子 .com ServerName your_domain.com ServerAlias www.your_domain.com DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log 在 SSLCertificateFile /etc/apache2/ssl/apache 上结合 SSLEngine。 crt SSLCertificateKeyFile /etc/apache2/ssl/apache.key SSLOptions +StdEnvVars SSLOptions +StdEnvVars 浏览器匹配“MSIE [2-6]” nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0 BrowserMatch “MSIE [17-9]” ssl-unclean-shutdown
完成后保存并退出文件。
第四步——激活 SSL 虚拟主机
现在我们已经配置了启用 SSL 的虚拟主机,我们需要启用它。
我们可以通过键入:
sudo a2ensite default-ssl.conf
然后我们需要重新启动 Apache 来加载我们的新虚拟主机文件:
sudo service apache2 restart
这应该启用您的新虚拟主机,它将使用您创建的 SSL 证书提供加密内容。
第五步——测试你的设置
现在你已经准备好了一切,你可以在指定https://
协议后,通过访问你的服务器的域名或者公网IP地址来测试你的配置,像这样:
https:// server_domain_name_or_IP
您将收到一条警告,指出您的浏览器无法验证您的服务器的身份,因为它没有得到它信任的证书颁发机构之一的签名。
这是意料之中的,因为我们已经对我们的证书进行了自签名。 虽然我们的证书不会为我们的用户验证我们的服务器,因为它没有与受信任的证书颁发机构进行交互,但它仍然能够加密通信。
由于这是意料之中的,您可以点击“继续”按钮或浏览器中的任何类似选项。
您现在将被带到您为 SSL 虚拟主机配置的 DocumentRoot
中的内容。 这次您的流量已加密。 您可以通过单击菜单栏中的锁定图标来检查:
您可以在中间的绿色部分看到连接已加密。
结论
您现在应该在您的网站上启用 SSL。 这将有助于保护访问者与您的站点之间的通信,但它 将 警告每个用户浏览器无法验证证书的有效性。
如果您计划启动一个公共站点并需要 SSL,您最好从受信任的证书颁发机构购买 SSL 证书。
如果您想详细了解 如何配置 Apache,请单击此处。 查看此链接以获取有关如何 保护您的 Linux 服务器 的更多想法。