安装https-ssl证书遇到的坑

前言

最近阿里云的备案是终于终于下来了,于是乎高高兴兴地把服务器绑定了域名。但是一个周末过去了,用站长工具一查,泥煤的百度硬是一个页面没收录我的。和同学抱怨了这个事情,他让我整一套https来试一下,毕竟http存在被抓包篡改数据的风险。嘛,也不知道这个是不是百度收录的判定标准,上午整的时候也遇到了一些坑,就记录下来。

环境

  1. 服务器:阿里云ECS
  2. web容器: nginx
  3. 系统:CentOS 7

基本步骤

申请SSL

  • 阿里云申请SSL很简单,直接跑到工作台—>服务与产品—>SSL证书

images

  • 进入证书管理界面后点击“购买证书”,如下图所示,选择免费型DV SSL

images

  • 申请大概需要5-10分钟左右,随时注意短信邮件,成功后如下图

images

  • 点击下载,选择对应自己服务器上的web容器,以下以nginx为例,下载完后解压缩包会有两个文件,一个密钥一个解密的。

images

配置nginx

备注:打开443端口,打开443端口,打开443端口!重要的事情说三遍,之前我就是因为在阿里云的安全组里没有开启443端口,一直访问不了,至于怎么打开这里就不多阐述了。

  • 把上一步下载得到的pem和key文件传输到服务器

  • vim编辑nginx配置文件,拉到最下面有个 #HTTP server注释字样,配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server {
listen 443;
server_name bandao.ink;
root /home/blog/bandao;
index index.html index.htm;
ssl on;
ssl_certificate /usr/local/nginx/cert/1551693_bandao.ink.pem;
ssl_certificate_key /usr/local/nginx/cert/1551693_bandao.ink.key;
ssl_session_timeout 10m;
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 /home/blog/bandao;
index index.html index.htm;
}
}
  • server_name: 服务器地址
  • root:网站根目录
  • index: 入口类
  • ssl:开启ssl配置
  • ssl_certificate:pem文件存放目录
  • ssl_certificate_key:key文件存放目录

搜索引擎优化

2015 年 5 月 25 日,百度发公告声明已全面支持 HTTPS 网页的收录,使用 HTTPS 的网页被认为更安全,所以在排名上会被优先。 百度还推荐使用 301 重定向,把网站的 HTTP 重定向到 HTTPS 。

NGINX 配置使用 301 重定向:

1
2
3
4
5
server {
listen 80;
server_name www.bandao.ink;
return 301 https://$server_name$request_uri;
}

OK,重启nginx即可重新访问即可看到效果

images

遇到的坑

nginx:[emerg]unknown directive ssl错误

这是我遇到的第一个坑,在我更新完nginx配置,重启的时候给我报出来,识别不了配置文件中的‘ssl’指令。百度了一下说是因为我们配置这个SSL证书需要引用到nginx的中SSL这模块,然而我们一开始编译的Nginx的时候并没有把SSL模块一起编译进去,所以导致这个错误的出现。

解决步骤

  • 开始我以为是要重新安装nginx并编译,但是如果你还能找到nginx当初的安装目录就不用。如下图,我的安装目录当时是和nginx执行目录在一起的,/usr/local/nginx/nginx-1.13.7

images

1
cd /usr/local/nginx/nginx-1.13.7
  • 来到解压目录后重新添加ssl模块
1
./configure --with-http_ssl_module

images

  • make编译【注意不要make install,不然你nginx会被重新覆盖掉】

images

  • OK,编译时间在半分钟左右,这个时候你会发现当前安装目录下多了一个objs文件夹,这个文件夹下面有一个nginx程序,这个就是新版本的程序了。

images

  • 安全起见我们可以把之前的nginx先备份一下,然后把新的程序复制过去覆盖之前的即可
1
2
备份: cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
覆盖: cp objs/nginx /usr/local/nginx/sbin/nginx
  • 现在我们可以看看ssl模块是否安装成功
1
2
cd /usr/local/nginx/sbin
./nginx -V

images

如上图,说明安装ssl模块成功了

ok,重启nginx就可以了

no ssl_certificate

同样是reload的时候出现nginx: [emerg] no “ssl_certificate” is defined for the “ssl” directive in /usr/local/nginx/conf/nginx.conf:102 这种错误。

泥煤的,当时就在想,我特么ssl相关的东西都给你配置好了,ssl指令都没问题,你特么一个指定密钥地址的玩意还有问题? 这个问题整了我一个多小时,最后发现是配置文件里面这里写丢了一个分号,我真是@!%!@¥#@#@¥@!

images

总结

哎,这个东西就因为最后遇到那个分号没有写,足足折腾了我一上午的时间,真的是要细心啊!存粹是自己坑自己

本文标题:安装https-ssl证书遇到的坑

文章作者:JF

发布时间:2018年11月26日 - 12:11

最后更新:2018年11月26日 - 14:11

原始链接:http://bandao.ink/2018/11/26/安装https-ssl证书遇到的坑/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际

若需转载请保留原文链接及作者