kdmurray Asked: 2009-05-21 13:29:31 +0800 CST2009-05-21 13:29:31 +0800 CST 2009-05-21 13:29:31 +0800 CST 在 IIS 6.0 中优雅地实施 SSL 772 我有一个在 IIS 下运行的网站,它应用了 SSL 证书。我们希望对网站强制使用 HTTPS,这可以通过选中“需要安全通道”框轻松完成,但这会立即破坏人们通过 HTTP 连接的能力(按设计)。 我想做的是找到一种方法,如果他们输入错误的内容(或从旧书签连接),则自动将人们从 HTTP -> HTTPS 重定向。 有没有办法做到这一点,而无需在 IIS 中创建第二个网站? iis iis-6 ssl 3 个回答 Voted Christopher_G_Lewis 2009-05-21T14:04:56+08:002009-05-21T14:04:56+08:00 我在StackOverflow上发布了这个 如果使用“需要安全通道”设置配置服务器/站点/vdir,则服务器的响应将是“403.4 禁止:需要 SSL 才能查看此资源”。错误或“403.5 Forbidden: SSL 128 is required to view this resource.”。 您实际上可以自定义 403.4 或 403.5 错误以重定向回 HTTPS。在您的站点下创建一个没有 SSL 要求的 VDIR (**这很重要) - 我使用“CustomError”。在此目录中创建一个名为 403_4_Error.asp 的 ASP 文件,其中包含以下内容: <%@ LANGUAGE="VBScript" %> <% if Request.ServerVariables("HTTPS") <> "on" then sServer = Request.ServerVariables("SERVER_NAME") sScript = Request.ServerVariables("SCRIPT_NAME") sQuery = Request.ServerVariables("QUERY_STRING") Response.Write("https://" & sServer & sScript & "?" & sQuery) end if %> 编辑 server/site/vdir 的 403.4/403.5 的自定义错误属性,并将 MessageType 设置为 URL,将 URL 设置为“/CustomError/403_4_Error.asp”。 请注意,使用了 ASP,您可以轻松使用 ASP.net 或任何其他脚本语言。 Best Answer Jimmie R. Houts 2009-05-21T13:34:34+08:002009-05-21T13:34:34+08:00 如果您需要在服务器级别执行此操作,则必须创建另一个站点并将其转发到 https 站点。 如果您可以编辑代码,则不能在服务器级别强制执行 ssl,而是可以在您的网站中通过检测 url 是否以 http: 开头并使用 https: 重定向到相同的 url 来执行此操作。 2009-06-03T09:09:00+08:002009-06-03T09:09:00+08:00 我们最终在我们的应用程序代码中这样做了;我们的页面基类及早检查它是否在 HTTP 中,并根据需要重定向到 HTTPS。这实际上取决于您对应用程序代码的信任程度:)
我在StackOverflow上发布了这个
如果使用“需要安全通道”设置配置服务器/站点/vdir,则服务器的响应将是“403.4 禁止:需要 SSL 才能查看此资源”。错误或“403.5 Forbidden: SSL 128 is required to view this resource.”。
您实际上可以自定义 403.4 或 403.5 错误以重定向回 HTTPS。在您的站点下创建一个没有 SSL 要求的 VDIR (**这很重要) - 我使用“CustomError”。在此目录中创建一个名为 403_4_Error.asp 的 ASP 文件,其中包含以下内容:
编辑 server/site/vdir 的 403.4/403.5 的自定义错误属性,并将 MessageType 设置为 URL,将 URL 设置为“/CustomError/403_4_Error.asp”。
请注意,使用了 ASP,您可以轻松使用 ASP.net 或任何其他脚本语言。
如果您需要在服务器级别执行此操作,则必须创建另一个站点并将其转发到 https 站点。
如果您可以编辑代码,则不能在服务器级别强制执行 ssl,而是可以在您的网站中通过检测 url 是否以 http: 开头并使用 https: 重定向到相同的 url 来执行此操作。
我们最终在我们的应用程序代码中这样做了;我们的页面基类及早检查它是否在 HTTP 中,并根据需要重定向到 HTTPS。这实际上取决于您对应用程序代码的信任程度:)