IIS Express – 使SSL工作

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

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

1)通过在VS2010命令行中执行以下操作,find我的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工具菜单中的创buildGUID生成一个新的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/ 

保存项目属性页面后,我做了这个改变,触发了服务器的重新configuration。

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

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

我究竟做错了什么?

将项目设置为使用IISExpress后,在解决scheme资源pipe理器上select项目时按F4以启动属性,并在属性设置SSL Enable设置为true并在SSL URL设置带有端口的URL(443情况下)你想要的SSL。

这对我来说没有任何问题,自签名证书是自动的。

要默认在该URL上运行项目,可以右键单击该项目,select属性,然后selectWeb,然后使用https:// localhost:443replaceProject Url

我偶然发现了答案。

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

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

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

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