整站切换成了https
最近学了点信息安全相关的知识,认识到了证书(CA)在网络通信的身份验证、数据加密、防止窃听、甚至是提升网站的SEO方面都有很重要的作用。想到了这个博客还是一直使用的http,并没有证书,也没有启用https访问的方式,每次打开博客的时候,浏览器都会提示网站不安全,也会给访客带来一些不必要的烦恼。
在隐身模式下访问的时候,甚至还被直接拦截。
于是花了一个多小时把博客升级成了https访问。怕以后忘记,遂记录一下。
第1步 申请SSL证书
SSL证书有贵的(EV证书),也有便宜的(OV证书),也有免费的(部分DV证书)。贵的证书一年可能要1万多元,便宜的也有一年几百块的。下面是腾讯云上的不同类型的证书的对比,可以一目了然的看出来区别。
网上了解了一下资料,贵的无非是更有保证,甚至还可以给这个SSL证书购买保险。对于我这个个人博客来说就有点没必要了。业内也有知名的免费的SSL证书供应商,如Let’s Encrypt就可以提供免费的(https://letsencrypt.org/)。看下来对我而言唯一的缺憾就是证书的有效期只有90天,好在可以使用自动续期的脚本来自动延期,所以这个缺点也不是什么缺点了。
1. 安装certbot。网上的安装教程有很多,我这里就简单贴一下命令。这里使用的是snap的安装方式。需要注意的是,以下命令行的所有操作都需要在网站的服务器(也即申请SSL证书存放的服务器)执行,否则CA无法确认服务器的身份就是网站服务器。
sudo apt update
sudo apt install snapd
sudo snap install snap-store
sudo snap install –classic certbot
2. 安装完之后使用以下命令确认是否安装成功:
certbot –version
3. 查看服务器上那个服务占用了80端口。
netstat -nutpl
我这里是nginx服务占用了,所以通过systemd暂时关闭nginx服务:
systemctl stop nginx
4. 申请域名对应的CA证书。我这里给liuwenhao.me以及www.liuwenhao.me都申请了证书
certbot certonly –standalone -d liuwenhao.me -d www.liuwenhao.me
顺便测试一下如果要续期的话能否正常执行,注意到后面的–dry-run参数就是模拟执行的意思。
certbot renew –dry-run
执行完上面的命令后,应该会有成功的提示,并且记录好成功提示里面公钥以及私钥的存放位置。
第2步 更新nginx服务配置
我这边安装的nginx服务的配置文件存放位置是/etc/nginx/nginx.conf,通过vim查看,发现本身并没有关于80端口的配置。继续看,发现在http配置字段里面引用了conf.d以及sites-enabled下面的所有的配置文件。
逐个查看,发现nginx真正的80端口以及443端口的配置放在了sites-enabled下面的defaults文件里面。在server字段下面的80端口的配置后面添加对于SSL的配置,从网上copy了一段下来。需要改的就是里面公钥以及私钥的位置。其他的都没有改。
ssl_certificate /etc/letsencrypt/公钥路径
ssl_certificate_key /etc/letsencrypt/私钥路径;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_timeout 10m;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_buffer_size 1400;
add_header Strict-Transport-Security max-age=15768000;
ssl_stapling on;
ssl_stapling_verify on;
配置好后,defaults文件长这样:
重启nginx服务后即可生效:
systemctl start nginx
第3步 更新图床配置
博客的图片是放在又拍云上的,使用的是另外一个国内的域名。因此需要登录又拍云,在SSL证书的栏目中选择免费的Let’s Encrypt。价格美丽,值得拥有。
又拍云购买SSL证书之后,需要在证书服务中开启HTTPS访问的功能。
接下来要做的就是把博客链接中的所有的http的图片更换为https的图片。直接后台登录mysql,使用SQL语句将所有的http拦截替换为https链接。
UPDATE wp_posts SET post_content = replace(post_content, ‘http://www.sample.com’, ‘https://www.sample.com’);
网上还说需要把后台配置中的站点地址更新成https开头的。但我这边没做任何修改,还是http,仍然可以正常访问。
至此,所有的配置都已完成。打开博客之后,浏览器显示证书可用。如果这个时候还有一些排版问题,可能是css之类的还没有加载好,Ctrl+F5强制刷新一下即可恢复正常。