IIS Express -- 如何使SSL正常工作

82

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

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

1)通过在VS2010命令行上执行以下操作来查找我自己签名证书的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部分如下所示:

        <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个回答

117

当你把项目设置为使用IISExpress后,选中解决方案资源管理器中的项目,按下F4键来呼出属性,在属性中将SSL Enable设置为true,在SSL URL下设置URL和端口号(在这种情况下是443),以启用SSL。

对我来说,这个方法很有效,而且自签名证书是自动生成的。

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


2
哇!这比我在搜索中找到的要容易得多。我得试一试。 - user553671
5
为了清晰明了,这个简单的回答是否就足以在IIS Express上启用SSL?即马克的命令行工作不是必需的。 - Luke Puplett
1
在Visual Studio 2012中,我可以启用SSL,但是我无法在属性对话框中更改端口号。 - twomm
3
在VS 2012中,您可以使用“SSL URL”属性下分配的URL,在我的情况下是https://localhost:44300。 - Francisco
9
@twomm,我认为您不能更改端口号,因为IIS Express开发TLS证书绑定到https://localhost:44300/。我已以管理员身份运行netsh http show sslcert ipport =0.0.0.0:44300,在我的机器上也是如此。 - Ceco
显示剩余2条评论

27

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

Visual Studio会自动为您启用SSL的第一个项目完成此操作,但是任何后续的项目似乎都有随机的SSL端口。将其更改为上述 443 结构,位于项目 > Web UI下,可以使它对我起作用并开始有效工作。


5
这个荒谬的魔术格式:“443XX”就是我需要的答案。谢谢。 - BenPatterson1
是的,这个可以。谢谢。 但是这个数字在哪里有记录? - Ashraf Sabry
哦,微软你在想什么啊!?这对我也起作用了。 - Marc Levesque
一个神的回答... 非常感谢。 - Taha Ali
我只是来说一下...443xx端口更改是我所需要的唯一一件事,谢谢!对于任何来到这里的人,我的旧http端口是58333,当启用ssl时它无法工作。我将其更改为44311,现在它可以工作 :) - JasonWilczak
2
@AshrafSabry,44300到44399之间的SSL端口限制在此处有文档记录:https://learn.microsoft.com/en-us/iis/extensions/using-iis-express/handling-url-binding-failures-in-iis-express#using-a-custom-ssl-port - user3163495

5

我偶然发现了答案。

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

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


4

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

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


非常感谢。将项目的“SSL Enabled”属性切换为false,然后再切换为true,使其建议正确的端口号——对我来说是44319。 - CoderSteve

0

我想分享一下解决同样问题的方法。

在VS中显示了一个SSL URL,如下:https://[一个IP地址,不是localhost]:44367

我通过netsh http show urlacl命令发现该URL已被保留。

然后我运行了netsh http delete urlacl https://[一个IP地址,不是localhost]:44367命令,重新启动了VS,并将SSL设置为false,再次打开后又将其设置为true。这样就成功修复了SSL URL。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接