IIS Express - 让SSL工作

60 asp.net-mvc ssl visual-studio iis-express

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

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

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

certmgr.exe /c /s /r localMachine MY
Run Code Online (Sandbox Code Playgroud)

结果是9B088F80 A4FC3141 28F62890 70BA1FC4 49FDD009.后来我才知道我需要在使用指纹时删除空格.

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

netsh http delete sslcert ipport=0.0.0.0:443
Run Code Online (Sandbox Code Playgroud)

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}
Run Code Online (Sandbox Code Playgroud)

5)通过从提升的命令行提示符运行以下命令来修改ACL:

netsh http add urlacl url=https://localhost:443/ user=everyone
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

7)通过在提升的命令行提示符下执行以下命令重新启动http服务:

net stop http
net start http
Run Code Online (Sandbox Code Playgroud)

8)将我的MVC项目属性页面的Web选项卡上的项目URL更改为以下内容:

http://localhost/
Run Code Online (Sandbox Code Playgroud)

在进行此更改后,保存项目属性页触发了服务器的重新配置.

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

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

我究竟做错了什么?

jbt*_*ule 75

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

这对我来说无需经验,自签名证书是自动的.

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

  • @twomm,我认为你无法更改端口号,因为IIS Express开发TLS证书绑定到`https:// localhost:44300 /`.我作为管理员运行`netsh http show sslcert ipport = 0.0.0.0:44300`,这就是我的机器中的情况. (5认同)
  • 为清楚起见,这个简单的答案是否必须在IIS Express上启用SSL?即Mark不需要命令行工作. (4认同)
  • 哇!这肯定比我在搜索中发现的要容易得多.我得试一试. (2认同)
  • 在VS 2012中,您可以使用在"SSL URL"属性下分配的URL,在我的情况下,它是https:// localhost:44300 (2认同)

shl*_*osh 8

如果您遵循了jbtule的步骤并且SSL仍然无法正常工作,请确保端口的格式为:443XX

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

  • 这个荒谬的魔法格式:“443XX”就是我需要的答案。谢谢。 (3认同)
  • @AshrafSabry 44300 和 44399 之间的 SSL 端口限制记录在此处:https://learn.microsoft.com/en-us/iis/extensions/using-iis-express/handling-url-binding-failures-in-iis- Express#使用自定义 ssl 端口 (2认同)

小智 6

我偶然发现了答案.

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

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