【问题标题】:This site can’t provide a secure connection此站点无法提供安全连接
【发布时间】:2017-09-06 09:53:19
【问题描述】:

当我在 web.config 中添加 URL 重写代码然后将其发布到 azure 时。即使我尝试使用 http 访问网站,它也会自动重定向到 https。

<rewrite>
  <rules>
    <rule name="Redirect to https">
      <match url="(.*)"/>
      <conditions>
        <add input="{HTTPS}" pattern="Off"/>
      </conditions>
      <action type="Redirect" url="https://{HTTP_HOST}/{R:1}"/>
    </rule>
  </rules>
</rewrite>

但是当我在本地机器上运行相同的代码时,会出现以下错误。

此网站无法提供安全连接

当我在本地机器上运行上述代码时,如何解决上述错误?

【问题讨论】:

  • @raj'sCubicle 非常感谢。这是一个简单得多的解决方案。
  • 帮助!我遵循了这些指示,现在我的项目将无法在本地计算机上运行。我什至退出了更改,但 web.config 似乎已被缓存或其他什么...我该如何退出?

标签: asp.net security azure url-rewriting web-config


【解决方案1】:

您必须将 Visual Studio Server 配置为与 HTTPS 一起使用。 详情请浏览此链接:
HTTPS with Visual Studio's built-in ASP.NET Development Server

【讨论】:

  • IIS Express 将允许使用 HTTPS,但它会在不同的端口上。这仍然不能完全解决问题。由于重定向发生在同一个端口,它将无法连接。
  • 即使我启用了 SSL 属性,我仍然遇到同样的错误。
【解决方案2】:

我个人所做的就是将重写配置放入 Web.Release.config 正是因为让它在本地工作有点繁琐。

问题是 IIS Express 会在不同的端口上暴露 HTTP 和 HTTPS,所以如果你从 http://localhost:1234 重定向到 https://localhost:1234,它根本就行不通,因为 IIS Express 在类似 https://localhost:44300 的东西上暴露了 HTTPS .

你可以在 IIS Express 上启用 SSL/TLS(你应该这样做),但我会只为发布模式保留重写规则。

这是一个示例 Web.Release.config 文件:

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
  </system.web>
  <system.webServer>
    <rewrite xdt:Transform="Insert">
      <rules>
        <!-- Redirects users to HTTPS if they try to access with HTTP -->
        <rule
          name="Force HTTPS"
          stopProcessing="true">
          <match url="(.*)"/>
          <conditions>
            <add input="{HTTPS}" pattern="^OFF$" ignoreCase="true"/>
          </conditions>
          <action
            type="Redirect"
            url="https://{HTTP_HOST}/{R:1}"
            redirectType="Permanent"/>
        </rule>
      </rules>
      <outboundRules>
        <!-- Enforces HTTPS for browsers with HSTS -->
        <!-- As per official spec only sent when users access with HTTPS -->
        <rule
          xdt:Transform="Insert"
          name="Add Strict-Transport-Security when HTTPS"
          enabled="true">
          <match serverVariable="RESPONSE_Strict_Transport_Security"
              pattern=".*" />
          <conditions>
            <add input="{HTTPS}" pattern="on" ignoreCase="true" />
          </conditions>
          <action type="Rewrite" value="max-age=31536000" />
        </rule>
      </outboundRules>
    </rewrite>
  </system.webServer>
</configuration>

请注意,我还在这里添加了 HSTS。它以发布模式将&lt;rewrite&gt; 元素插入Web.config。 &lt;system.webServer&gt; 元素已经存在于 Web.config 中,否则我将插入它。

【讨论】:

  • 感谢 Juunas,上面的代码在这一行显示了一些错误 。因为重写元素不允许转换属性。
  • 它对我也有类似的警告,但仍然有效。不知道为什么会这样。将它们放在哪个元素上并不重要,XML 转换系统不在乎。
  • 它工作正常,但我创建了两个配置文件是 Web.Dev.config 和 Web.Prod.config。我只在 Web.Prod.config 文件中添加了重写代码,然后将其发布到 azure 中,它工作正常。但是当我将带有 Web.Dev.config 文件的应用程序发布到天蓝色时,即使我没有在 Web.Dev.config 文件中添加重写代码,它仍然会重定向到 https。
  • 好吧,这个配置发出的重定向是永久性的(HTTP 301)。这意味着您的浏览器会记住该规则。如果我现在不希望用户通过 HTTP 访问该站点,我以后也不希望他们这样做。
  • 从项目属性更改运行 iis express 的端口对我有用。
【解决方案3】:

我用旧版 Chrome 网络浏览器解决了这个问题。

这是list of older chrome versions,您可以在其中下载和安装它。

60.0.3112.90 - Ubuntu 是适合我的版本。

也许它比新版本慢一点,但我发现它非常适合生产(:

【讨论】:

    【解决方案4】:

    最后,我发现有一个 javascript 代码将网站从 http 重定向到 https。因此,如果有其他代码负责该问题,请尝试探索您的环境。希望这能有所帮助。谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-25
      • 2021-10-22
      • 2017-03-18
      • 1970-01-01
      • 1970-01-01
      • 2022-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多