配置双向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或LocalMachineClientCertificateStoreName:证书存储名称,通常为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,步骤如下:
- 加载客户端证书:
// 从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();
- 创建自定义
HttpClientHandler并绑定证书:
var handler = new HttpClientHandler(); handler.ClientCertificates.Add(cert); // 仅测试环境可禁用证书验证,生产环境需保留默认验证逻辑 // handler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true;
- 通过
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
相关产品推荐
相关产品推荐

