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

配置双向SSL的SSAS通过ADOMD.NET Core连接遇403错误求助

问题场景

已配置带有IIS和双向SSL(Mutual SSL)的本地SSAS服务器,通过浏览器使用客户端证书访问https://127.0.0.1/OLAP/msmdpump.dll可正常连接,但Excel、Tableau、Power BI、SSMS等工具无法提供客户端证书完成连接。尝试基于.NET Core 7项目使用Microsoft.AnalysisServices.AdomdClient.NetCore.retail.amd64/19.55.3.1连接,代码如下:

AdomdConnection conn = new AdomdConnection("DataSource=https://127.0.0.1/OLAP/msmdpump.dll;Catalog=Analysis Services Tutorial");
conn.Open();

执行后抛出403错误:

---> System.Net.Http.HttpRequestException: Response status code does not indicate success: 403 (Forbidden).
   at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
   at Microsoft.AnalysisServices.AdomdClient.HttpStream.HttpChannelController.GetResponseMessageImpl(HttpStream owner, Object context, Task`1 pendingResponse)
   at Microsoft.AnalysisServices.AdomdClient.HttpStream.HttpChannelController.CompleteHttpClientBasedOperation(HttpStream owner, Object context, Task`1 pendingResponse)
   at Microsoft.AnalysisServices.AdomdClient.HttpStream.HttpXmlaOperation.HttpClientOperationManager.GetResponse(HttpXmlaOperation operation)
   at Microsoft.AnalysisServices.AdomdClient.HttpStream.LegacyController.HttpClientXmlaOperation.GetResponseImpl()
   at Microsoft.AnalysisServices.AdomdClient.HttpStream.HttpXmlaOperation.EnsureCanRead()
   at Microsoft.AnalysisServices.AdomdClient.HttpStream.LegacyController.LegacyXmlaOperation.EnsureCanRead()
   at Microsoft.AnalysisServices.AdomdClient.HttpStream.HttpXmlaOperation.GetResponseDataType()
   at Microsoft.AnalysisServices.AdomdClient.HttpStream.GetResponseDataType()

目前无法找到操作HttpStream/HttpClient添加客户端证书的方法,需要可行的解决思路或双向SSL与SSAS的配置示例。

解决思路与配置示例

一、通过AdomdClient扩展属性指定客户端证书

AdomdClient.NET Core版本支持通过连接字符串的扩展属性直接指定客户端证书,无需自定义HttpHandler。可添加以下参数:

  • ClientCertificateThumbprint:客户端证书的指纹(需确保证书已安装在当前用户或本地计算机的证书存储中)
  • ClientCertificateStoreLocation:证书存储位置,可选CurrentUser或LocalMachine
  • ClientCertificateStoreName:证书存储名称,通常为My(个人存储)

示例连接字符串:

string connString = @"
DataSource=https://127.0.0.1/OLAP/msmdpump.dll;
Catalog=Analysis Services Tutorial;
ClientCertificateThumbprint=ABC123DEF456GHI789JKL012MNO345PQR678STU;
ClientCertificateStoreLocation=CurrentUser;
ClientCertificateStoreName=My
";
using var conn = new AdomdConnection(connString);
conn.Open();

二、自定义HttpClientHandler注入客户端证书

如果需要更灵活的证书加载逻辑(比如从本地文件读取证书),可以通过AdomdConnectionSettings自定义HttpClientHandler,步骤如下:

  1. 加载客户端证书:
// 从PFX文件加载证书
var cert = new X509Certificate2("client-cert.pfx", "cert-password", X509KeyStorageFlags.Exportable);

// 或从证书存储加载
// var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
// store.Open(OpenFlags.ReadOnly);
// var cert = store.Certificates.Find(X509FindType.FindByThumbprint, "ABC123DEF456", false).FirstOrDefault();
// store.Close();
  1. 创建自定义HttpClientHandler并绑定证书:
var handler = new HttpClientHandler();
handler.ClientCertificates.Add(cert);
// 仅测试环境可禁用证书验证,生产环境需保留默认验证逻辑
// handler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true;
  1. 通过AdomdConnectionSettings注入Handler并建立连接:
var settings = new AdomdConnectionSettings();
settings.HttpClientHandler = handler;

using var conn = new AdomdConnection(connString, settings);
conn.Open();

三、IIS与SSAS双向SSL配置验证

确保IIS和SSAS的双向SSL配置无遗漏:

  • IIS站点SSL设置:启用要求SSL,并设置客户端证书为需要或接受(根据业务需求选择)
  • 验证IIS绑定的服务器证书根CA已被客户端信任,同时客户端证书的根CA已被IIS信任
  • SSAS服务器属性配置:设置HTTP Authentication为Basic或Negotiate,并确保IIS的客户端证书映射规则已将证书关联到有效的Windows用户(若使用Windows身份验证)

四、工具端临时替代方案

如果Excel等工具无法直接提供客户端证书,可尝试:

  • 将客户端证书导入当前用户的个人证书存储,部分工具会自动读取存储中的证书(需实际测试验证)
  • 搭建本地代理程序,由代理自动附加客户端证书转发请求,工具将请求指向代理即可完成双向SSL验证

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 05:55:15