前言

我们在访问网站的时候,发现绝大多数站点的网址都是 https,少部分还是使用 http 协议。其实 http 其实是不安全的。

使用的场景:各种各样的用户中心、各种账号管理、QQ 空间 web 端、百度网盘 web 端、个人相册 web 端等等。

这些场景有大量的用户隐私,这些隐私要是直接在 http 上传播,就很容易被坏蛋所截获并读取。这个时候,毫无安全性可言。

而且,http 很容易就被植入广告,造成体验不佳。

所以,越来越多的网站使用 https,来保护网站的安全,保护用户隐私。

步骤

由于本人在搭建个人网站的时候,使用的云服务器是阿里云的,如果你是放到 gitee、github 等上的,可以直接忽略。因为这些代码仓库使用的协议全是 https。

本来是想使用阿里云的 SSL 证书,发现阿里云并没有免费的 SSL 证书。所以,我们使用 FreeSSL 来获取免费的证书。

好吧,其实我才发现阿里云有免费的,心肺停止 😅

FIFA 不多说,直接开始!
我哭了

获取证书

1、进入 freeSSL 先进行注册和登录 ,需要绑定手机号真麻烦

2、回到这个界面,输入你的网站域名,选择你喜欢的品牌,不过只有两个免费的,我这里选择有效期为 1 年的亚洲诚信。亚洲诚信有两个域名可用,一个根域名,一个 www 的二级域名

最后,点击创建免费的 ssl 证书

3、点击创建完成之后,填写你的邮箱,CSR(证书请求文件) 生成选择浏览器生成就好了(其实就是不想下载客户端了)。

确认创建订单

创建完成,浏览器会弹出下载框,请务必把私钥给保存好。

DNS 验证

密钥生成成功,需要进行 DNS 验证。

注意:生成成功这个页面请勿关闭,否则需要重新来生成

1、进入阿里云的云解析 DNS

2、点击添加记录,选择记录类型为TXT,主机记录为_dnsauth,记录值就是生成的记录值,复制进去即可,最后点击确认。新的主机记录就添加上去了。

3、进入到 FreeSSL 的控制台,点击验证,验证成功后会自动打包,需要你下载证书文件和私钥文件。

上传证书文件和私钥文件到云服务器

这里使用的是 nginx 服务器

1、在 nginx 配置目录下创建名 ssh 的文件夹(我的nginx的配置路径在 /etc/nginx 目录下)

[root@izgtymdwetse3wz ~]# cd /etc/nginx/
[root@izgtymdwetse3wz nginx]# mkdir ssh

2、将证书文件和私钥文件复制到这个目录下

[root@izgtymdwetse3wz nginx]# ll -a ssl
total 16
drwxr-xr-x 2 root root 4096 Jan  2 11:16 .
drwxr-xr-x 3 root root 4096 Jan  2 15:33 
-rw-r--r-- 1 root root 3771 Jan  2 11:16 full_chain.pem
-rw-r--r-- 1 root root 1728 Jan  2 11:16 private.key

3、编辑 nginx.conf 文件,更改监听端口为 443 ssl,添加证书路径 ssl_certificate 和私钥 ssl_certificate_key

server {
  listen       443 ssl;
  server_name  www.bestguo.top;

  ssl_certificate     ssl/full_chain.pem;
  ssl_certificate_key ssl/private.key;

  location / {
    ...
  }
}

重启 nginx

[root@izgtymdwetse3wz nginx]# nginx -s reload

效果

直接访问 https://www.bestguo.top ,证书已经生效,并且有一把锁的图标

这样,我们访问的页面的时候,服务器和用户之间的数据传输就不会直接暴露,不会被恶意篡改。

疑问

如何将 http 重定向 https

在 nginx.conf 下,添加以下的配置。

首先监听80端口,指定 server_name,通过 rewrite 重定向到 https 页面。

server {
    listen 80;
    server_name www.bestguo.top;
    rewrite ^(.*)$ https://${server_name}$1 permanent;
}