2011-04-13 62 views
0

我必須做一個IIS模塊,阻止訪問沒有來自某個CA的證書的用戶。 我做了一個CTL-證書信任列表。我使用netsh http add sslcert ip ....測試了它,它工作正常。 現在我所要做的就是在c#類庫中實現netsh的調用。 我tryed使用方法:我可以從C#類庫執行一個dos命令嗎?

 Process pnet = new Process(); 
     pnet.StartInfo.FileName = "netsh"; 
     pnet.StartInfo.Arguments = "http delete sslcert ipport=0.0.0.0:443"; 
     pnet.StartInfo.UseShellExecute = false; 
     pnet.StartInfo.CreateNoWindow = true; 
     pnet.Start(); 
     pnet.Close(); 

這工作在C#控制檯應用程序,但在C#庫類,不啓動。

 namespace IISproject 
     { 
     public class MyModule : IHttpModule 
     { 
     #region IHttpModule Members 
     public void Dispose() 
     { 
     } 
     public void Init(HttpApplication context) 
     { 
     context.PreRequestHandlerExecute += new EventHandler(OnPreRequestHandlerExecute); 
    } 
    #endregion 
    public void OnPreRequestHandlerExecute(Object source, EventArgs e) 
    { 
     HttpApplication app = (HttpApplication)source; 
     HttpRequest request = app.Context.Request; 
     if (!String.IsNullOrEmpty(request.Headers["Referer"])) 
     { 
      throw new HttpException(403, 
                "Uh-uh!"); 
     } 
     Process pnet = new Process(); 
     pnet.StartInfo.FileName = "netsh"; 
     pnet.StartInfo.Arguments = "http delete sslcert ipport=0.0.0.0:443"; 
     pnet.StartInfo.UseShellExecute = false; 
     pnet.StartInfo.CreateNoWindow = true; 
     pnet.Start(); 
     pnet.Close(); 
    } 
} 

我到底做錯了什麼?10倍

+0

「不啓動」:你得到任何錯誤? (請參閱eventlog也許?)。請注意,控制檯應用程序將運行在您的帳戶下,而aspnet運行在低特權帳戶下 - 這可能是您的問題。 – 2011-04-13 09:08:19

回答

1

在這些種在我的書的情況下,缺乏細節首先懷疑,是某種路徑問題。嘗試完全限定命令路徑,看看它是否更好。

pnet.StartInfo.FileName = Environment.SystemDirectory + @"\netsh.exe"; // or something like that 

我會很謹慎調用外部命令這種方式,雖然一般模式,但是因爲你提供兩個文件的名稱和它的參數,它應該是做一個合理的安全的事情。如果你有時間,而且還沒有這樣做,你可能需要考慮是否有API來做你想做的事。有機會; netsh可能不是magic

1

我在做什麼錯了10倍

我說:你不關心安全性不夠。顯然IIS不會產生任何奇怪的應用程序。您需要在配置爲以具有啓動該進程權限的用戶身份運行的應用程序池中運行它。

您可能會從Windows集成身份驗證中獲得里程數;這樣用戶登錄到Web服務器將隱式確定啓動該進程的權限。

這就是說,你會更emplying原生API的更好(?ADSI,WMI)要達到的目標

+0

10x爲創意傢伙。 我發現了這個問題。首先,我用命令netsh http show sslcert測試了一個c#控制檯應用程序。爲此,您不需要管理員權限,但對於刪除命令,您需要管理員權限。謝謝,謝謝。 所以現在我需要找到一種方法來從C#代碼管理模式下運行CMD.exe。 我搜索了一下,發現了runas命令。但它不太適合我,因爲它會打開另一個cmd.exe窗口。如果你們有任何想法,請告訴我。 我無法搜索另一個API,這是我需要做的一項任務。 再次10x。 – 2011-04-13 14:59:01

+0

看看windows安全:'模擬'。有一篇文章的代碼[在CodeProject上](http://www.codeproject.com/KB/cs/zetaimpersonator.aspx)和[SO Answer](http://stackoverflow.com/questions/559719/windows-模仿從c/559740#559740)報告良好的鏈接+良好的結果 – sehe 2011-04-13 15:06:34

相關問題