我无法让 IIS Express 接受我正在开发的 VS2010 MVC3 项目的安全连接。我可以让它接受端口 80 上的不安全连接,但端口 443 上不安全。
根据谷歌搜索,我采取了以下步骤:
1) 通过在 VS2010 命令行上执行以下命令找到我的 IIS Express 服务器自签名证书的 SHA1 指纹:
certmgr.exe /c /s /r localMachine MY
结果是 9B088F80 A4FC3141 28F62890 70BA1FC4 49FDD009。后来我才知道,使用指纹时需要删除空格。
2)通过在提升的命令行提示符下执行以下命令删除了链接到端口 443 的任何证书:
netsh http delete sslcert ipport=0.0.0.0:443
3) 通过在 VS2010 工具菜单中运行 Create GUID 生成一个新的 GUID。就我而言,我得到了 B0421A5B-FF61-47CE-892D-11AA3A9C7D2A。
4) 通过在提升的命令行提示符下执行以下命令,将自签名证书安装到端口 443:
netsh http add sslcert ipport=0.0.0.0:443 certhash=9B088F80A4FC314128F6289070BA1FC449FDD009 appid={B0421A5B-FF61-47CE-892D-11AA3A9C7D2A}
5) 通过从提升的命令行提示符运行以下命令来修改 ACL:
netsh http add urlacl url=https://localhost:443/ user=everyone
6) 修改 IIS Express 的 application.config 文件,增加端口 443 和 https 协议的绑定。该文件的站点部分最终如下所示:
<sites>
<site name="Development Web Site" id="1" serverAutoStart="true">
<application path="/">
<virtualDirectory path="/" physicalPath="%IIS_BIN%\AppServer\empty_wwwroot" />
</application>
<bindings>
<binding protocol="https" bindingInformation="*:443:localhost" />
<binding protocol="http" bindingInformation="*:80:localhost" />
</bindings>
</site>
<siteDefaults>
<logFile logFormat="W3C" directory="%IIS_USER_HOME%\Logs" />
<traceFailedRequestsLogging directory="%IIS_USER_HOME%\TraceLogFiles" enabled="true" maxLogFileSizeKB="1024" />
</siteDefaults>
<applicationDefaults applicationPool="IISExpressAppPool" />
<virtualDirectoryDefaults allowSubDirConfig="true" />
</sites>
7) 通过在提升的命令行提示符处执行以下命令重新启动 http 服务:
net stop http
net start http
8) 将我的 MVC 项目的属性页面的 Web 选项卡上的项目 URL 更改为以下内容:
http://localhost/
在我进行此更改后,保存项目属性页触发了服务器的重新配置。
当我从 VS2010 中启动 MVC 应用程序时,它正确地绑定回 http://localhost(在端口 80 上,默认值;我没有包括让 IIS Express 在端口 80 上处理不安全/正常连接的所有步骤,但它们'本质上是第 5 步到第 7 步,但侧重于 http 和端口 80,而不是 https 和端口 443)。
但是,尝试转换到任何需要 https 的操作都会导致“服务器拒绝连接”错误。
我究竟做错了什么?
将项目设置为使用 IISExpress 后,在解决方案资源管理器中选择项目时按 F4
以调出属性并在属性集 SSL Enable
中设置 true
并在 SSL URL
下将 URL 设置为您想要用于 SSL 的端口(在您的情况下为 443)。
这对我有用,无需深入了解,并且自签名证书是自动的。
要默认在该 URL 上运行项目,您可以右键单击项目,选择属性,然后选择 Web 并将项目 URL 替换为 https://localhost:443
如果您按照 jbtule 的步骤操作,但 SSL 仍然无法正常工作,请确保您的端口采用 :443XX
格式。
Visual Studio 为我启用 SSL 的第一个项目自动执行此操作,但任何后续项目似乎都有随机 SSL 端口。将其更改为 Project > Web
UI 下的上述 443 结构使其启动并为我工作。
我偶然发现了答案。
在第 6 步中,我修改了错误的 IIS Express application.config 文件。事实证明,在应用程序的主目录(例如,C:\Program Files (x86)\IIS Express\AppServer
,在我的系统上)中有一个“主”配置文件,这是我修改的那个。
第二个要修改的正确文件是用户数据区域中的那个(例如,C:\Users\Mark.ARCABAMA\Documents\IISExpress\config
,在我的系统上)。
我最近在 VS 2019 和 IIS Epress 上遇到了一个非常相似的问题。我尝试将 http 更改为 https,以便可以使用 ADFS。 (消息:此站点无法访问 localhost 不允许连接)。
经过更多研究,我尝试将“需要 SSL”属性从 true 切换为 false,然后再切换回 true。这触发了对 applicationhost.config 文件 (... Vs \ ProjectName \ config \ applicationhost.config) 的更新,该文件创建了一个新的 SSL 绑定,并为 https 协议提供了一个新的端口号。因此,我使用建议的新端口修改了所有链接(在项目的 Web 属性、配置文件和 ADFS 配置中)并且它可以工作。结论,同一个站点的http端口没有必要和https一样。
我只想添加帮助我解决相同问题的解决方案。
VS 显示的 SSL URL 是 https://[an IP, not localhost]:44367
该网址已保留,我在 netsh http show urlacl
中找到了该网址
然后我运行 netsh http delete urlacl https://[an IP, not localhost]:44367
,重新启动 VS,通过将 SSL 设置为 false 来关闭 SSL,然后再次打开。这更正了 SSL URL。
https://localhost:44300/
。我以管理员netsh http show sslcert ipport=0.0.0.0:44300
的身份运行,我的机器就是这种情况。