如何在 Ubuntu 14.04 的 Apache 上创建 SSL 证书

介绍

TLS(Transport Layer Security)和其前身 SSL(Secure Sockets Layer)是安全协议,旨在将正常流量放置在受保护的加密包装中。

这些协议允许在远程各方之间安全地发送流量,而不会有可能被中间人拦截和读取流量,它们也对在互联网上验证域名和服务器的身份具有重要作用,通过证书机构建立一个服务器作为可信和真实的服务器。

在本指南中,我们将介绍如何在 Ubuntu 14.04 服务器上为 Apache 创建一个 **自签名的 SSL 证书,这将允许您加密到您的服务器的流量。

<$>[注] 注: 您可能想考虑使用Let's Encrypt而不是自签证书。Let's Encrypt是一个新的证书授权机构,它发行了免费的SSL/TLS证书,这些证书在大多数Web浏览器中都值得信赖。

前提条件

在你开始之前,你应该有一些配置已经照顾。

在本指南中,我们将作为具有 sudo 特权的非根用户运作,您可以按照我们 Ubuntu 14.04 初始服务器设置指南中的步骤 1 到 4 来设置一个。

您还需要安装 Apache. 如果您还没有安装并运行它,您可以通过键入快速修复:

1sudo apt-get update
2sudo apt-get install apache2

第一步:激活SSL模块

SSL支持实际上是Ubuntu 14.04 Apache包的标准,我们只需要让它在我们的系统上利用SSL。

通过键入启用模块:

1sudo a2enmod ssl

启用 SSL 后,您需要重新启动 Web 服务器,以便识别更改:

1sudo service apache2 restart

有了这个,我们的Web服务器现在可以处理SSL,如果我们配置它这样做。

步骤二:创建自签名的SSL证书

让我们从 Apache 配置等级中创建一个子目录开始,以便将我们正在创建的证书文件放置:

1sudo mkdir /etc/apache2/ssl

现在我们有一个位置来放置我们的密钥和证书,我们可以通过键入一个步骤来创建它们:

1sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt

让我们来谈谈这意味着什么。

开放 : 这是OpenSSL提供的基本命令行工具,用于创建和管理证书,密钥,签名请求等. *** req* : 这为 X.509 证书签名请求( CSR) 管理指定了子命令 。 X.509是SSL对其密钥和证书管理所遵循的公用钥匙基础设施标准. 因为我们想要创建新 X. 509 证书,这就是我们想要的。

  • 联合国 -x509 :此选项指定我们要制作一个自签名的证书文件,而不是生成证书请求 。
  • -节点 :此选项告诉OpenSSL,我们不想用密码句来保护我们的密钥文件. 有密码保护的密钥文件会妨碍Apache自动启动,因为我们每次重启服务时都必须输入密码.
  • ** 天数 365 ** : 这说明我们正在创建的证书有效期为一年。 *-新ersa:2048 : 此选项将同时创建证书请求和一个新的私人密钥 。 这是必需的,因为我们没有提前创建私人钥匙. rsa: 2048 告诉 OpenSSL 生成长为 2048 位元的 RSA 密钥 。
  • -keyout :此参数命名了正在创建的私有密钥文件的输出文件.
  • 联合国 ** 退出** : 此选项为我们正在生成的证书命名输出文件 。 .

当你点击进入,你会被问到一些问题。

请求的最重要项目是共用名称(例如服务器FQDN或您的名称)的行。

问题部分看起来像这样:

Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:New York
Locality Name (eg, city) []:New York City
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Your Company
Organizational Unit Name (eg, section) []:Department of Kittens
Common Name (e.g. server FQDN or YOUR name) []:your_domain.com
Email Address []:[email protected]

密钥和证书将创建并放置在您的 /etc/apache2/ssl 目录中。

步骤三:配置Apache以使用SSL

现在我们有我们的证书和密钥可用,我们可以配置Apache以在虚拟主机文件中使用这些文件。

相反,我们将我们的配置文件从可用网站子目录中的000-default.conf文件中取而代之,我们将基于包含一些默认SSL配置的默认-ssl.conf文件进行此配置。

现在打开 root 特权的文件:

1sudo nano /etc/apache2/sites-available/default-ssl.conf

随着评论被删除,文件看起来像这样:

<IfModule mod_ssl.c>
    <VirtualHost _default_:443>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        SSLEngine on
        SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
        SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
        <FilesMatch "\.(cgi|shtml|phtml|php)$">
                        SSLOptions +StdEnvVars
        </FilesMatch>
        <Directory /usr/lib/cgi-bin>
                        SSLOptions +StdEnvVars
        </Directory>
        BrowserMatch "MSIE [2-6]" \
                        nokeepalive ssl-unclean-shutdown \
                        downgrade-1.0 force-response-1.0
        BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
    </VirtualHost>
</IfModule>

这可能看起来有点复杂,但幸运的是,我们不必担心这里的大多数选项。

我们想要设置我们对虚拟主机(ServerAdmin、ServerName、ServerAlias、DocumentRoot 等)配置的正常内容,以及更改Apache寻找SSL证书和密钥的位置。

最后,它将看起来像这样的东西. 红色的条目从原始文件中被修改:

<IfModule mod_ssl.c>
    <VirtualHost _default_:443>
        ServerAdmin [email protected]
        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 combined
        SSLEngine on
        SSLCertificateFile /etc/apache2/ssl/apache.crt
        SSLCertificateKeyFile /etc/apache2/ssl/apache.key
        <FilesMatch "\.(cgi|shtml|phtml|php)$">
                        SSLOptions +StdEnvVars
        </FilesMatch>
        <Directory /usr/lib/cgi-bin>
                        SSLOptions +StdEnvVars
        </Directory>
        BrowserMatch "MSIE [2-6]" \
                        nokeepalive ssl-unclean-shutdown \
                        downgrade-1.0 force-response-1.0
        BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
    </VirtualHost>
</IfModule>

保存和退出文件,当你完成。

第四步:激活SSL虚拟主机

现在我们已经配置了 SSL 支持的虚拟主机,我们需要启用它。

我们可以通过键入这样做:

1sudo a2ensite default-ssl.conf

然后我们需要重新启动Apache来加载我们的新的虚拟主机文件:

1sudo service apache2 restart

这应该允许你的新的虚拟主机,它将使用你创建的SSL证书提供加密内容。

步骤五:测试您的设置

现在你已经准备好了,你可以通过访问你的服务器的域名或公共IP地址来测试你的配置,然后指定https://协议,如下:

https://server_domain_name_or_IP

您将收到警告,您的浏览器无法验证您的服务器的身份,因为它没有被它信任的证书机构之一签署。

apache ssl warning

虽然我们的证书不会为我们的用户验证我们的服务器,因为它没有与可信的证书机构进行交互,但它仍然能够加密通信。

由于预期如此,您可以点击无论如何继续按钮或您浏览器中所拥有的任何类似选项。

您现在将被带到您为您的 SSL 虚拟主机配置的DocumentRoot中的内容. 此时您的流量是加密的. 您可以通过点击菜单栏中的锁定图标来检查:

apache ssl encrypted

你可以在中间的绿色部分看到连接是加密的。

结论

这将有助于确保访问者和您的网站之间的通信,但它将警告每个用户浏览器无法验证证书的有效性。

如果您计划推出公共网站并需要SSL,那么您最好从可信的证书机构购买SSL证书。

如果您想了解更多有关 如何配置 Apache的信息,请点击此处查看此链接,了解更多关于 如何保护您的 Linux 服务器的想法。

By Justin Ellingwood
Published At
Categories with 技术
comments powered by Disqus