介绍
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
您将收到警告,您的浏览器无法验证您的服务器的身份,因为它没有被它信任的证书机构之一签署。
虽然我们的证书不会为我们的用户验证我们的服务器,因为它没有与可信的证书机构进行交互,但它仍然能够加密通信。
由于预期如此,您可以点击无论如何继续
按钮或您浏览器中所拥有的任何类似选项。
您现在将被带到您为您的 SSL 虚拟主机配置的DocumentRoot
中的内容. 此时您的流量是加密的. 您可以通过点击菜单栏中的锁定图标来检查:
你可以在中间的绿色部分看到连接是加密的。
结论
这将有助于确保访问者和您的网站之间的通信,但它将警告每个用户浏览器无法验证证书的有效性。
如果您计划推出公共网站并需要SSL,那么您最好从可信的证书机构购买SSL证书。
如果您想了解更多有关 如何配置 Apache的信息,请点击此处查看此链接,了解更多关于 如何保护您的 Linux 服务器的想法。