.NET 3.1 WebApi部署IIS后自签SSL证书仅主站生效问题排查
以下是导致WebApi访问提示不安全的常见原因:
WebApi未配置HTTPS绑定:你仅为默认网站配置了SSL证书绑定,但如果WebApi是独立站点,或是默认网站下拥有独立主机头/端口的子应用,必须单独给该WebApi对应的站点配置HTTPS绑定,指定你创建的自签名证书。IIS的绑定是站点级别的,子应用仅在继承父站点绑定且访问路径完全匹配时才会生效,若WebApi有独立访问规则,就需要单独设置绑定。
证书主机名不匹配:创建自签名证书时如果指定了特定主机名(如
localhost、服务器域名),但你访问WebApi时使用的IP/域名和证书中的主机名不一致,浏览器就会判定证书无效,提示不安全。比如证书是为localhost生成的,但你用服务器公网IP访问WebApi,就会触发主机名不匹配警告。证书未被客户端信任:默认网站访问时可能已经手动信任了该自签名证书,但WebApi的访问场景(如不同端口、新的域名)导致浏览器未识别到已信任的证书,或者客户端机器的根证书存储中未安装该证书。需要将自签名证书导入到客户端的「受信任的根证书颁发机构」存储内。
WebApi未强制启用HTTPS:若WebApi的
web.config中未配置强制HTTPS规则,比如未设置<system.web><authentication mode="Windows"><forms requireSSL="true" /></authentication></system.web>,或缺少URL重写规则将HTTP请求重定向到HTTPS,可能导致访问时仍走HTTP协议,或出现混合内容警告(若WebApi内引用了HTTP资源)。证书私钥权限不足:虽然你添加了
IIS_IUSRS权限,但应用池的运行身份可能没有读取证书私钥的权限。可右键证书→「所有任务」→「管理私钥」,添加对应应用池的身份(格式为IIS AppPool\[你的应用池名称]),并赋予「读取」权限。
内容的提问来源于stack exchange,提问作者Tom

