在Ubuntu 16.04上,配置Apache With自签名tls/ssl证书
Hrh
・7 分钟阅读
SSL和它的后继者TLS (安全套接字层/传输层安全性)在客户端和服务器之间添加一层加密,如果没有这个技术,数据将以纯文本方式发送到服务器,第三方可以读取你的服务器所有发送和接收的信息。
本教程会教你如何创建SSL/TLS证书,并且在16.04上的Apache 2.4上激活它,我假设Apache已经设置并运行,如果你想了解如何安装LAMP堆栈,请参阅此文档 。
注意
SSL/TLS证书通常由可信的CA (证书颁发机构)生成,通过自己生成它,你自己将成为签名者,这意味着浏览器无法验证证书的身份是否应该被信任,并且它将警告用户。尽管可以绕过此警报,但是,面向公众的站点应使用由受信任CA签名的证书。Let's encrypt提供免费证书的CA ,在这里你可以了解如何在Apache和Ubuntu 16.04中安装它们的证书 。
对于内部应用程序,使用自签名证书有效,尤其在没有域名的情形。
步骤1:生成证书
首先,让我们创建一个存放文件的地方。
mkdir ~/certificates cd ~/certificates
生成CSR和私钥。
openssl req -x509 -newkey rsa:4096 -keyout apache.key -out apache.crt -days 365 -nodes
它将询问证书请求的信息,用适当的信息完成。
Country Name (2 letter code) [AU]: US State or Province Name (full name) [Some-State]: FL Locality Name (eg, city) []: Miami Organization Name (eg, company) [My Company]: My Company Organizational Unit Name (eg, section) []:
公用名称应该是你的域名或服务器地址的IP ,同时,填写你的电子邮件。
Common Name (e.g. server FQDN or YOUR name) []: 203.0.113.122 Email Address []:webmaster@example.com
现在,将证书移动到Apache配置文件夹。
mkdir /etc/apache2/ssl mv ~/certificates/* /etc/apache2/ssl/.
证书已经准备好了,接下来我们会让Apache来处理证书,
步骤2:防火墙配置
我们必须确保TCP端口443打开。 在本教程中我们将使用UFW
确保UFW已启用。
sudo ufw enable
现在允许防火墙的预定义的Apache设置。
sudo ufw allow 'Apache Full'
通过键入"
sudo ufw status
",你可以看到当前规则的列表,你的配置应类似于:To Action From -- ------ ---- Apache Full ALLOW Anywhere OpenSSH ALLOW Anywhere Apache Full (v6) ALLOW Anywhere (v6) OpenSSH (v6) ALLOW Anywhere (v6)
你还应该允许OpenSSH在未来的连接。
sudo ufw allow 'OpenSSH'
步骤3:Apache虚拟主机配置
导航到默认的Apache站点配置目录。
sudo nano /etc/apache2/sites-available/default-ssl.conf
此文件告诉服务器在哪里查找SSL证书,删除注释后,它应该类似于下面的配置。
<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> </VirtualHost> </IfModule>
编辑这一行:
ServerAdmin email@example.net
在
ServerAdmin
行下面添加以下内容:ServerName ADD_YOUR_IP_OR_DOMAIN_NAME_HERE
现在,使用我们的证书位置编辑这些行:
SSLCertificateFile /etc/apache2/ssl/apache.crt SSLCertificateKeyFile /etc/apache2/ssl/apache.key
我们的最终文件应该类似于:
<IfModule mod_ssl.c> <VirtualHost _default_:443> ServerAdmin email@example.net ServerName 203.0.113.122 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> </VirtualHost> </IfModule>
保存并关闭文件。
步骤4启用Apache SSL模块
通过键入以下命令启用SSL模块:
sudo a2enmod ssl
现在启用我们刚才编辑的站点:
sudo a2ensite default-ssl.conf
重启apache:
sudo service apache2 restart
让我们进入新的安全网站!在浏览器(请确定你键入了https:// )中打开。
https://YOUR_SERVER_IP
正如我们所料,你的浏览器会警告你证书无效,这是因为证书没有签名。
步骤5:将所有HTTP流量重定向到HTTPS可选
打开Apache默认虚拟主机文件:
nano /etc/apache2/sites-available/000-default.conf
在
<VirtualHost *:80>
标记中添加此行:Redirect / https://YOUR_SERVER_IP_OR_DOMAIN/
重新加载Apache配置:
sudo service apache2 reload
所有网站流量现在会自动重定向到HTTPS 。