簡體   English   中英

HttpWebRequest、TLS 和應用程序池服務標識

[英]HttpWebRequest, TLS and application pool service identity

我們使用HttpWebRequest對遠程服務器進行 web 服務調用。 該調用需要從本地計算機加載證書。

我們遇到的問題是,如果應用程序池標識設置為NetworkService ,那么調用將失敗,並在HttpWebResponse.GetResponse()調用上出現通用 TLS/SSL 錯誤。 如果我們將應用程序池用戶的身份更改為LocalSystem ,則它可以正常運行。

我想弄清楚的是為什么 LocalSystem可以訪問哪些NetworkService而不會影響 post call?

代碼非常簡單:

    string URL = "https://mywebserver.net";
    X509Store store = new X509Store(StoreName.Root, StoreLocation.CurrentUser);
    store.Open(OpenFlags.ReadOnly);

    var certResults = store.Certificates.Find(X509FindType.FindBySubjectName, "nameofthecertificate", false);

    /* I have confirmed that the certificate is found regardless of 
     * how the application pool is configured.
    */
    X509Certificate cert = certResults[0];

    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(URL);

    req.AllowAutoRedirect = true;

    req.ClientCertificates.Add(cert);

    req.Method = "POST";

    req.ContentType = "application/soap+xml;charset=UTF-8";

    StringBuilder postData = new StringBuilder();
    postData.Append("some soap info");

    byte[] postBytes = Encoding.UTF8.GetBytes(postData.ToString());

    using (Stream postStream = req.GetRequestStream())
    {
        postStream.Write(postBytes, 0, postBytes.Length);
        postStream.Flush();
        postStream.Close();
    }

    // dies here when running under NetworkService
    HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
    String data = String.Empty;

    using (StreamReader reader = new StreamReader(resp.GetResponseStream()))
    {
        data = reader.ReadToEnd();
        reader.Close();
    }

一般來說,應用程序池需要一個身份才能運行。 您可以配置身份使其像您一樣運行,但請記住,不同的身份具有不同級別的權限。

您的問題可能很簡單,因為應用程序池身份沒有使用它嘗試執行的代碼的權限。 您可以通過查看已部署的項目文件夾權限來查看。

既然您提到了 SSL/TLS 錯誤,我會認為該身份對已安裝的證書沒有權限。 打開mmc並檢查Local Computer/Personal/Certificates存儲中是否有證書。 如果這樣做,請右鍵單擊證書和 go 到All Tasks -> Manage Private Keys... 通過從您的計算機位置添加應用程序池標識來添加它:

IIS AppPool\YourNameOfAppPool

你不應該得到另一個對話框說它沒有找到你正確地添加了它。

在此處閱讀有關應用程序池標識的更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM