IIS Express ——让 SSL 工作

我无法让 IISExpress 接受我正在开发的 VS2010MVC3项目的安全连接。我可以让它在端口80上接受不安全的连接,但在端口443上不安全。

基于谷歌搜索,我采取了以下步骤:

1)通过在 VS2010命令行上执行以下命令,找到我的 IIS Express Server 自签名证书的 SHA1指纹:

certmgr.exe /c /s /r localMachine MY

结果是9B088F80 A4FC314128F6289070BA1FC449FDD009。后来我才知道,使用拇指指纹时需要删除空格。

2)通过在高级命令行提示符下执行以下命令,删除链接到端口443的任何证书:

netsh http delete sslcert ipport=0.0.0.0:443

3)通过运行 VS2010工具菜单上的创建 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) Modified the application.config file for IIS Express by adding a binding for port 443 and the https protocol. The sites section for the file ended up looking like this:

        <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 项目属性页面的网页上的项目 URL 更改为以下内容:

http://localhost/

保存项目属性页触发了服务器的重新配置。

当我在 VS2010中启动 MVC 应用程序时,它正确地绑定到 http://localhost(在端口80上,默认的; 我没有包括让 IIS Express 在端口80上使用不安全/正常连接的所有步骤,但它们基本上是步骤5到7,但关注 http 和端口80,而不是 https 和端口443)。

但是,尝试转换到任何需要 https 的操作会导致“服务器拒绝连接”错误。

我做错了什么?

66145 次浏览

我偶然发现了答案。

在步骤6中,我修改了错误的 IIS Express application.config 文件。原来在应用程序的主目录(例如,系统上的 C:\Program Files (x86)\IIS Express\AppServer)中有一个“ master”配置文件,这是我修改过的。

第二个和 修改正确的文件是用户数据区域中的一个(例如,C:\Users\Mark.ARCABAMA\Documents\IISExpress\config,在我的系统上)。

设置好项目使用 IISExpress 之后,在解决方案资源管理器上选择项目时按 F4,以显示属性,在属性集 SSL Enable中设置 true,在 SSL URL下设置 SSL 端口的 URL (在您的例子中为443)。

这对我来说没有去引擎盖和自我签名证书是自动工作。

若要在默认情况下在该 URL 上运行项目,可以右键单击该项目,选择属性,然后选择 Web,并将 ProjectUrl 替换为 https://localhost:443

如果您遵循了 jbtule 的步骤,而 SSL 仍然无法工作,请确保您的端口采用 :443XX格式。

Visual Studio did this automatically for the first project I enabled SSL on, but any subsequent projects seem to have random SSL ports. Changing it to the above 443 structure under the Project > Web UI got it up and working for me.

我只是想添加一个解决方案,帮助我解决同样的问题。

VS showed an SSL URL that was https://[an IP, not localhost]:44367

The url was reserved, which I found with netsh http show urlacl

然后运行 netsh http delete urlacl https://[an IP, not localhost]:44367,重新启动 VS,通过将 SSL 设置为 false 关闭 SSL,然后再次打开。这更正了 SSL URL。

我最近在 VS 2019和 IIS Epress 上遇到了一个非常相似的问题。我尝试将 http 更改为 https,以便使用 ADFS。(Msg: 这个站点是不可到达的本地主机不允许连接)。

经过一些研究之后,我尝试将“ RequirSSL”属性从 true 切换为 false,然后再切换回 true。这触发了对 applicationhost.config 文件的更新(... 。Vs ProjectName config applicationhost.config) ,它为 https 协议创建了一个带有新端口号的新 SSL 绑定。因此,我修改了所有的链接与建议的新端口(在项目的 web 属性,配置文件和 ADFS 配置)和它的工作。结论,对于同一个站点,http 端口不必与 https 相同。