我正在使用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#进行检查吗?
答案 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"