很早以前圈里就有挺多朋友给自己的博客上了ssl,虽说个人博客几乎没有必要上,但是看着浏览器上的小绿锁就蜜汁有种极客风啊(:зゝ∠)
  咳咳,其实除了加个小绿锁镇门面,如果有人流量劫持了你的博客,ssl就能帮到大忙。另外,ssl还利于网站SEO优化,现在的主流搜索引擎,像谷歌,百度啊,在搜索、展现、排序方面都会给予部署了SSL证书的网站优待。
  今天就来一个LNMP环境部署SSL证书的教程。

申请免费证书

  现在免费的ssl证书有很多,百度一下就能得到一些提供SSL证书试用的相关机构,试用时长从几个月到一年不等。
  几个月几个月续难免有些麻烦,因此我建议大家申请阿里云Symantec Corporation免费证书(现在市面上的免费证书大多是Symantec的),每个证书时长1年,到期可以续期,同时最多拥有50张证书,每张证书只能绑定一个顶级域。
  本教程就以阿里云免费SSL证书为例。

  首先进入阿里云官网,没注册的先注册,注册以后进入控制台。
  在控制台展开左侧的导航栏,进入安全(云盾)证书服务,点击右上角的购买证书
  在弹出的新页面中选择免费型DV SSL,然后点击立即购买,然后一路点击去支付确认支付,账号里没有金额也没关系,一路点下去就好,这里的支付流程完全就是走个程序。。。
  (注意啦,在购买页面中的购买数量指的不是时长而是个数。比如说你把购买数量由1改到2,那么完成支付后你会申请到两个时长一年的证书而不是一个时长两年的证书OTZ)

  完成后回到证书服务的页面,就可以看到自己刚刚申请的订单。刚刚支付,此时订单还在处理中,等待大约半分钟后继续下一步↓↓↓↓
  点击订单信息右侧的补全,会进入填写域名信息页面,根据提示输入想要绑定的域名,然后点击下一步,进入填写个人信息页面(里面全部都是必填项)。
  如实填写好所有的个人信息后,为了更快的通过申请,将“域名验证类型”改为“文件”(因为选择DNS方式的话还要等待DNS生效,虽说现在的DNS解析都挺快,但文件方式仍是不二选择~至少对我来说(:зゝ∠)),然后点击下一步进入上传相关信息页面,懒癌发作直接选择系统生成CSR,然后点击一下右边的生成,等到按钮旁边出现绿色的成功提示后,点击提交审核

  提交审核后会自动跳转回“证书服务”页面,这个时候订单右边原本的“补全”变成了“进度”。刚提交审核的话订单需要十几二十秒的处理时间,等待一会会儿后,点击进度,会弹出一个提示框。

  根据其中的提示,下载验证文件,在VPS中创建指定的文件夹,将验证文件放入其中,然后点击提示框中的检查配置。如果提示已生效,那么等待片刻就好。
  一般来说,正常时间段一两分钟证书就能签发了,如果是深夜或者凌晨又或者其他冷门的时间的话,正常情况下最多也不超过十来分钟(等的最长的一次是上个月的某天,我大半夜11点半时申请的证书,等了差不多十多分钟=0=)

部署


  等待证书签发后,在证书服务页面可以看到订单左边出现了“推送”“吊销”和“下载”。点击下载进入证书下载详情页。下载详情页中默认显示的就是Nginx环境下的所需文件的下载,所以只要直接点击下载证书for Nginx即可。

  接下来具体的部署操作在这个页面也都有介绍,但是显得太过简洁,我再做几点补充:
  首先要找到nginx的安装目录,我以“usr/local/nginx/”为例。在这个目录下创建一个新的目录,比如说创建一个cert文件夹,然后将下载所得的.pem和.key文件都上传到这个文件夹中。上传成功后进入Nginx的配置目录,以“/usr/local/nginx/conf/vhost/”为例,修改其中的相应域名的.conf文件
  我们需要增加一个对443端口的监听。相应代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
server
{
listen 443 ssl;
ssl_certificate /usr/local/nginx/cert/xxx.pem;
ssl_certificate_key /usr/local/nginx/cert/xxx.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;
root /home/wwwroot/yourdomin/;
server_name yourdomin;
}

  将上述代码中的xxx.pem和xxx.key改成自己上传的相应文件的名称,yourdomin改为自己的域名
  如果原本在80端口有其他的规则,那么直接接在server_name yourdomin;的下一行即可
  接着修改原本对80端口的规则,这样当有人访问http://下的网址时会自动被301到https://下的网址。

1
2
3
4
5
server {
listen 80;
server_name yourdomin;
return 301 https://yourdomin$request_uri;
}

  注意,yourdomin后面不要加“/”,例如 return 301 https://shangyes.net$request_uri;即可。

  这样ssl证书就算是部署好了,这里有个小提示,.pem和.key文件其实可以放在任何一个位置,只要你在相应域名的.conf文件中分别填对了“ssl_certificate”和“ssl_certificate_key”中的.pem文件和.key文件的路径即可。

生效

  其实这一步是被我强行分出来的[Smile with Tear],ssh登陆后在任意目录下输入

1
nginx -s reload

或者

1
service nginx restart

如果没有报错,那就成功了,打开自己的网站体验小绿锁的快感吧(:зゝ∠)

  Linux+Nginx+MySQL+PHP,根据取字母的方式不同,在国内被简写为LNMP,而在国外被称作LEMP
  原因是:国内根据Nginx的首字母取N,国外取读音Engine X的首字母E。
  因此在外网搜相关资料时,记得用LEMP而不是LNMP。

参考资料

[SSL的重要性] http://www.wosign.com/FAQ/faq2016-0225-02.htm
[百度对https网站的优惠]http://zhanzhang.baidu.com/wiki/392

知识共享申明

知识共享许可协议本作品采用知识共享署名-非商业性使用 2.5 中国大陆许可协议进行许可。