问题描述
在使用 Deno 的 fetch API 进行网络请求时,有时会遇到类似以下的错误:
error: Uncaught (in promise) HttpException: HttpException: FetchError: request to https://example.com failed, reason: SSL certificate problem: certificate has expired (runtime.deno.js:7548:11)
这是因为 HTTPS 站点所使用的 SSL 证书过期了。但这不是一个特定于 Deno 的问题。可以在其他 JavaScript 环境中(例如 Node.js 中)遇到相同的错误。
解决方法
要解决此问题,可以禁止 SSL 校验,或者更新或替换 SSL 证书。
禁用 SSL 校验
禁用 SSL 校验的方法相对简单,但不太安全,因为它使应用程序容易受到中间人攻击。建议只在开发环境中使用此选项,并在生产环境中更新证书。
import { fetch } from "deno"; const res = await fetch("https://example.com", { // 不校验证书 insecure: true }); console.log(await res.text());
更新或替换 SSL 证书
更新或替换 SSL 证书需要找到证书的颁发机构并获得新的证书。有两种方法可以获得证书:
- 如果使用的是自签名证书,则可以创建新的自签名证书并将其部署到服务器。
- 如果使用的是由可信的颁发机构颁发的证书,则可以向颁发机构请求新证书。
在更新证书后,应更新配置以使用新证书。
以下是使用 Node.js 的示例代码:
-- -------------------- ---- ------- ----- ----- - ----------------- ----- -- - -------------- ----------- --------- -------------- ----- ---- ------------------- ----- -- ------ --- ----------------------------------------------- -- ----- -- --- -- - --- ---- - --- -------------- - -- - ---- -- -- --- ------------- -- -- - ------------------ --- ---
总结
尽管 Deno 与其他 JavaScript 环境不同,但解决 SSL 证书问题的方法与其他环境相同。禁用 SSL 校验虽然简单,但不安全。建议使用安全的方法更新或替换证书。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64aedc5d48841e9894b0a77c