【问题标题】:IIS Express -- Getting SSL to WorkIIS Express——让 SSL 发挥作用
【发布时间】:2011-04-02 05:07:44
【问题描述】:

我无法让 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 工具菜单中运行创建 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 的任何操作都会导致“服务器拒绝连接”错误。

我做错了什么?

【问题讨论】:

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


    【解决方案1】:

    将项目设置为使用 IISExpress 后,在解决方案资源管理器中选择项目时按 F4 以调出属性,并在属性集 SSL Enable 设置 trueSSL URL 下设置您希望用于 SSL 的带有端口(在您的情况下为 443)的 URL。

    这对我有用,无需深入了解,而且自签名证书是自动的。

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

    【讨论】:

    • 哇!这肯定比我在搜索中发现的要容易得多。我得试试看。
    • 为了清楚起见,这个简单的答案是在 IIS Express 上启用 SSL 所要做的所有事情吗?即不需要 Mark 的命令行工作。
    • 是的,只需简单回答即可。
    • 在 VS 2012 中,您可以使用在“SSL URL”属性下分配的 URL,在我的例子中是 localhost:44300
    • @twomm,我认为您不能更改端口号,因为 IIS Express 开发 TLS 证书绑定到 https://localhost:44300/。我以管理员 netsh http show sslcert ipport=0.0.0.0:44300 的身份运行,我的机器就是这种情况。
    【解决方案2】:

    如果您按照 jbtule 的步骤操作,但 SSL 仍然无法正常工作,请确保您的端口格式为 :443XX

    Visual Studio 自动为我启用 SSL 的第一个项目执行此操作,但任何后续项目似乎都有随机 SSL 端口。将其更改为 Project &gt; Web UI 下的上述 443 结构使其启动并为我工作。

    【讨论】:

    • 这种荒谬的魔法格式:“443XX”是我需要的答案。谢谢。
    • 是的,这行得通。谢谢 但是这个数字记录在哪里?
    • 天啊微软,你在想什么!?这对我也有用。
    • 上帝回复...谢谢 LOTTT。
    • 只是来这里说这个... 443xx 端口更改是我需要的一件事,谢谢!对于任何来这里的人,我的旧 http 端口都像 58333,但在启用 ssl 时它无法正常工作。我将它切换到 44311,现在它可以工作了 :)
    【解决方案3】:

    我偶然发现了答案。

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

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

      • 非常感谢。将项目的“启用 SSL”属性切换为 false,然后返回 true,使其建议正确的端口号 - 对我来说是 44319。
      【解决方案5】:

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

      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。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多