Nginx / LNMP 部署 SSL 证书并强制 301 重定向到 HTTPS

通常在网银、购物网站上登录的时候我们会看到地址栏显示一把绿色的锁,这表明我们正在通过 HTTPS 进行加密连接。

在这个 HTTPS Everywhere 的年代,百度、360 导航等网站为了防劫持也是纷纷全面开启了强制 HTTPS。Google 之前曾有承诺会给予 HTTPS 网站一定的权重增加,其 Search Console 也提供了良好的 HTTPS 支持。国内搜索引擎也渐渐跟上,尤其是百度站长平台还提供了 HTTPS 认证和 HTTPS 退场功能,可以一键快速无痛转换。再有,优酷站外 <embed> 也提供了 HTTPS 的支持,可以说目前网上大部分主流资源都可以找到其对应 HTTPS 的形式,HTTPS 已经是势不可挡的潮流。

个人认为,凡是涉及到用户登录、会员注册、账号密码的网站服务都可以上 HTTPS,目前来说转换成本也不高,毕竟是真的已经到了 HTTPS Everywhere 的时代。

申请 SSL 证书

其实目前来说国内的 SSL 证书提供商已经快倒完了。360 旗下的沃通和 Startcom 因为发假证书和隐瞒收购的问题早在去年就被警告过,而且就在上个星期,火狐称准备完全取消对沃通、Startcom 和 CNNIC 的信任,也就是说,所有使用这些证书的网站都会报错,Google 和火狐都督促使用以上证书的网站立即更换证书。

个人建议可以使用阿里云或者腾讯云(下图)的 DV 证书,只需要验证域名所有权,目前可以免费申请免费续费,另外还有非常便宜的 Comodo PositiveSSL,单年 9 美元。

腾讯云 SSL 证书

域名型 SSL 证书(DV SSL):信任等级普通,只需验证网站的真实性便可颁发证书保护网站;
企业型 SSL 证书(OV SSL):信任等级强,须要验证企业的身份,审核严格,安全性更高;
增强型 SSL 证书(EV SSL):信任等级最高,一般用于银行证券等金融机构,审核严格,安全性最高,同时可以激活绿色网址栏。
via 知乎 李是个好人

部署 SSL 证书

1、下载对应证书版本
Apache / IIS / Nginx 都有对应的证书版本,这里 LNMP 是下载 Nginx 版,解压以后可以看到一个 .key 文件和 .crt/.pem 文件

SSL 证书

2、上传证书
把上面的 .key 文件和 .crt/.pem 文件上传到 /root 目录中,命名为 ssl.crt/ssl.pem 和 ssl.key,或者其他你想要的名字都可以。

3、配置部署
LNMP 一键安装包的 Nginx 配置在 /usr/local/nginx/conf/vhost/ 目录中,找到对应站点域名的配置文件(如 best66.me.conf)。普通安装的 Nginx 配置文件在 /etc/nginx/nginx.conf。vi 命令进入修改。

将其修改为(以下属性中 ssl 开头的属性与证书配置有直接关系,其它属性请结合自己的实际情况复制或调整,以下是以阿里云的证书为例):

server {
    listen 443;
    server_name best66.me www.best66.me;
    ssl on;
    root html;
    index index.html index.htm;
        ssl_certificate /root/ssl.pem;
        ssl_certificate_key /root/ssl.key;
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
    location / {
        root html;
        index index.html index.htm;
    }
}

如果想要强制 HTTPS,请做如下修改:

server
{
    listen 80;
    server_name best66.me www.best66.me; # 修改为你的域名
    rewrite ^/(.*) https://best66.me/$1 permanent; # 如果你的网站是带 www 的,请在域名前添加 www
}
server
{
    listen 443;
    # ...... 其余配置同上
}

另外还有一种配置强制 HTTPS 的方法,可以看看我朋友的博客

连接 HTTPS

以上就搞定咯~

题外话:其实本来也是不想写这篇文章的,HTTPS 部署教程网上一大把。不过最近玩了腾讯云的开发者实验室,其中有个项目是现场配置 HTTPS,所以也就写了。下次也写篇文章介绍下开发者实验室,挺好玩的,感觉就像是程序员限时密室逃脱,“游戏”体验良好。

3 评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注