IIS Express - 让SSL工作

时间:2011-04-02 05:07:45

标签: asp.net-mvc visual-studio ssl iis-express

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

我根据谷歌搜索采取了以下步骤:

1)通过在VS2010命令行上执行以下命令,找到我的IIS Express Server自签名证书的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)通过为端口443和https协议添加绑定,修改了IIS Express的application.config文件。该文件的网站部分最终看起来像这样:

        <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的任何操作都会导致“服务器拒绝连接”错误。

我做错了什么?

5 个答案:

答案 0 :(得分:75)

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

这对我有用,而且没有引人入胜,自签名证书是自动的。

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

答案 1 :(得分:6)

我偶然发现了答案。

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

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

答案 2 :(得分:3)

如果您已按照jbtule的步骤操作且SSL仍无法正常工作,请确保您的端口采用:443XX格式。

Visual Studio自动为我启用SSL的第一个项目执行此操作,但任何后续项目似乎都有随机SSL端口。将其更改为Project > Web用户界面下的上述443结构,可以帮助我。

答案 3 :(得分:0)

我只想添加可以帮助我解决同一问题的解决方案。

VS显示的SSL URL为https://[an IP, not localhost]:44367

URL是保留的,我发现 netsh http show urlacl

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

答案 4 :(得分:0)

我最近在VS 2019和IIS Epress中遇到了一个非常相似的问题。我试图将http更改为https,以便可以使用ADFS。 (消息:此站点无法访问,本地主机不允许连接。)

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