背景
为什么要使用https?
- https可以有效避免无良运营商的DNS劫持,可以显著提升网站逼格。
- 使用https已经是大势所趋,人心所向,iOS甚至强制要求开发者使用https。
为什么要使用Let's Encrypt
?
- 对于个人开发者而言,https证书太贵,一般都好几千一年。
Let's Encrypt
免费开源无疑是一个不错的选择。
本文将记录蓝眼博客 (https://blog.eyeblue.cn) 搭建https的整个过程。网上有很多使用let's encrypt
代码生成证书,或者使用Certbot来生成证书,但是笔者觉得都没有直接借助 https://freessl.org/ 来生成证书方便快捷。
获取证书
1.填写域名
打开网站 https://freessl.org/ 填写自己的域名,你将看到下图。这里我们填入 blog.eyeblue.cn
,同时在下方勾选 Let's Encrypt
,然后点击“创建免费的SSL证书”按钮即可
2.填写邮箱,选择证书类型,验证类型和CSR生成方式
填写自己的邮箱
证书品牌只能选择
Let's Encrypt
证书类型选择
ECC
。这里主要是选择数字签名的算法,对于普通用户使用默认的ECC
即可。如果需要根据自己的具体情境来选择,一般有以下选择依据:(1) RSA签名算法适合于:Verify操作频度高,而Sign操作频度低的应用场景。比如,分布式系统中基于capability的访问控制就是这样的一种场景。
(2) ECDSA签名算法适合于:Sign和Verify操作频度相当的应用场景。比如,点对点的安全信道建立。验证类型使用
DNS
的方式。其实验证类型用来确定你是否是这个域名的所有者,确认的方式有两种:
1.DNS。 CA(Certificate Authority 数字证书认证机构)将通过查询 DNS 的 TXT 记录来确定您对该域名的所有权,因此需要在域名管理平台将生成的 TXT 记录名与记录值添加到该域名下。
2.文件。CA 将通过访问特定 URL 地址来验证您是否有改域名的所有权。因此,您需要下载给顶的验证文件,并上传到您的服务器。CSR生成选择
浏览器生成
。一般的浏览器都支持Web Cryptography
,直接使用默认的浏览器生成
最方便。
下图便是我的填写,填好之后点击“点击生成”按钮。
3.进行DNS验证
3.1 在第2步中点击按钮后,会弹出下图内容:
3.2 这时只需要去域名解析控制台添加一条TXT的解析记录即可。我的域名在阿里云,因此解析详情如下图所示:
完成解析后,点击3.1中的“点击验证”按钮
4.下载证书
在点击第3步的按钮后,会弹出证书文件下载的按钮,此时点击“下载证书”即可获得证书文件full_chain.pem
和私钥文件private.key
。
配置nginx
nginx的配置如下:
server{
# 监听443端口
listen 443 ssl;
# 域名,如果有多个空格隔开
server_name blog.eyeblue.cn;
# 启用ssl
ssl on;
# 证书文件的放置路径。证书文件即通过上文《获取证书》的方式获得。
ssl_certificate /data/security/letsencrypt/blogeyebluecn/full_chain.pem;
# 私钥文件的放置路径。
ssl_certificate_key /data/security/letsencrypt/blogeyebluecn/private.key;
# 蓝眼博客的服务运行在端口6020
location / {
proxy_pass http://127.0.0.1:6020;
proxy_set_header host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass_request_headers on;
client_max_body_size 8m;
}
}
#对于通过http来访问蓝眼博客的请求,我们默认让其跳转到https. 这样保持了http访问的兼容性。
server {
listen 80;
server_name blog.eyeblue.cn;
rewrite ^(.*)$ https://blog.eyeblue.cn$1 permanent;
}
修改了配置文件后记得
service nginx restart
验证
打开网页https://blog.eyeblue.cn
,即可看到地址栏中绿色的小锁,证明https已经成功开启。即使你输入http://blog.eyeblue.cn
也会自动转跳到https
下的,如此便保证了兼容性。
维护
Let's Encrypt
证书的有效期只有三个月,这就需要我们每隔一段时间就去更新一下证书,好在https://freessl.org/
可以帮我们管理证书,注册登录之后便可以看到我们的证书管理界面如下:
参考文章
原文发表于蓝眼博客:https://blog.eyeblue.cn/home/article/9f580b3f-5679-4a9d-be6f-4d9f0dd417af