因为最近要测试一个本地开发的网站,该网站强制必须使用 SSL 连线,然后我又要用 iOS 测试,于是搞半天终于搞定可以让 iOS 信任的 HTTPS SSL 自签名凭证。
先建立 ssl.conf 文件,内容如下,DNS 里面可以新增或修改为自己的域名
authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment subjectAltName = @alt_names [alt_names] DNS.1 = api.localhost.dev DNS.2 = admin.localhost.dev DNS.3 = app.localhost.dev IP.1 = 127.0.0.1
再执行下面指令。请不要自作聪明改掉 390 这个数字。因为 2020 年 9 月之后系统不会信任到期日 13 个月以上的凭证,所以如果你抄太久以前的网站教学,一次签十年那种,就会搞半天然后一直翻车不成功。
openssl req –x509 –nodes –new –sha256 –days 390 –newkey rsa:2048 –keyout 「RootCA.key」 –out 「RootCA.pem」 –subj 「/C=TW/CN=localhost.dev」 openssl x509 –outform pem –in 「RootCA.pem」 –out 「RootCA.crt」 openssl req –new –nodes –newkey rsa:2048 –keyout server.key –out server.csr –subj 「/C=TW/ST=Tawian/L=City/O=Organization/CN=localhost.local」 openssl x509 –req –sha256 –days 390 –in server.csr –CA RootCA.pem –CAkey RootCA.key –CAcreateserial –extfile ssl.conf –out server.crt
之后会生成两个 crt,分别是 root.crt 跟 server.crt,把这两个文件分别 AirDrop 进去 iPhone 里面,然后安装凭证。最后再去设置的 一般 → 关于本机 → 凭证信任设置 里面把开关打开就可以了。如果你的开发机不是 Mac,不能 AirDrop 的话,可以用 Email 发给自己,一样可以安装凭证。
至于怎么让 DNS 解析到这个设置的域名呢… macOS 端我是直接改 /etc/hosts,iOS 端我是用 Surge,但任何可以让你设置 DNS 解析的工具应该都可以〔例如 AdGuard for iOS〕