一、环境
服务器:阿里云
系统:ubuntu14.04
Apache:2.4.7
二、准备证书
HTTPS的本质是通过SSL协议对HTTP协议进行加密,所以既可以用自签名证书也可以用第三方CA机构签名证书。
第一种随便用,第二种是正规的签名证书,由发证机构签名。证书最终用途只作为在线验证使用,保证数据传输安全即可,所以二者都能正常工作。不过一些浏览器和软件会对使用自签名证书的访问弹出警告,让客户端确认证书的有效性,相反正规签名可以获得一些浏览器和软件的识别。
1. 自签名证书
具体原理和其他方式可以百度这里提供部分参考
openssl req -x509 -newkey rsa:1024 -keyout apache.pem -out apache.pem -nodes -days 999
//会出现以下内容让你填写,可以随意
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:ZJ
Locality Name (eg, city) []:SH
...
创建完成后,当前目录下有个apache.pem文件(名字由上述命令行确定),包含密钥和证书。
2. 官方证书
可以由购买或者第三方提供。阿里云有免费的一年有效期证书。
三、服务器配置
1. 添加SSL支持
首先先给apache添加SSL支持模块。Apache2的做法是将mods-available
中的ssl.conf
,ssl.load
,socache_shmcb.load
三个文件放到mods-enabled
中
a2enmod ssl
//a2enmod就是一个配置apache插件的命令,可以google一下,也可以直接敲命令。实际效果等同于上述创建软连接
//阿里建议修改以下,允许通过的协议
vim ssl.conf
SSLProtocol TLSv1 TLSv1.1 TLSv1.2 //77行
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4
命令apachectl configtest
能查看配置文件是否正确 ,以确保Apache不会死掉
2. 添加监听端口
编辑apache2的ports.conf
加入443端口(HTTPS缺省使用)
3. 配置Apache站点
配置详情和正常配置HTTP类似,详情参考本人另一边文章Ubuntu服务器配置说明。其中修改虚拟机监听端口、开启SSL引擎并指定证书位置。
//修改端口
SSLEngine on //开启引擎
SSLCertificateFile /etc/apache2/ssl/apache.pem //上面证书存放的位置
#如果是第三方发放的证书,会有证书私钥文件、证书公钥文件、证书链文件需要配置
SSLCertificateKeyFile xxxxx
SSLCertificateChainFile xxxxx
或者创建sites-available/default-ssl
的软连接到sites-enabled
,并修改。
4. Apache重新加载配置文件
service apache2 reload
apachectl reload
5. 实现http自动跳转https
在sites-enabled
中建立一个任意的站点文件xxx.conf
,监听80端口。只需要配置ServerName(有需要也可以配置ServerAlias),然后开启“重写”引擎,配置要跳转的域名
//先建立一个conf,监听80端口
ServerName mydomian.com
ServerAlias www.mydomian.com
...
RewriteEngine on //开启重写引擎
//重写条件:不为https时的url才执行跳转
RewriteCond %{SERVER_PORT} !^443$
//域名中不包含"api"的话就重定向
RewriteCond %{REQUEST_URI} !^/api
//跳转到当前serverName的https
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
此处如果报错有可能是因为没有加载重写的模块,可以去sites-available
建立软连接或者通过a2enmod rewrite
命令直接建立软连接。参考连接
重启服务器.