You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Angular Webpack开发服务器代理本地HTTPS时后端提示证书DN为空

Angular代理未传递客户端证书至后端的原因及解决方案

核心原因

直接通过浏览器或编程工具请求后端时,是客户端(浏览器/工具)直接与Tomcat建立SSL连接并发送客户端证书;但Angular的代理(基于http-proxy-middleware)作为中间转发层,默认不会自动携带客户端证书,且当前配置未正确设置证书传递逻辑,导致后端接收不到证书,提示DN为空。

具体问题点

  1. 你的proxy.conf.js仅关闭了代理对后端证书的校验(secure: false、rejectUnauthorized: false),但未配置代理向后端发送客户端证书的参数。
  2. 尝试的ssl配置无效,大概率是证书文件路径错误、格式不符(需PEM格式),或是http-proxy-middleware版本适配问题导致配置未生效,进而出现options.ssl相关属性为undefined的情况。

解决方案

1. 正确读取证书文件并配置SSL选项

首先确保客户端证书(私钥key、公钥cert、CA证书ca)为PEM格式,且路径正确。在proxy.conf.js中先读取证书内容:

const fs = require('fs');
const path = require('path');

// 替换为你的证书实际路径
const sslOptions = {
  key: fs.readFileSync(path.join(__dirname, './certs/client-key.pem')),
  cert: fs.readFileSync(path.join(__dirname, './certs/client-cert.pem')),
  ca: fs.readFileSync(path.join(__dirname, './certs/ca-cert.pem'))
};

然后在代理配置中传入ssl选项:

'/api': {
  target: `https://localhost:${port}`,
  changeOrigin: true,
  rejectUnauthorized: false,
  secure: false,
  ssl: sslOptions,
  onProxyReq: (pr, req, res) => {
    // 可添加日志验证证书是否被加载
    console.log('Proxy SSL key loaded:', !!sslOptions.key);
  }
}

2. 适配http-proxy-middleware版本:使用HTTPS Agent

若上述ssl配置仍无效,可能是版本差异导致。改用创建HTTPS Agent的方式配置:

const https = require('https');

const sslAgent = new https.Agent({
  key: fs.readFileSync(path.join(__dirname, './certs/client-key.pem')),
  cert: fs.readFileSync(path.join(__dirname, './certs/client-cert.pem')),
  ca: fs.readFileSync(path.join(__dirname, './certs/ca-cert.pem')),
  rejectUnauthorized: false
});

然后在代理配置中添加agent属性:

'/api': {
  target: `https://localhost:${port}`,
  changeOrigin: true,
  agent: sslAgent,
  onProxyReq: (pr, req, res) => {
    console.log('HTTPS Agent configured:', !!pr.agent);
  }
}

3. 验证Tomcat端配置

确认Tomcat的SSL连接器配置中,clientAuth设为true(强制要求客户端证书)或want(可选),确保后端确实需要客户端证书,排除后端配置问题:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="150" SSLEnabled="true">
    <SSLHostConfig>
        <Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
                     type="RSA"
                     clientAuth="true" />
    </SSLHostConfig>
</Connector>

内容的提问来源于stack exchange,提问作者Stucco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 22:35:10