http升级https(转)
为什么要使⽤ HTTPS ?
⾸先来说⼀下 HTTP 与 HTTPS 协议的区别吧,他们的根本区别就是 HTTPS 在 HTTP 协议的基础上加⼊了 SSL 层,在传输层对⽹络连接进⾏加密。简单点说在 HTTP 协议下你的⽹站是光着⾝⼦在奔跑,但到了 HTTPS 下你穿了⼀件⾐服,别⼈看不到你的肌⾁了(当然,这好像不是好事,不重要),更安全了⼀点点,就⼤概这个意思。
SSL 依靠证书来验证服务器的⾝份,并为浏览器和服务器之间的通信加密。采⽤ HTTPS 的服务器必须从证书颁发机构 CA(Certificate Authority)申请⼀个⽤于证明服务器⽤途类型的证书,当然⼀般都有收费,⽽且不便宜,其实你也可以通过 OpenSSL ⾃⼰造⼀个证书,这样有⼀个弊端是⼤家都不信任你造的证书。那怎么办?
你必须知道的步骤
通过上⾯的简单介绍你应该知道了,要想你的⽹站⽀持 HTTPS ,就必须有⼀个被信任的证书,那这个证书就必须由证书颁发机构(如VeriSign、Microsoft等)颁发的,否则你就会遇到如打开 12306 这样的您的连接不是私密连接的尴尬。
你肯定不想⽤户打开后,你的⽹站是上⾯这样的,⾝边有好多朋友买票时问过我这是什么意思?我都没办法解释给他们,哎。所以你需要要有下⾯⼏个东西:
⼀个域名(你肯定有)
Web 服务器(Nginx,Apache,IIS都⾏)
SSL 证书(最好 CA 机构颁发的)
就完了,上⾯三个东西可能最⿇烦就是搞到⼀个被全世界都信任的证书了,没关系,现在我试着让你免费获取⼀个,注意是免费
提供免费的证书商也就那么⼏个,最知名的可能是 StartSSL ,其他我还知道 Let's Encrypt ,不过这⾥我⽤的是国内腾讯云的。
感谢腾讯云
对于得到⼀个受信任的证书很简单,第三⽅证书颁发机构购买就⾏了,但是⼀个每年⼤⼏千的证书费⽤对于⼩企业或个⼈来说,有点接受不了,或者是没钱。现在好了,腾讯云认证⽤户可以申请到赛门铁克(Symantec)免费的 TrustAsia DV SSL 证书了。
上⾯显⽰什么价值1900元/年,不要管,点击确认按钮。弹出表单你填写你要绑定的域名就⾏了:
接下来会验证你的域名,简单说就是验证⼀下这个域名是不是你的,所以你要在域名解析添加⼀条 CName 记录,实在不懂的话,官⽅也有怎么添加的⽂档。
⼀般验证过程会很快,⼏个⼩时吧,申请通过后,这时候你看到状态是已颁发后,就能下载证书了。
下载下来你打开⽂件会看到Nginx,Apache,IIS三个⽂件夹,⾥边放的就是对应各个服务器的证书。到这⾥,整个证书申请流程就算完了,接下来就是配置 Web 服务器来⽀持⽹站的 HTTPS 访问了。我这⾥⽤的 Nginx 演⽰。
Nginx 平滑升级以⽀持 HTTPS
要想让 Web服务器⽀持 HTTPS ,⾸先你的服务器肯定要⽀持 SSL ,所以我们先检查 Nginx 是否⽀持 SSL :
/usr/local/nginx/sbin/nginx -V
通过命令显⽰信息,我们看configure arguments中是否有-with-http_ssl_module字样,如果像我这样没有的话,你就需要重新编译 Nginx 以⽀持SSL 了。如果有,请跳过这步骤,直接看Nginx 配置 HTTPS 服务那⼀节。
安装 Nginx 可能⼤家都会,不会的可以看,但是平滑升级 Nginx 可能你没有体验过,这样说吧,在线上服务器环境下,你要⽀持 HTTPS 访问,但是你发现你的 Nginx 不⽀持 SSL ,你肯定不能卸载 Nginx 重新安装时加载 SSL 模块,因为那是线上服务器。你只能在现有安装的Nginx 下进⾏⽆痛升级以以⽀持 SSL ,这就⽤到了 Nginx 的平滑升级概念。
到你之前安装 Nginx 时的编译⽬录,如果你和我⼀样不到或许删除了,那我们就需要重新下载⼀个 Nginx 了,当然我们是通过wget⽅式,看命令:
wget -c /download/nginx-1.10.
nginx和apache区别tar -zxvf nginx-1.10.
cd nginx-1.10.1
配置,加⼊ SSL 模块:
./configure --with-http_ssl_module
make
注意,千万不能在像安装的时候make install了,因为我们这是升级。
备份原 Nginx 执⾏脚本
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
把新版本 Nginx 编译脚本放到可执⾏⽂件⽬录下
cd objs/
cp nginx /usr/local/nginx/sbin/
进⾏平滑升级,命令:
make upgrade
这时候会输出这些信息:
/usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/f syntax is ok
nginx: configuration file /usr/local/nginx/f test is successful
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
sleep 1
test -f /usr/local/nginx/logs/nginx.pid.oldbin
kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`
没问题之后接下来,查看现在⽬前版本及安装模块:
/usr/local/nginx/sbin/nginx -V
看到已经从 1.4.6 版本升级到了 1.10.1,⽽且这种升级不影响正常访问的。线上环境操作也是可以的。
Nginx 配置 HTTPS 服务
编辑配置⽂件:
cd /usr/local/nginx/conf
f
拉到最下⾯,会看到 HTTPS 配置被注释掉了。嗯,这是模板,我们就在这配置。
⽂字版:
server {
listen 443 ssl;
server_name www.domain;
ssl on;
ssl_certificate 1_www.;
ssl_certificate_key 2_www.domain.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
把上⾯的ssl_certificate和ssl_certificate_key替换成你下载下来的证书存放路径就⾏,记着下载下来的证书这种配置是放在/usr/local/nginx/conf⽬录下的,当然你也可以随意放。
这时候,你就可以打开浏览器访问⼀下试试了。正常情况 HTTPS 请求是打不开的,因为我们还没设置防⽕墙,记得要开放443端⼝!,嗯,
设置过防⽕墙就可以正常访问了吧。
很简单,Nginx 中这样配置就⾏啦!
server {
listen 80;
server_name www.domain;
rewrite ^(.*)$ $host$1 permanent;
}
我们利⽤rewrite来做跳转。监听到80端⼝的 HTTP 请求后,就转发到 HTTPS ,当然还有好多处理⽅
式。
这篇⽂章讲了⼀下怎么申请免费的 HTTPS 证书,然后利⽤ Nginx 服务器来配置 HTTPS 请求访问,并其中顺⼿平滑升级 Nginx,如丝般顺滑的升级,不影响正常访问。HTTPS ⽅式的传输对我们⽹站来说应该是提⾼了⼀些安全性的,况且这种⽅式⼜很简单,可以试着搞⼀搞。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论