使用SSL保护Apache 2 Web流量

时间:2020-01-09 10:43:34  来源:igfitidea点击:

说明

默认情况下,Apache不会加密任何传输。这意味着任何使用免费工具来监视网络的人都可以查看来自Web服务器的所有通信。为了保护连接,我们必须启用SSL,这需要PKI证书。

有两种获取证书的方法。
当少数人将连接限制到本地LAN时,自签名证书就足够了。
但是,如果大量用户可以通过Internet访问网站,则强烈建议我们从公共签名机构获得证书。

自签名证书不受信任,因为唯一可以证明其有效性的人就是生成证书的人。未经知名证书颁发机构的验证,自签名证书将使大多数浏览器显示强烈的警告,必须警告该警告,然后用户才能进入网站。这就是为什么只能在小型本地LAN中使用它们的原因。本教程将重点介绍使用自签名证书。

SSL启用Apache

默认的Apache安装不包含任何启用SSL的方法。因此,在使用本教程中生成的证书之前,我们需要准备Apache。要启用SSL支持,请执行以下操作:

  • 红帽CentOS
yum install mod_ssl -y
  • 的Ubuntu
sudo ln -s /etc/apache2/mods-available/ssl.conf /etc/apache2/mods-enabled/ssl.conf
sudo ln -s /etc/apache2/mods-available/ssl.load /etc/apache2/mods-enabled/ssl.load

生成自签名证书

生成自签名证书是加密数据传输的简便方法。但是,证书将由我们签名,这是不受信任的公共身份。每个访问网站的用户都会收到证书信任错误。如果只有少数普通用户可以访问应用程序,则可以让他们安装证书颁发机构密钥。

  • 私钥:这些密钥是证书树中最重要的部分。

要生成密钥,必须指定输出文件和加密级别。在我们的示例中,我们的私钥将被称为private.key,它将具有2048位的加密强度。

openssl genrsa -out ca.key 2048
  • 证书签名请求(CSR):第二步是生成证书签名请求。这与上面生成的密钥一起使用以创建证书。
openssl req -new -key ca.key -out ca.csr
  • 生成自签名密钥:现在,我们进入第三步也是最后一步:生成我们自己的证书。
openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt
  • 将文件复制到正确的位置:现在已经生成了我们的签名密钥,证书申请和证书,是时候将它们移动到服务器上的适当位置了。然后,我们将Apache指向网站SSL加密网站的这些位置。
cp ca.crt /etc/pki/tls/certs
cp ca.key /etc/pki/tls/private/ca.key
cp ca.csr /etc/pki/tls/private/ca.csr

启用SSL的网站

Apache已安装了必需的mod,并且我们的证书已生成。由于SSL在端口443上工作,因此默认情况下,我们需要创建一个虚拟服务器来捕获所有HTTPS请求。在虚拟服务器中,我们将定义所需的证书选项。

  • 打开定义Web服务器的Apache配置文件。默认情况下,它将位于以下位置:

|||
|--- |
|红帽/CentOS|/etc/httpd/conf/httpd.conf|
|Debian / Ubuntu|/etc/apache2/sites-enabled/000-default|
|Suse / OpenSuse|/etc|

  • 如果服务器托管多个网站,请找到该部分。
  • 添加以下行,将突出显示选项替换为证书的名称和位置。
DocumentRoot /var/www/html
ServerName   www.theitroad.test
SSLEngine    on
::HL::SSLCertificateFile      /etc/ssl/crt/ca.crt
::HL::SSLCertificateKeyFile   /etc/ssl/crt/ca.key
::HL::SSLCertificateChainFile /etc/ssl/crt/ca.csr
  • 重新启动Apache以应用新设置
service httpd restart