证书和域名
我不用 localhost 的自签弹窗。本地用一个不会上线的名字,例如 notes.local.test,写进 hosts,再用 mkcert 签这个名字:
mkcert notes.local.test
mkcert -install
Nginx 或开发服务器指向生成的 pem。浏览器信任的是本机 CA,换一台电脑要重新 install。
不要把开发 CA 的私钥提交到仓库。我放在 ~/.local/share/mkcert,目录权限只有自己可读。
Cookie 与混合内容
一旦页面是 HTTPS,脚本、图片、接口如果仍是 HTTP,浏览器会拦混合内容。接口报错看起来像 CORS,其实是协议不一致。开发环境把 API 也放到同一证书下,用反代转发到后端端口。
Secure 的 Cookie 在 HTTP 下不会存。本地如果有时开 HTTPS、有时开 HTTP,登录状态会“丢”。固定一条协议,少切换。
局域网设备
手机要访问电脑上的站点,证书里还要包含局域网 IP 或另一条域名。mkcert 可以一次签多个名字。手机不会自动信任你电脑上的 CA,需要把 root CA 装到设备上,这一步在 iOS 上尤其麻烦。
更省事的做法:开发时仍用电脑浏览器的设备模式看布局,真机联调再走一台带正规证书的预发环境。
项目主页:mkcert。