HTTPS(Hyper Text Transfer Protocol Over Secure Socket Layer)是以安全为目标的HTTP通道。简单来说,通过HTTP协议访问的网站,在登陆和数据传输过程中所有信息都是没有加密的,黑客很容易就能获取用户访问网站的所有信息。而HTTPS则通过SSL/TLS协议进行加密,来提高网络安全性,即使传输信息被黑客捕捉到,一般来说也很难解析其中的内容。
在通过传统的HTTP方式访问网站时,用户通过浏览器(或者其他客户端)访问服务器,服务器直接返回需要的信息。而在HTTPS方式通讯时,用户信息则需要经过认证服务器来保证加密过得数据被传输到正确的服务器和客户机上。HTTPS需要的认证服务器和加密证书可以由自己颁布给自己,但一般除了局域网和测试目的外,自己颁发的证书往往缺乏权威性,因此,要实现HTTPS方式,首先需要从可以颁发CA证书的权威机构申请证书并且部署在自己网站上。
大部分CA证书都需要付费并且价格不菲,但也有一些可以提供免费证书并且具有同样权威性的机构。最著名的免费CA证书颁发机构要数Let's Encrypt,而阿里云提为个人和小微企业提供免费版的DV证书,阿里提供的DV证书是赛门铁克(Symantec)颁布的,作为昔日杀毒软件巨头的赛门铁克,其认证证书同样具有权威性。
以阿里云CA证书申请流程为例。购买完CA证书之后,可以在阿里云的SSL证书管理页面进行证书申请。申请完的证书将会和相应的域名绑定并配套使用。除了域名之外,申请时还需要输入联系人的联系电话、邮箱等信息,并且选择DNS验证和证书生成的方式。如果你的域名也是在阿里云平台购买的,则可以通过自动验证DNS的方式完成,否则可能需要按照要求添加域名的解析地址(按照系统要求添加一条域名解析记录,或者上传指定内容的文件到网站目录下)。选择CSR证书生成方式的时候,可以采用阿里云系统自动生成的方式以减少错误。除了免费的DV证书外,其他证书的申请还需要提供营业执照等等阿里云平台要求的材料。
阿里云证书部署文档中针对不同操作系统下不同网络引擎的安装和部署进行了详细说明。在ubuntu下使用Apache2服务器时。需要在证书生成界面选择相应的操作系统和软件类型,并且下载对应的证书文件,使用apache2服务器时下载后的文件分为domain.key秘钥文件,domain_public.crt公钥文件和domain_chain.crt秘钥链文件三个(Nginx没有秘钥链文件)。如果是下载在本地计算机上而服务器是通过ssh方式命令行管理的。那么可能需要将下载到的文件复制到服务器上。可以通过以下scp命令拷贝到远程目录下,再参考官方文档建立对应的目录并移动到相关目录下:
scp -P portnumber domain_public.crt admin@domain.com:~/ #远程复制
sudo mkdir /etc/apache2/cert #新建文件夹
sudo mv ~/domain_public.crt /etc/apache2/cert/domain_public.crt #移动文件
sudo a2enmod ssl #启用apache2的ssl模块
sudo ls /etc/apache2/sites-available/ #查看目录下生成的default-ssl.conf文件
sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/default-ssl.conf
#也可以在sites-available下修改后通过软连接到sites-enabled中
sudo ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/default-ssl.conf
编辑default-ssl.conf文件
<IfModules mod_ssl.c>
<VirtualHost *:443>
ServerName #修改为证书绑定的域名www.YourDomainName.com
SSLCertificateFile /etc/apache2/cert/www.YourDomainName_public.crt
SSLCertificateKeyFile /etc/apache2/cert/www.YourDomainName.com.key
SSLCertificateChainFile /etc/apache2/cert/www.YourDomainName.com_chain.crt
重载apache2配置文件并重启服务。
sudo /etc/init.d/apache2 force-reload
sudo /etc/init.d/apache2 restart
服务重启后,可以在浏览器中输入https://www.domainname.com 验证证书安装结果,如果浏览器标识栏显示绿色小锁标识,说明证书安装成功。以wordPress/ target=_blank class=infotextkey>WordPress博客服务为例,可以进行网站设置,并设置ssl强制跳转以保障网络安全。
在进行wordpress域名设置前,需要先确认网站可以同时通过http或者https两种方式访问。以免修改后网站无法访问。网站可以显示时,可以在wordpress仪表盘的设置选项中,将原有http修改为https。修改完成后,wordpress可以自动修改相应设置,以便网站可以通过https方式访问。
针对http不安全的访问方式,可以在网站设置中将其强行跳转到https方式下访问以保证安全。
在sites-enabled/000-default.conf (如果网站用的其他配置文件应该做相应修改)。在<VirtualHost *:80>和</VirtualHost>之间添加以下三行,来强制将网站跳转到https下,并重启apache2服务。
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [L,R]
https协议默认使用443端口,如果ubuntu系统中启用了防火墙,需要开启该端口。在ubuntu系统中,一般通过ufw防火墙软件管理网络。
sudo apt-get install ufw #安装防火墙
sudo ufw status #查看防火墙
sudo ufw allow 22 #允许22端口,不限制协议
sudo ufw allow 80 /tcp #允许80端口通过tcp协议
sudo ufw enable #启用防火墙,注意,如果服务器是远程通过ssh管理
#一定要在启用防火墙前允许ssh管理端口如22访问,否则可能ssh无法远程登录
sudo ufw disable #禁用防火墙
阿里云的免费DV证书和let's encrypt证书默认期限均为一年,在证书到期前需要再次申请并部署证书以保证网站正常访问。