建站小记

感想在前

两周前的一个深夜,为了让心灵树洞项目拥有一把安全的小锁(HTTPS),让自己在面试中能够更从容体面,于是开始折腾。中间也了解到一些傻瓜式的简单方式,但并不能让自己有所什么收获,进而不断折腾,最后经过漫长的备案,以及再次踩入前人踩过的各种坑,终于成功啦!很是开心哈哈!

不知怎么的,感觉最近心态还蛮好的,即使知道这些不是什么难事,但只要自己有主动性,先把事情做成,然后再把事情做好,不必一蹴而就,通过过程中记录不足,再一点点去优化,最终把事情做的令自己满意就真的很有成就感hh

也简单记录,也是回忆一下整个过程。

HTTPS

从傻瓜式方法开始

如果使用托管平台,平台可能提供HTTPS服务(如Github Pages、Vercel等),或者使用提供HTTPS服务的CDN(如CloudFlare)都可以让项目加上小锁。

由于项目有后端数据库,所以前者不适用(我的技术博客就是用的这个方案,而且其实使用serverless数据库也可以,后续再搭一个试试),而后者无法保证CDN和站点之间的通讯是安全的(依然是HTTP),所以暂不考虑。

使用证书

于是开始尝试从根本上解决问题,给阿里云的站点申请一个SSL证书。最初只知道HTTPS需要一个SSL证书,但实际需要域名对应一个证书,光有IP地址是不行的。以前的话,申请一个证书是比较麻烦的,而且需要付费,但现在有了有了MDN的Let’s Encrypt,就方便多了。

因为项目是在阿里云上,本身只有一个公网IP,购买域名的话在阿里云上比较方便,而且还可以免费申请证书(10个免费证书,每年需要更新)所以就入坑了,但同样选择将机器和域名申请放在国内,就不可避免要经历更多的备案和审核。

购买域名的话,最简单了,花钱嘛谁不会。上次在namesilo.com上第一次购买域名yangyixuan.icu时,这个域名好像还被占用了,所以这次看到就赶快买了。

阿里云生成的证书后续需要放在服务器上,供Nginx使用(ECS的一键部署只是把证书放到/ssl文件夹中,而且不是完整的证书链,需要注意避坑)。

在这个过程中还了解到证书链这个概念。下图可以看到阿里云的免费证书实际是由中级机构颁发的,这就是一个证书链,根证书CA信任中级证书CA,中级证书CA信任我,再给我发证书,Let’s Encrypt的证书应该也是这样的。
证书

备案

于是就来到了最具中国特色的环节,5.27号申请,到现在两周多的时间,正好中间忙别的事情,还出去完了一趟,所以感觉还是蛮快的。

如果不备案的话,阿里云的DNS是不会提供把域名导向IP的,而是显示404页面,提示你还没有备案,域名买了白买。

一共两道备案:工信部ICP备案 和 公安部联网备案。ICP备案是经营性备案,为了防止网上的非法经营活动,而联网备案是为了防止网站上的各类非法信息,预防包括谣言传播等舆情相关网络空间安全问题。

其实感觉还蛮有必要的,tradeoff了算哈哈。

ICP备案要填网站的信息,干啥用的,个人的话,主要就是命名和网站备注,我就写的羊一圈的生活,记录生活和学习。

ICP备案比较慢,申请通过审批之后,再去申请网安备案,网安备案主要描述网站是否需要发布某类特殊信息,还需要提交一个安全评估报告,写一些网站管理的方案,如何保证用户隐私,如何配合网安部门对网站进行调查。如果不提供交互式服务(为他人提供博客功能、文件服务、云服务之类的),不涉及发布经营、新闻类等信息的个人网站,这个备案就很快了,一天就下来了,按照要求把ICP备案号和网安备案号都放好,网站就算合规了~

Nginx

最后就是通过Nginx反向代理,监听443端口并且配置对应的ssl证书,将通过HTTP以及通过IP访问网站的请求重定向到HTTPS+域名,其中最大的坑居然是阿里云安全组添加了端口,但实际防火墙并没有开放端口,搞了半天,才发现是端口没打开,排查思路还要更加清晰有逻辑。网络相关的各种指令还是要熟记于心。

还有就是由于不想污染服务器的环境(服务器上的环境现在只有docker和git),整个Nginx我还是架在docker上的,但对网站的性能也有一定影响。

最后项目和个人网站都加上了小锁,而且中间学习了不少知识,网络安全意识也更强了,果然生命在于折腾哈哈哈,继续加油!