AWS EC2上IIS部署的ASP.NET Core无法连接DocumentDB(调试模式正常)
ASP.NET Core on IIS无法连接AWS DocumentDB的排查方案
1. 调试模式可连接但IIS部署失败的核心原因
调试模式下应用以当前登录Windows用户身份运行:该用户拥有完整网络访问权限,且证书存储中已加载AWS DocumentDB所需的根CA证书,同时具备证书读取权限。而IIS默认使用ApplicationPoolIdentity(虚拟本地受限账户)运行,这类账户在证书访问权限、网络出站权限上与登录用户存在本质差异——尤其是DocumentDB强制要求SSL连接,证书权限不足会直接引发连接超时。
2. 需要检查的IIS/Windows网络相关配置
- 应用池用户的证书访问权限:DocumentDB依赖Amazon根CA完成SSL验证,需确保应用池用户能读取本地计算机存储中的该证书
- Windows防火墙出站规则:即使EC2与DocumentDB在同一VPC,Windows本地防火墙可能限制
w3wp.exe(IIS工作进程)访问DocumentDB默认端口27017 - 应用池的「加载用户配置文件」选项:默认
ApplicationPoolIdentity不加载用户配置文件,会导致证书、网络配置无法正常读取 - IIS代理设置:检查应用是否继承了IIS的出站代理配置,调试时使用的是登录用户的网络设置,IIS可能存在不同的代理规则
3. SSL/TLS与证书验证的关联
这是最常见的故障原因:
DocumentDB强制要求SSL连接,调试时登录用户的证书存储已包含Amazon根CA且有读取权限,但IIS应用池用户默认没有访问该证书的权限,导致SSL握手失败,最终表现为连接超时。
具体排查步骤
- 验证连接字符串的SSL参数:确保连接字符串包含
ssl=true&sslCAFile=<证书绝对路径>,避免使用相对路径(IIS进程的工作目录与调试时不同) - 授予应用池用户证书读取权限:
- 打开
mmc,添加「证书」管理单元(选择「本地计算机」) - 定位到「受信任的根证书颁发机构」→「证书」→「Amazon Root CA 1」
- 右键证书→「所有任务」→「管理权限」,添加应用池用户(格式为
IIS AppPool\<你的应用池名称>),授予「读取」权限
- 打开
- 开启应用池的用户配置文件加载:
- 打开IIS管理器,找到目标应用池→「高级设置」
- 将「加载用户配置文件」设置为
True
- 测试应用池用户的连接能力:
使用runas命令以应用池用户身份执行MongoDB客户端测试:
若此命令连接失败,可直接定位到权限或证书问题;若成功,则需排查应用代码中的配置runas /user:"IIS AppPool\<应用池名称>" "mongo <DocumentDB端点>:27017/<数据库名> --ssl --sslCAFile <证书绝对路径> --username <用户名> --password <密码>" - 检查Windows防火墙出站规则:
打开Windows Defender防火墙高级设置,确认存在允许w3wp.exe访问27017端口的出站规则,若没有则添加新规则 - 查看DocumentDB集群日志:
在AWS控制台打开DocumentDB集群的日志,查看是否有SSL握手失败的记录,进一步确认故障点
内容的提问来源于stack exchange,提问作者Suneel Kumar
相关产品推荐
相关产品推荐

