引言
1 | 昨天把博客迁到了https下,现在博客支持https访问了。本文适合自己用机器搭建的博客。 |
起因
1 | 首先之前就已经听说从2017年1月份起,Chrome浏览器将会把采用HTTP协议的网站标记为“不安全”网站;另外最近自己手头的很多项目都开始往https下迁移;还有就是用谷歌浏览器看自己的博客一直提示感叹号;最后最让我郁闷的是某运营商的劫持,种种这些原因促使自己的让博客支持https访问。 |
https请求流程
实现方案
- 简单方式: 把博客部署在github上,直接就能https访问
例如yunsonbai_github - 稍微麻烦点的方式: 自己购买服务器部署上博客后,找认证机构办法签证(我采用的这个方式)
例如yunsonbai认证机构
- 收费的
- geotrust
- 免费的
- Let’s Encrypt(本次介绍如何使用这个)
具体实现
创建一个临时文件ssl(存放过程中需要用到的临时文件)
$ mkdir ssl
$ cd ssl创建一个 RSA 私钥用于 Let’s Encrypt 识别你的身份
$ openssl genrsa 4096 > account.key生成 CSR
- 创建 RSA 私钥
$ openssl genrsa 4096 > domain.key
$ openssl req -new -sha256 -key domain.key -out domain.csr(基本都能看懂,都是跟地址相关的东西)
- 创建 RSA 私钥
配置nginx(针对nginx)
1 | location ^~ /.well-known/acme-challenge/ { |
获取网站证书
- 利用Let’s Encrypt官网提供的脚本工具
利用开源项目acme_tiny(我用的这个,不错)
$ wget https://raw.githubusercontent.com/diafygi/acme-tiny/master/acme_tiny.py
$ python acme_tiny.py –account-key ./account.key –csr ./domain.csr –acme-dir /usr/local/nginx/html/.well-known/acme-challenge/ > ./signed.crt1
一切正常的话不会报任何错误,切记/usr/local/nginx/html/.well-known/acme-challenge/路径是你的博客相关路径
配置nginx
1 | 到目前为止拿到了证书 |
- 把刚才ssl文件移到你认为比较靠谱的目录下(例如 /usr/ssl)
- 配置nginx
1 | server{ |
也可以参考nginx实现https
- 将http请求转到https下
1 | server { |
需要注意的地方
1 | Let's Encrypt的证书只有90天有效期,所以你要美90天续签一次,最简单的方式就是利用crontab来做这个是,说白了定期执行这条python acme_tiny.py --account-key ./account.key --csr ./domain.csr --acme-dir /usr/local/nginx/html/.well-known/acme-challenge/ > ./signed.crt命令 |
大功告成
1 | 尝试访问一下https://yoursite.com |