在使用 Node.js 进行 web 开发时,经常会用到 request 包来发送 HTTP 请求。然而,有时候我们可能会遇到如下错误:
Error: certificate has expired at TLSSocket.<anonymous> (_tls_wrap.js:1125:38) at emitNone (events.js:111:20) at TLSSocket.emit (events.js:208:7) at TLSSocket._finishInit (_tls_wrap.js:643:8)
这个错误提示表明请求的 SSL 证书已经过期,导致了请求失败。
解决方案
方案一:忽略证书验证
我们可以通过设置 rejectUnauthorized
选项为 false
来忽略证书验证,但是这样做会带来安全风险,因此不推荐在生产环境中使用。
const options = { url: 'https://example.com', rejectUnauthorized: false }; request(options, function(error, response, body) { // ... });
方案二:更新证书
如果证书已经过期,我们需要联系网站管理员更新证书。如果是自己的网站,我们可以使用免费的 Let's Encrypt 证书或购买商业 SSL 证书,具体操作可以参考相关文档。
方案三:手动指定证书
如果证书没有过期,但是我们仍然遇到了该错误,可能是因为证书链上的某个证书不受信任。此时,我们可以手动指定证书链:
-- -------------------- ---- ------- ----- -- - -------------- ----- ------- - - ---- ---------------------- --- ----------------------------------- ----- ------------------------------------- ---- ----------------------------------- -- ---------------- --------------- --------- ----- - -- --- ---
总结
在使用 Node.js 进行 web 开发时,我们可能会遇到 CERT_HAS_EXPIRED
错误。为了解决这个错误,我们可以忽略证书验证、更新证书或手动指定证书。其中,忽略证书验证虽然简单,但也带来了一定的安全风险,因此建议只在开发环境中使用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/30890