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

生产环境出现RemoteCertificateNameMismatch错误,求排查根因

排查RemoteCertificateNameMismatch错误

生产环境遇到RemoteCertificateNameMismatch错误,耗时查阅资料仍未找到根因,请求协助排查。

复现步骤

  1. 在另一台机器上创建代码签名证书,通过以下PowerShell命令导出(包含私钥):
    New-SelfsignedCertificate -KeyExportPolicy Exportable -Type CodeSigningCert -DnsName localhost, webapi.mycomp.com, authserver.mycomp.com -Subject "CN=MyWebAPI" -KeySpec Signature -KeyAlgorithm RSA -KeyLength 2048 -HashAlgorithm SHA256 -CertStoreLocation "cert:\\LocalMachine\\My"
    
  2. 将证书导入生产服务器(Windows 2008 R2)的「本地计算机/受信任的根证书颁发机构」,同时复制到「本地计算机/个人」尝试解决问题。
  3. IdentityServer4运行在生产服务器的IIS 7.5上,绑定配置如下:
    • 主机名localhost,HTTPS端口5001,使用上述SSL证书
    • 主机名authserver.mycomp.com,HTTPS端口443,使用有效SSL证书
      采用客户端凭证流程,已在Startup.cs中指定正确证书名称:builder.AddSigningCredential("CN=MyWebAPI"),.well-known/openid-configuration显示信息正确。
  4. Web API运行在同一服务器的IIS 7.5上,绑定配置:主机名webapi.mycomp.com,HTTPS端口443,使用上述SSL证书;Bearer Token认证的AuthorityURL设置为https://localhost:5001/。
  5. 可成功连接令牌端点https://authserver.mycomp.com/connect/token获取有效访问令牌(已在jwt.io验证)。
  6. 但调用Web API(https://webapi.mycomp.com)时出现异常:
    • 通过Chrome的Swagger调用:点击Execute后提示输入用户名和密码
    • 通过Postman调用:返回401未授权错误

异常日志

两种场景下,stdout日志均出现以下异常:

IDX20803: 无法从 '[PII 已隐藏。详情请查看相关文档。]' 获取配置。
System.InvalidOperationException: IDX20803: 无法从 '[PII 已隐藏。详情请查看相关文档。]' 获取配置。
---> System.IO.IOException: IDX20804: 无法从 '[PII 已隐藏。详情请查看相关文档。]' 检索文档。
---> System.Net.Http.HttpRequestException: 无法建立 SSL 连接,详见内部异常。
---> System.Security.Authentication.AuthenticationException: 根据验证程序,远程证书无效: RemoteCertificateNameMismatch
   在 System.Net.Security.SslStream.SendAuthResetSignal(ProtocolToken message, ExceptionDispatchInfo exception)
   在 System.Net.Security.SslStream.ForceAuthenticationAsync[TIOAdapter](TIOAdapter adapter, Boolean receiveFirst, Byte[] reAuthenticationData, Boolean isApm)
   在 System.Net.Http.ConnectHelper.EstablishSslConnectionAsyncCore(Boolean async, Stream stream, SslClientAuthenticationOptions sslOptions, CancellationToken cancellationToken)

排查与解决方案

错误核心是RemoteCertificateNameMismatch(SSL证书名称不匹配),结合你的配置,从以下几个方向排查:

1. 证书类型不兼容

你生成的是CodeSigningCert(代码签名)类型证书,但SSL/TLS服务器连接需要的是服务器身份验证用途的证书。代码签名证书的增强型密钥用法(EKU)不包含服务器身份验证,即使名称匹配,也会被SSL验证流程拒绝。

解决方法:重新生成同时支持服务器身份验证和代码签名的证书,修改PowerShell命令如下:

New-SelfsignedCertificate -KeyExportPolicy Exportable -DnsName localhost, webapi.mycomp.com, authserver.mycomp.com -Subject "CN=MyWebAPI" -KeySpec Signature -KeyAlgorithm RSA -KeyLength 2048 -HashAlgorithm SHA256 -CertStoreLocation "cert:\LocalMachine\My" -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.1,1.3.6.1.5.5.7.3.3")

其中1.3.6.1.5.5.7.3.1对应服务器身份验证,1.3.6.1.5.5.7.3.3对应代码签名,确保证书同时满足两种场景需求。

2. Authority URL配置不合理

Web API当前的Authority指向https://localhost:5001/,但IdentityServer已经有authserver.mycomp.com:443的绑定(使用有效SSL证书),直接使用这个公网可访问的地址更稳妥:

  • 修改Web API的Startup.cs中Bearer认证配置,将Authority改为https://authserver.mycomp.com/
  • 这样Web API请求配置文档时会使用已验证的有效证书,避免localhost证书的验证问题

3. 证书绑定与权限验证

  • 确认IIS中localhost:5001站点绑定的证书是你生成的目标证书:打开IIS管理器,找到站点->绑定->编辑HTTPS绑定,检查证书下拉框选中的是否为CN=MyWebAPI
  • 检查证书私钥权限:打开MMC证书管理单元,找到「本地计算机/个人」中的证书,右键->「所有任务」->「管理私钥」,添加Web API和IdentityServer应用程序池的身份(如IIS AppPool\YourAppPoolName),赋予读取权限

4. 证书SAN验证

确认导入生产服务器的证书确实包含localhost作为主题备用名称(SAN):

  • 打开MMC证书管理单元,找到证书->右键->「属性」->「详细信息」->「主题备用名称」,检查是否存在DNS Name=localhost

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 23:35:59