确定网站协议

时间:2010-08-31 09:26:58

标签: c# iis-6 c#-2.0 iis-5

我正在使用IIS 6。 我需要确定某个网站是在http或https下运行。

我尝试使用'DirectoryEntry'从以下位置提取所有属性:IIS:// localhost / W3SVC / 1(1是此示例中的站点ID)

以下是结果。 如果有人知道以编程方式确定IIS6协议类型的任何其他方式,请使用“DirectoryEntry” - 请告诉我

 AccessFlags = 513 
 AppIsolated = 2
 KeyType = IIsWebVirtualDir
 Path = c:\inetpub\wwwroot
 AppRoot = /LM/W3SVC/1/ROOT 
 AppFriendlyName = Default Application 
 DefaultDoc = Default.htm,Default.asp,index.htm,iisstart.asp
 AnonymousPasswordSync = True
 DirBrowseFlags = 1073741886 
 CacheISAPI = True 
 CGITimeout = 300 
 AuthFlags = 1 
 ContentIndexed = True
 AspLogErrorRequests = True
 AspScriptFileCacheSize = 250
 AspScriptEngineCacheMax = 125
 AspExceptionCatchEnable = True
 AspTrackThreadingModel = False
 AspAllowOutOfProcComponents = True
 AspEnableAspHtmlFallback = False
 AspEnableChunkedEncoding = True
 AspEnableTypelibCache = True
 AspErrorsToNTLog = False
 AspProcessorThreadMax = 25
 AspRequestQueueMax = 3000
 AspMaxDiskTemplateCacheFiles = 1000
 AspAllowSessionState = True
 AspBufferingOn = True
 AspEnableParentPaths = True
 AspSessionTimeout = 20
 AspQueueTimeout = -1 
 AspCodepage = 0 
 AspScriptTimeout = 90 
 AspScriptErrorSentToBrowser = True 
 AppAllowDebugging = False
 AppAllowClientDebug = False
 AspKeepSessionIDSecure = False
 AspEnableApplicationRestart = True
 AspQueueConnectionTestTime = 3
 AspSessionMax = -1 AspLCID = 2048
 AnonymousUserName = IUSR_MASTER
 AspScriptLanguage = VBScript
 AspScriptErrorMessage = An error occurred on the server when processing the URL.  Please  contact the system administrator. 
 AnonymousUserPass = wl60A8PT[Cp@hE
 AspDiskTemplateCacheDirectory = %windir%\system32\inetsrv\ASP Compiled Templates  
 HttpCustomHeaders = X-Powered-By: ASP.NET 
 KeyType = IIsCertMapper

其中任何一个都可以告诉我协议是Http还是Https? 如果没有......有人知道如何在IIS 6上使用C#进行检查吗?

6 个答案:

答案 0 :(得分:2)

当然:IIS AccessSSLFlags属性包含这些信息。

如果设置了AccessSSL(十六进制0x00000008)标志,则表示如果没有http可用,则需要SSL -ie https-。

像往常一样,您必须在IIS WebServer根目录上检查此属性,因为IIS逻辑基于虚拟目录。

路径 - > IIS://本地主机/ W3SVC / 1 /根

答案 1 :(得分:1)

看起来你需要使用IIsWebServer对象的SecureBindings属性。

我在自己的Windows Server 2003上使用SSL和非SSL站点测试了以下代码段。

DirectoryEntry di = new DirectoryEntry("IIS://prodweb1/W3SVC/1");
PropertyValueCollection sslCertHashProperty = di.Properties["SSLCertHash"];
if (sslCertHashProperty.Count > 0)
{
  Console.WriteLine("Site has associated SSL Certificate.");
}
PropertyValueCollection secureBindingsProperty = di.Properties["SecureBindings"];
if (secureBindingsProperty.Count > 0)
{
  Console.WriteLine("Site has at least one SSL (https) binding.");
}
PropertyValueCollection serverBindingsProperty = di.Properties["ServerBindings"];
if (serverBindingsProperty.Count > 0)
{
  Console.WriteLine("Site has at least one non-SSL (http) binding.");
}

答案 2 :(得分:0)

您可以使用元数据库来判断。我不知道为什么它不在你输出中,但应该有一个属性ieSecSec = true表示ssl是必需的。如果ssl是可选的,我认为不会设置此属性。

答案 3 :(得分:-1)

如果您可以等到收到请求,则可以使用Request.IsSecureConnection

答案 4 :(得分:-1)

不熟悉C#,但我相信你可以在你的应用程序中加载web.config信息。在那里,您应该能够查看是否存在指示在服务器上配置了SSL的特定安全密钥。

Configuration.AppSettings(<key>)

答案 5 :(得分:-1)

您可以检查请求对象。 如果正在使用SSL:

HttpContext.Current.Request.ServerVariables["HTTPS"].ToLower() == "on"