把你的网站升级到 HTTPS

作为一个普通用户,在使用手机浏览网页,或是阅读微信中别人分享的内容时,经常会看到屏幕下方有个弹出广告,什么点击领红包啦,免费送流量啦,或是移动运营商的广告。通常这些广告跟你浏览的网站本身风格完全不搭、画质又非常糟糕、而且在几个毫不相干的网站中都出现了。遇到这样的情况,基本可以肯定是有中间人劫持了你的流量,并篡改了网页内容,在其中嵌入了广告。纯粹做做广告已经算是客气,更恶劣的可以替换你浏览的网页内容,把你引向钓鱼网站,甚至直接窃取你的密码。

作为一个开发者,你的境遇更糟糕,因为这一切时刻都发生在你自己的网站或 APP 上。也许是你花费不少心思才做出来的精美页面被一个很粗糙的广告拉低了好几个档次;也许是一个重要活动的报名按钮被广告遮挡,你的用户不得不先小心翼翼关了广告才能继续;也许是为一个大客户制作的严肃的内容下面出现了一段夸张又搞笑的广告语。

但最最糟糕的是,你的大多数客户和用户都不清楚这是运营商或广告商劫持了他们的流量,而是以为你这个家伙为了一点微薄的广告收入在里面嵌了品味低下的广告,毕竟这网站是你的,这应用是你开发的,不是你干的还能是谁呢。你是希望当这一切发生的时候向他们解释这不是你的错,还是从根本上杜绝这样的事情发生呢?更何况你不是一点错都没有,是你的安全工作没做到位,给了无良广告商机会,钱他们赚,黑锅你背。

换了过去,你还有借口,对网站进行 HTTPS(SSL/TLS) 安全加密的证书是要花钱买的,每个独立子域名就要几百元一年,高级的证书则需要几千上万。

不过现在有了 Let's Encrypt。一个致力于推行互联网安全的非营利性组织,免费为你的网站进行认证并颁发证书,其颁发的证书已被各大浏览器广泛接受。

那么接下来就只剩一个问题了,到底怎么才能把自己的网站从 http 升级到 https 呢?

Let's Encrypt 和 Certbot

Let's Encrypt 颁发证书是完全自助的,如果你的网站已经上线运行,那么你只需要用它们提供的工具执行一个命令就能为其申请一个证书。

这个工具是 Certbot。

安装 Certbot

  • 打开 Certbot 的官方网站 https://certbot.eff.org/

  • 在 I'm Using 处选择自己使用的 Web 服务器和操作系统

  • 下方的内容会根据你的选择进行相应的变化

  • 根据网站给出的提示逐步操作

好吧,这个网站是英文的。

不过我简单总结了一下,主要是这两种方式:

首先尝试用操作系统对应的包管理器来安装,比如 ubuntu 用 apt-get install certbot, arch 用 pacman -S certbot,macOS 用 brew install certbot, centos 用 yum install certbot

如果提示包不存在,比如我用的 CentOS 6,那么可以尝试下载一个官方提供的叫做 certbot-auto 的脚本

wget https://dl.eff.org/certbot-auto  
chmod a+x certbot-auto  

如果使用 certbot-auto ,后续的命令中用到 certbot 的地方都换成 ./certbot-auto 即可。

获取证书

certbot certonly --webroot -w 网站根目录 -d 你的域名  

将网站根目录和域名换成你实际使用的目录和域名即可。

certbot 会自动完成一系列的验证工作,把证书放在你的服务器上,然后弹出一个恭喜你成功获取证书的提示,证书文件的名称也包含在该提示中。通常会是 /etc/letsecrypt/live/你的域名/fullchain.pem

为你的网站启用 HTTPS

接下来就要修改你 Web 服务器的配置文件了,比如 Nginx 默认是修改 /etc/nginx/conf.d/default.conf

将配文件中的

listen 80;  

改成

listen 443 ssl;  

然后添加两行配置说明使用哪个证书文件

ssl_certificate /etc/letsencrypt/live/你的域名/fullchain.pem;  
ssl_certificate_key /etc/letsencrypt/live/你的域名/privkey.pem;  

重启 Web 服务器使证书生效。

证书续期

Let's Encrypt 颁发的证书有效期为 90 天,你可以在证书快到期的时候进行续期操作,续期命令更加简单:

certbot renew  

该命令会逐一检查你所有的证书文件,并对其中快到期的证书进行续期。

为了使续期后的新证书生效,重启一下 Web 服务器。

完整的例子

本来只是想写一篇如何在 CentOS 6 和 Nginx 下使用 Let's Encrypt 为你的网站增加 HTTPS ,一不小心把题目写大了收不住。这个具体的例子,会涉及一些官方操作未提及的细节和问题,只好再另开一篇进行详细描述了。

更多

我的第一个MCP,以及开发过程中的经验感悟

起心动念 上周开发完 sheetex 后,发了条朋友圈。有小伙伴建议搞个 MCP 玩,正好我本来也想学,于是这周就花了一天完成了 sheetex-mcp-server,一个将对话中生成的表格保存成 Excel 的 MCP 服务。 做之前快速调查了一下 smithery 和 modelscope ,发现已经有好几个 Excel 相关的:实现上既有调用本机上的 Office 软件进行操作的,也有用库读写文件的;功能就更加眼花缭乱,从简单读写数据,到插入图表,甚至可以截图保存。 看来是打不过了,好在只是做个练习,开搞。 一天下来,学到不少东西,也填了好几个坑,本文以坑为主。 那么下面就按顺序来了。 新手上路 Build an MCP Server 是官方的教程,新手入门刚刚好,它通过调用天气相关的接口演示了 MCP Server 的开发过程。

By 熊立丁

12KB的Excel导出库sheetex是怎么来的

这是一个关于前端 Excel 导出库 sheetex 的故事:我为什么要做这个库,它为什么会这么小,以及你是否值得一试。 如过你问我“为什么非要在前端导出”,那将是另一个故事。 我的数据导出史 不知道你是否还记得自己是从什么时候开始接触数据导出的? 我对自己的“数据导出史”还算有些印象:在还没有正式工作的时候,如果有人问我要数据,我会在数据库管理工具里写个查询语句,然后视对方的用途,导出成SQL 语句、CSV 文件或者Excel 等;待到工作了,需要开发面向最终用户的系统,就不能再这么手工处理,导出功能成为系统标配,用户点击一个按钮,就要下载到相应的文件。 最早是 CSV 格式,因为其生成相对容易,而且也可以通过 Excel 软件进行查看,加上主要是内部用户,偶有无法打开也只要简单培训就能解决。 但随着用户类型变得广泛起来,这种“偶尔”也逐渐变成无法忍受,那么干脆直接导出 Excel 文件吧,反正开源库也已经成熟,于是使用 SheetJS

By 熊立丁
浙ICP备15043004号-1