原文链接:https://www.jianshu.com/p/57e5bb1277ce
前言
注意:上 HTTPS 超级简单,写这么多,只是因为过程比较有趣,就多哆嗦了几句 有了自己的博客:《极简博客搭建,搭建超级简单又好看》 有了自己的图片处理服务:《搭建自己的图片处理服务 — 智能裁剪、旋转、占位一站搞定》 都已经这么完美了,为什么还会有这篇文章呢?是对社会有什么不满意吗?
为什么要上 HTTPS
**安全:**你与用户之间的消息加密传输,防止中间人攻击(就是我遇到的问题) **其它优点:**当你在国内使用域名时,需要备案。有时你想测试一下你的站,用上未备案的域名,怎么办呢?https 可以帮你暂时绕过阿里云弹的未备案页(强烈建议去备案你的域名,一来你应当守法,二来未备案国内 cdn、网站收录什么的都需要备案的域名),其它暂时没想到有什么优点。
因果
前些天刚搭了个漂亮的小博客,写了几篇小日记还没有修改成小说。可以说非常开心了,于是今天早早洗完澡准备在床上用手机体验下网站自适应的效果。打开微信,扫了下自己站的二维码,顺势躺在床上。划~划~划,突然底部跳出一个广告,咦?什么情况?我什么时候投的广告??这博客不会这么坑吧?竟然自带广告。 不行,得起来撸代码了。带着懊恼的心情,我又回到了电脑前,开始检查博客的源码,看看具体哪里出了这个问题。看了一遍,没有问题。突然想到,这可能是被运营商劫持了。那没办法了,只能连夜上个 HTTPS 了。
没有服务器? 来参加阿里云双 11 底价团,12 号前 99.5/台起!
准备
- 域名(自备)
- acme.sh
acme.sh 是一个自动申请 https 证书的脚本,使用方便,功能也非常强大。
安装:
curl https://get.acme.sh | sh
或者wget -O - https://get.acme.sh | sh
这样你已经把 acme.sh 这个小工具安装到你本地的~/.acme.sh/
中了,而不会在你系统的其它地方装些乱七八糟的东西。
极速开始
不是阿里的朋友,可以尝试下面的常规路线
阿里云购买域名的朋友可以走这个极速通道,因为阿里云有接口可以直接操作域名控制台,这个接口已经被整合到了 acme.sh
这个工具里面。只要设置一下 Ali_Key 和 Ali_Secret, 从哪里获得?
-
在你的命令行中执行如下命令:
export Ali_Key="换成你的 AccessKey ID"
export Ali_Secret="换成你的 Access Key Secret"
-
开始申请证书
acme.sh --issue --dns dns_ali -d 2td.cc -d '*.2td.cc'
2td.cc
是我的域名,这里需要换成你的。 参数解释: acme.sh :表示使用你刚安装好的acme.sh –issue :申请证书 –dns dns_ali:使用阿里云的 dns 服务,在阿里云买的域名,在没有修改默认 dns 的前提下,都可以使用这个参数来申请 https 证书。 -d 2td.cc:-d
表示 domain,后面跟你要申请域名。 -d ‘*.2td.cc’:这里的-d 与上方一样,-d 参数可以带多个,这里的'*.2td.cc'
中的 * 表示泛域名,只要申请了这个证书像(www.2td.cc,mail.2td.cc,h5.2td.cc …)这类的二级域名都可以使用此证书来实现 https。注意2td.cc
这个域名不在这条规则里,所以上面又加了一条-d 2td.cc
,这样你的主域名、二级子域名均可以使用此证书。 -
等待执行完成,期间会有 120 秒的倒计时,结束后如果显示成功,则证书申请成功。
- 应用到 nginx 修改你 nginx 的配置,配置 https
server {
listen 443 ssl;
# 有了 https 可以尝试开启 http2,加速你的网站
# http2 需要你 nginx 加载了 http2 模块,用如下配置开启。
# listen 443 ssl http2;
server_name 2td.cc;
ssl_certificate /root/.acme.sh/2td.cc/fullchain.cer;
ssl_certificate_key /root/.acme.sh/2td.cc/2td.cc.key;
# charset koi8-r;
access_log /var/log/nginx/host.access.log main;
# 下面写你之前的配置
}
常规路线
一些 DNS 服务商,没有提供 API 操作 DNS 的接口,所以整合不进这个工具里。当然我们也还是可以申请证书。 这种方式的好处是, 你不需要任何服务器, 不需要任何公网 ip, 只需要 dns 的解析记录即可完成验证. 坏处是,如果不同时配置 Automatic DNS API,使用这种方式 acme.sh 将无法自动更新证书,每次都需要手动再次重新解析验证域名所有权。
- 申请证书
acme.sh --issue --dns -d aiwdh.cn --yes-I-know-dns-manual-mode-enough-go-ahead-please
aiwdh.cn
是我的域名,这里需要换成你的。 参数解释: acme.sh :表示使用你刚安装好的acme.sh –issue :申请证书 –dns:使用 DNS 的方式来验证你的所有权,你需要在域名上添加一条 txt 解析记录, 验证域名所有权。 -d aiwdh.cn:-d
表示 domain,后面跟你要申请域名。 –yes-I-know-dns-manual-mode-enough-go-ahead-please:官方不推荐使用此方式来生成证书,所以有这个额外的参数来提醒你你在做什么。
-
添加 txt 记录
-
加好记录后,重新申请证书
acme.sh --issue --dns -d aiwdh.cn --yes-I-know-dns-manual-mode-enough-go-ahead-please --renew
-
应用到 nginx 修改你 nginx 的配置,配置 https
server {
listen 443 ssl;
# 有了 https 可以尝试开启 http2,加速你的网站
# http2 需要你 nginx 加载了 http2 模块,用如下配置开启。
# listen 443 ssl http2;
server_name aiwdh.cn;
ssl_certificate /root/.acme.sh/aiwdh.cn/fullchain.cer;
ssl_certificate_key /root/.acme.sh/aiwdh.cn/aiwdh.cn.key;
# charset koi8-r;
access_log /var/log/nginx/host.access.log main;
# 下面写你之前的配置
}
- 这种方式添加的证书,每当证书快过期,需要重新走一下这些步骤,稍微麻烦一点。
结语
如果用极速申请的方式,很快就可以实现全站 https 了。当然第二种方式来申请证书你都不需要在自己的服务器上作操作,你可以在本地完成申请,把证书拿到各个地方去用。
终于用上了 https, 再也没有多余的广告在我手机上显示了,开心。申请速度倒是很快,整理不易,且行且珍惜。 还没服务器域名? 来参加阿里云双 11 底价团,12 号前 99.5/台起!
图文并茂,文章写的不错 运营商劫持估计换https也不太行,有些恶心的,直接用iframe包住你的网页,它该显示照样显示,那群人为了赚钱野路子贼多。
@zy445566 运营商劫持 https 可以解决的。
运营商并不能在 https 的原文里添加任何信息,加了客户端就解不开了。
对于访问量日IP没超过1万的网站来说,用caddy就够了,支持免费自动申请通配符https证书,配置非常简单。
sudo yum update
sudo yum install epel-release
sudo yum install caddy
sudo systemctl enable --now caddy.service
vi /etc/caddy/Caddyfile
粘贴以下代码到/etc/caddy/Caddyfile
中
focalhot.com, www.focalhot.com {
redir 301 {
if {host} starts_with focalhot.com
/ https://www.focalhot.com{uri}
}
proxy / 127.0.0.1:8080 {
transparent
}
gzip
tls [email protected]
}
重启caddy服务
sudo systemctl restart caddy
@944609 赞,是好思路!
@944609 一直用caddy,今天才知道,epel源里居然有
@zuohuadong 不错啊,大家都用起了 caddy,我还以为用的人不太多呢。开心
@gladmo 楼上的意思,应该是你的域名并不是解析到你的ip,而是解析到运营商的ip,运营商返回他自己的html,然后把你的ip地址放在自己页面的iframe中,这样应该是不需要修改你的https的请求的.
@JsonSong89 但问题是此时你虽然可以提供正确的内容,但无法提供 正确的https证书。
并且 原站 https 响应里 可以设置禁止 iframe
@gladmo 之前caddy 中文文档翻译了一半~
@JsonSong89 还能有这么骚的操作吗,666
@zuohuadong 感谢对开源软件作出这么大的贡献,如果可以,可以在评论里宣传一下。我挺喜欢 caddy的
确实简单,感谢
@JsonSong89 @zuohuadong 有个https劫持案例,正好也是跟iframe相关 https://www.zhihu.com/question/35720092/answer/523563873
X-Frame-Options: DENY(禁止被Iframe嵌套)
X-Frame-Options: SAMEORIGIN(只允许同域名中被Iframe嵌套,二级域名不一致也不可以)
X-Frame-Options: ALLOW-FROM https://example.com/(可能存在浏览器兼容问题)
另外针对网吧这种直接在客户端电脑植入证书的,你可以通过 CAA 解析来解决。
wow 正好买了个服务器 学习一波 感谢 分享