目的
通过配置SSL连接,您可以向公共HTTP添加额外的非对称加密协议。SSL协议可以用于加强网站的认证系统或应用程序与服务器之间的数据交换。在本文中,您可以学习如何配置SSL连接,并在使用Ubuntu 18.04的Apache上启用HTTPS。
首先,通过SSH连接连接到服务器。我们教程中有涵盖相关内容,方便您完成连接SSH协议操作。如果是本地服务器,请进入下一步,打开服务器的终端。
取得SSL证书
为了建立安全的连接,Apache需要一个可以从证书颁发机构(CA)获得的SSL证书。为了方便起见,在本例中,我们将使用自签名或自签名证书,仅在测试和开发环境中使用。要获得自签名证书,则参阅另一篇教程。 如果您有兴趣获得由认证机构颁发的免费SSL证书,请看如何使用Let’s Encrypt和Ubuntu 18.04保护Apache的内容。
请注意:在创建证书期间,输入服务器的IP地址和或域名时,以Common Name命令:
Common Name (e.g. server FQDN or YOUR name) []: domain.com
获取证书后,创建“/etc/certificate”文件夹:
$ sudo mkdir /etc/certificate
然后将证书和私钥保存在该文件夹内。
配置Apache SSL参数
为Apache将创建安全连接设置指令。在Apache conf-available目录下创建ssl-params.conf文件:
$ sudo nano /etc/apache2/conf-available/ssl-params.conf
将以下指令复制,然后粘贴到新创建的文件中:
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder On
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
# Requires Apache >= 2.4
SSLCompression off
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
# Requires Apache >= 2.4.11
SSLSessionTickets Off
保存后关闭文档。
更换虚拟主机
完成此次操作需要用SSL连接保护的域名的虚拟主机SSL配置。在本教程中,将使用默认Apache Virtual Host的SSL配置作为示例。
打开虚拟主机SSL配置:
l$ sudo nano /etc/apache2/sites-available/default-ssl.conf
你会看到:
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
SSLOptions +StdEnvVars
SSLOptions +StdEnvVars
通过输入您的电子邮件来正确设置ServerAdmin指令,并添加ServerName指令,以及您的域名或服务器IP地址。
最后,更改SSLCertificateFile和SSLCertificateKeyFile指令指示的路径,分别输入证书和私钥的路径。这时,您会看到:
ServerAdmin john@mydomain.com
ServerName mydomain.com
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/certificate/certificate.crt
SSLCertificateKeyFile /etc/certificate/private.key
SSLOptions +StdEnvVars
保存后关闭文件。
配置防火墙
如果您的系统上装有防火墙,请将其设置为启用到计算机的HTTP通信和HTTPS通信。在使用UFW防火墙时,有一些Apache的预安装配置文件可用。查看UFW防火墙中安装的可用配置文件:
$ sudo ufw app list
这时您会看到以下内容:
Available applications:
Apache
Apache Full
Apache Secure
OpenSSH
为允许HTTP(端口80)和HTTPS(端口443)通信,请使用“Apache Full”配置文件。 查看配置文件信息如:
$ sudo ufw app info "Apache Full"
屏幕上会显示:
Profile: Apache Full
Title: Web Server (HTTP,HTTPS)
Description: Apache v2 is the next generation of the omnipresent Apache web server.
Ports:80,443/tcp
验证完之后,支持其访问:
$ sudo ufw allow in "Apache Full"
配置Apache
完成上述操作之后,就可以开始配置Apache。启用mod_ssl和mod_headers模块:
$ sudo a2enmod ssl
$ sudo a2enmod headers
启用读取所创建的SSL配置:
$ sudo a2enconf ssl-params
启用默认SSL虚拟主机:
$ sudo a2ensite default-ssl
检查Apache配置文件中是否有错误:
$ sudo apache2ctl configtest
如果看到跳出“Syntax OK”消息,则可以重启Apache继续:
$ sudo systemctl restart apache2
检查连接
通过连接到您配置的虚拟服务器的域名或IP地址来打开浏览器,确保使用https协议: