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

Postman调用需客户端证书的API时持续返回403 Forbidden错误

排查IIS 10要求客户端证书时返回403 Forbidden的问题

从你的描述来看,核心问题出在客户端证书的验证环节,以下是具体排查方向和解决方法:

客户端证书本身的验证问题

  • 服务器信任客户端证书:确保你在Postman中使用的客户端证书已被服务器信任。如果是自签名证书,必须手动导入到服务器的「受信任的根证书颁发机构」存储;如果是CA签发的,要确认服务器能获取到完整的证书链(包括中间CA证书,需导入到「中级证书颁发机构」存储)。可以在服务器上双击证书,查看「证书路径」标签,确保所有节点都显示“此证书正常”。
  • 证书用途匹配:检查客户端证书的「增强型密钥使用」扩展,必须包含「客户端身份验证」(OID: 1.3.6.1.5.5.7.3.2)。如果证书仅用于服务器身份验证,IIS会直接拒绝。
  • 证书有效期与吊销状态:确认证书未过期,且未被吊销。测试时可以临时关闭吊销检查(在IIS SSL设置或代码中调整),排除吊销列表无法访问导致的验证失败。

IIS配置细节调整

  • SSL设置的客户端证书选项:确认站点「SSL设置」中选择的是「要求客户端证书」,同时检查服务器的SSL协议版本是否与Postman兼容(比如禁用过时的SSL 3.0,启用TLS 1.2+)。
  • 客户端证书映射配置:如果你的API需要将客户端证书映射到Windows账户,需在IIS的「身份验证」模块中启用「IIS客户端证书映射身份验证」,并配置多对一或一对一映射,确保映射的账户拥有API目录的访问权限(你已配置IUSR、应用池账户,可补充映射账户的权限)。
  • 功能委派检查:在IIS管理器的「功能委派」中,确保「SSL设置」的委派模式为「可读/可写」,避免站点级的SSL配置无法生效。

Web.config与应用层配置

  • IIS证书传递配置:在web.config的<system.webServer>节点下添加如下配置,强制IIS传递客户端证书到应用层,并启用证书映射:
<security>
  <access sslFlags="Ssl, SslNegotiateCert, SslRequireCert" />
  <authentication>
    <iisClientCertificateMappingAuthentication enabled="true" manyToOneCertificateMappingEnabled="true">
      <manyToOneMappings>
        <!-- 示例:将指定CA签发的所有证书映射到应用池账户 -->
        <add name="TrustedCA" enabled="true" permissionMode="Allow" userName="YourAppPoolAccount">
          <rules>
            <add certificateField="Issuer" certificateSubfield="CN" matchCriteria="YourCACommonName" compareCaseSensitive="false" />
          </rules>
        </add>
      </manyToOneMappings>
    </iisClientCertificateMappingAuthentication>
  </authentication>
</security>
  • ASP.NET Core应用额外配置:如果是.NET Core API,需要在Program.cs中添加证书验证逻辑,确保应用能识别并验证客户端证书:
builder.Services.AddAuthentication(CertificateAuthenticationDefaults.AuthenticationScheme)
    .AddCertificate(options =>
    {
        options.AllowedCertificateTypes = CertificateTypes.All;
        options.RevocationMode = X509RevocationMode.NoCheck; // 测试阶段可临时关闭,正式环境建议开启
        options.ValidateCertificateUse = true;
        options.ValidateValidityPeriod = true;
    });

// 注意顺序:先认证再授权
app.UseAuthentication();
app.UseAuthorization();

其他排查点

  • 代理/防火墙拦截:如果服务器前有反向代理(比如ARR)或防火墙,需确保这些设备启用了SSL桥接,不会终止客户端证书的传递,否则IIS无法收到客户端证书。
  • Postman证书配置验证:确认Postman的证书配置是在「Settings > Certificates」中添加,Host与API域名完全匹配,PFX文件和密码正确。也可以用curl命令行测试,排除Postman的问题:
curl -X GET https://your-api-domain/api/your-endpoint --cert client-cert.pfx:your-cert-password

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 20:10:30