【问题标题】:Axios with Mutual TLS: how to provide credentials具有相互 TLS 的 Axios:如何提供凭据
【发布时间】:2020-11-11 08:40:59
【问题描述】:

在浏览器中,我可以使用脚本标签从 CDN 加载 Axios:

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

但是,用于双向 TLS 的类 https.Agent 不存在,也不清楚如何加载它。我的代码大致是:

const httpsAgent = new https.Agent({
  rejectUnauthorized: false, 
  cert: ...,
  key: ...
})
....
axios.post('https://....', {...}, { httpsAgent } )

控制台错误:未捕获的 ReferenceError:https 未定义

本地示例通常显示 require(如下),但 https 应该可以从像 unpkg 这样的 CDN 加载?

const https = require('https');
const axios = require("axios");

(PS:谷歌搜索'https'没用)

【问题讨论】:

  • 你有这方面的公共 SSL 证书吗?如果它给你任何证书错误
  • 尝试实例化一个新的 axios 实例,例如 const customAxios = axios.create({ httpsAgent: new https.Agent({ rejectUnauthorized: false })}),然后使用该实例执行网络请求
  • 谢谢,但错误是加载类 https.Agent,而不是使用自签名证书或网络连接..
  • fs 来自节点。你不能在浏览器中这样做。

标签: javascript node.js https axios


【解决方案1】:

我使用客户端浏览器证书解决了这个问题。当 Web 服务器启用 SSL 客户端验证时,它将请求客户端证书。使用这种技术,证书是带外传递的,而不是 Axios post() 调用。

在 Nginx 上,可以使用 ssl_verify_clientssl_trusted_certificate 进行配置,确定用于验证证书的 CA。在初始 TLS 交换期间,用户浏览器中的弹出窗口将提示他们选择要发送的证书。

用户必须在浏览器中配置客户端 .p12(组合证书和密钥)。在 Chrome 上:

Chrome 偏好设置 > 隐私和安全(其他设置)> 管理证书

然后可以在没有显式身份验证的情况下发出 HTTPS 请求:

    axios.post('https:....., dataArg)

【讨论】:

    猜你喜欢
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多