背景问题

原来搭建的网站通过http协议访问,而不是https(即通过ssl加密),每次跳转的时候都会警告网站不安全,虽然不影响正常访问,但给人一种不靠谱网站的感觉,所以还是把ssl证书安装一下吧,也能提高网站的安全性。

安装前后对比,可以查看证书详情。这里介绍阿里云免费DV SSL类型证书申请和部署。

SSL证书介绍、服务流程参考:SSL证书服务

1. 证书服务

1.1 证书购买

直接在阿里云搜索 ssl证书,点击立即购买,进入到云盾证书服务界面。

注意:个人网站推荐购买免费型DV SSL,单域名

域名验证时,可以选择DNS,也可以选择文件。两种不同的方案,目的是相同的,都是为了验证域名,具体的操作步骤网页上都有提示,大多数推荐DNS方式,我采用的文件方式,感觉也很快。

具体流程:

1)下载domain_check压缩包,解压后得到fileauth.txt文件

2)将该文件拷贝至网站根目录下,建立对应文件夹,将fileauth.txt文件拷贝至对应位置

1
2
3
cd /home/hexo_blog
mkdir -p ./.well-known/pki-validation
# 将fileauth.txt拷贝这个目录下

3)重启nginx

4)在网页上点击验证,大概过几分钟后就会通过审批,然后就可以下载签发的证书

1.2 证书下载

  1. 点击控制台—>产品与服务—>SSL证书
  1. 点击免费证书:有申请、部署、下载等选项

​ 下载nginx对应的证书包,里面包含一个后缀名为 pem 和一个后缀名为 key 的两个文件。

说明:

  1. 证书文件xxx.pem,包含两段内容,请不要删除任何一段内容。
  2. 如果是证书系统创建的CSR,还包含:证书私钥文件xxx.key。

2. hexo博客添加https

网页安全问题可以具体参考知乎:https和http安全问题

问题: 因为移动端和很多浏览器自动优先寻址https(对应端口443),而之前http(默认端口为80),导致博客页面无法打开,因为需要在nginx上开放443端口,让https链接能够正常访问。

详细流程可以参考阿里help文档,在Nginx服务器上安装证书

2.1 创建目录和上传证书文件至服务器

1
2
3
4
mkdir -p /usr/local/nginx/conf/cert
# 上传证书文件至该目录
ls
www.cloud-weblog.com.key www.cloud-weblog.com.pem

2.2 修改配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
vim nginx.conf
......
server {
listen 80;
server_name www.cloud-weblog.com; #需要将yourdomain.com替换成证书绑定的域名
# 重定向这个不一定需要,比如腾讯云EOS上部署就不需要这个,阿里云需要
rewrite ^(.*)$ https://$host$1; #将所有HTTP请求通过rewrite指令重定向到HTTPS
location / {
index index.html index.htm;
}
}

server {
listen 443 ssl; # 配置成https默认访问端口443
#server_name localhost;
#server_name 120.79.8.155; # 没有申请域名,直接指向云服务器IP
server_name www.cloud-weblog.com; # 需要绑定的域名

# SSL证书
ssl_certificate cert/www.cloud-weblog.com.pem;
ssl_certificate_key cert/www.cloud-weblog.com.key;
......

注意,对于https开放的443端口,1)要在ECS服务器的安全组规则中放行所有的对443端口的访问;2)开放Linux 443端口

1
/sbin/iptables -I INPUT -p tcp --dport 443 -j ACCEPT

2.3 重启Nginx服务

再次访问网页,观察是否有小锁标志。

1
service nginx restart

问题处理

1. Nginx配置SSL出错

报错:配置ssl后,nginx启动出错,nginx:[emerg]unknown directive ssl

根因:因为我们配置这个SSL证书需要引用到nginx的中SSL这模块,然而我们一开始编译的Nginx的时候并没有把SSL模块一起编译进去。

解决方案:重新配置ssl module,重新编译生成nginx,不需要重新安装,替换原来的可执行程序nginx就好

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 步骤一:重新配置
cd /usr/local/src/nginx-1.18.0/
./configure --with-http_ssl_module
# 步骤二:重新编译
make # 不要执行make install, 不然整个nginx会被重新覆盖!!!
# 步骤三:nginx替换
cd /usr/local/nginx/sbin/
mv nginx nginx.old
cp /usr/local/src/nginx-1.18.0/objs/nginx /usr/local/nginx/sbin/
./nginx -V
nginx version: nginx/1.18.0
built by gcc 8.5.0 20210514 (Red Hat 8.5.0-4) (GCC)
built with OpenSSL 1.1.1k FIPS 25 Mar 2021
TLS SNI support enabled
configure arguments: --with-http_ssl_module

出现configure arguments: --with-http_ssl_module,则SSL模块添加到Nginx的编译好了,重启nginx OK.