監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價咨詢管理系統(tǒng) | 工程設(shè)計管理系統(tǒng) | 甲方項目管理系統(tǒng) | 簽約案例 | 客戶案例 | 在線試用
X 關(guān)閉
上海OA信息化

當(dāng)前位置:工程項目OA系統(tǒng) > 泛普各地 > 上海OA系統(tǒng) > 上海OA信息化

使用Microsoft SOAP Toolkit 2.0建立安全Web服務(wù)

申請免費(fèi)試用、咨詢電話:400-8352-114

AMTeam.org

使用Microsoft SOAP Toolkit 2.0建立安全Web服務(wù)


Kirill Gavrylyuk

測試組長,Web 數(shù)據(jù) SOAP 組

Microsoft Corporation

2001年7月

摘要: Microsoft SOAP Toolkit 2.0 提供一個靈活的框架,可以為各種 Intranet 和 Internet 解決方案構(gòu)建可伸縮的 Web 服務(wù)。在這兩種方案中,安全性都是建立可靠服務(wù)的重要因素。SOAP Toolkit 2.0 支持基于 IIS 安全基礎(chǔ)結(jié)構(gòu)的 Internet 安全性。本文介紹了如何使用 Microsoft SOAP Toolkit 2.0 建立安全解決方案。

簡介

與任何分布式協(xié)議相同,成功的 SOAP 應(yīng)用程序的關(guān)鍵在于獲得安全性權(quán)限。SOAP 標(biāo)準(zhǔn)不指定任何安全性機(jī)制,而是將安全處理委派給傳輸層。對 SOAP Toolkit 2.0 而言,傳輸層是 HTTP。在 HTTP 上運(yùn)行的 SOAP 基本上是一個 Web 應(yīng)用程序,與其它在 IIS 上運(yùn)行的 ASP 或 ISAPI 應(yīng)用程序很相似。SOAP 的身份驗證、授權(quán)和加密機(jī)制與您通常使用的 Web 應(yīng)用程序完全相同。如果熟悉 Web 安全性,也就了解了 SOAP 安全性。如果對 Web 應(yīng)用程序不夠熟悉,本文將為您提供充分的入門知識背景。每個主題都介紹的非常詳細(xì)。如果需要更詳細(xì)的信息,請參見 MSDN Library 或由 Michael Howard、Marc Levy 和 Richard Waymire 編著的《設(shè)計 Microsoft Windows 2000 基于 Web 的安全應(yīng)用程序》。

重要規(guī)則

根據(jù)《設(shè)計 Microsoft Windows 2000 基于 Web 的安全應(yīng)用程序》中闡述的觀點(diǎn),我們首先從概述建立安全 Web 服務(wù)應(yīng)遵守的重要規(guī)則開始。安全 Web 服務(wù)可歸納為以下七類:

身份驗證

授權(quán)

審核

保密

完整性

可用性

認(rèn)可

身份驗證是一個實體(也稱為主題)驗證另一個實體是否符合它所聲稱的身份的過程。SOAP Toolkit 2.0 支持以下身份驗證方法:

基本

摘要式

Kerberos

Windows NTLM

SSL 客戶端證書

基于 SOAP 頭的身份驗證

代理身份驗證

本文檔介紹如何配置服務(wù)器端和客戶端使用上述身份驗證方法。

授權(quán)是為經(jīng)過身份驗證的用戶提供資源訪問權(quán)限的機(jī)制。只要使用 SOAP Toolkit 建立的 Web 服務(wù)基于 IIS,這些服務(wù)就可以利用 IIS 支持的授權(quán)機(jī)制。本文檔也將講述用戶應(yīng)注意的一些問題。

審核的目的是為了收集有關(guān)對 Web 服務(wù)的成功和失敗請求的信息??梢允褂?IIS 審核功能和 SOAP Toolkit 跟蹤功能實現(xiàn)這一目的。本文檔沒有介紹這方面的內(nèi)容,您可以參考 IIS 文檔、netmon 日志和 SoapServer 對象的 SOAP Toolkit 幫助。

保密是指確保攻擊者看不到客戶端與服務(wù)器之間的通信信息。完整性是指保護(hù)數(shù)據(jù)不被刪除或更改(不管是惡意還是不慎)的能力。為了實現(xiàn)保密和完整性,SOAP Toolkit 允許使用安全套接字層 (SSL) 加密數(shù)據(jù)。本文檔將介紹如何啟用 IIS 上的 SSL 支持以及如何將其用于客戶端。

可用性確保不會拒絕合法用戶對請求的資源的訪問??捎眯约夹g(shù)的示例包括負(fù)載平衡以及硬件和軟件的故障轉(zhuǎn)移。SOAP Toolkit 已成功通過了 Microsoft Application Center 負(fù)載平衡軟件的測試。

認(rèn)可是一種技術(shù),為發(fā)生的操作提供證據(jù)以防止客戶端在事務(wù)處理中欺詐或否認(rèn)。SOAP Toolkit 采用 IIS 提供的認(rèn)可功能。本文檔不對認(rèn)可進(jìn)行介紹。

身份驗證

本節(jié)介紹了 SOAP Toolkit 支持的身份驗證方法,包括其優(yōu)點(diǎn)和缺點(diǎn),以及如何對其進(jìn)行設(shè)置。還介紹了 SOAP Toolkit 在支持平臺上的已知局限性,以及服務(wù)器具有多個可用身份驗證方案時 SOAP Toolkit HTTP 連接器的行為。

身份驗證握手是如何進(jìn)行的?每個身份驗證握手都是如下開始:

客戶端發(fā)出頁面請求。

服務(wù)器返回狀態(tài) 401“拒絕訪問”和一組 HTTP 頭。

WWW 驗證它支持的每一個身份驗證方法。

如何使用 SoapClient 驗證自身?如果 Web 服務(wù)要求身份驗證(基本、摘要式、NTLM 或 Kerberos),需要為 SoapClient 提供用戶名和密碼,以將其傳遞到 Web 服務(wù)。也可以使用 SoapClient.ConnectorProperty 包完成此操作:

dim SoapClient

set SoapClient = createobject("MSSoap.SoapClient")

SoapClient.mssoapinit("
http://your-server/webservice/service.wsdl ")

SoapClient.ConnectorProperty("AuthName") = "username"

SoapClient.ConnectorProperty("AuthPassword") = "userpwd"

Quote = SoapClient.GetQuote()

注意:使用 SOAP Toolkit 2.0 時,只有在調(diào)用遠(yuǎn)程方法時才必須設(shè)置 SoapClient 上的 ConnectorProperties。

如果包含服務(wù)描述的 wsdl 文件所在的虛擬目錄也要求身份驗證,可以在 URL 內(nèi)傳遞用戶名和密碼:

SoapClient.mssoapinit

("http:// username:userpwd@your-server/webservice/service.wsdl ")

人們往往錯誤地認(rèn)為將用戶名和密碼放入 URL 是不安全的。事實并非如此。在發(fā)送 HTTP 請求之前,客戶端 HTTP 代碼將分析 URL,移出用戶名和密碼,并在身份驗證握手時使用此用戶名和密碼。事實上,代碼:

SoapClient.ConnectorProperty("AuthName") = "username"

SoapClient.ConnectorProperty("AuthPassword") = "userpwd"

Quote = SoapClient.GetQuote()

與下列代碼的功能相同(假設(shè) WSDL 文件 service.wsdl 指向自身):

SoapClient.ConnectorProperty("EndPointURL")=

"http:// username:userpwd@your-server/webservice/service.wsdl"

Quote = SoapClient.GetQuote()

虛擬目錄設(shè)置如何要求身份驗證?若要在服務(wù)器上更改特定虛擬目錄的身份驗證設(shè)置,請執(zhí)行下列操作:

在 IIS 4.0 和 IIS 5.0 上,用鼠標(biāo)右鍵單擊虛擬目錄,單擊“屬性”,然后單擊“目錄安全性”選項卡。

在“匿名訪問和身份驗證控制”之下,單擊“編輯”。將出現(xiàn)以下兩個選項:

匿名訪問

匿名訪問不是身份驗證方法。Windows 2000 和 NT4 要求用戶在訪問任何資源之前驗證自身,這種情況下,IIS 使用一個特殊帳戶作為匿名 Web 用戶(默認(rèn)為 IUSR_machinename)??梢詥螕簟澳涿L問編輯”按鈕更改此默認(rèn)匿名 Web 用戶的帳戶或其密碼。

注意:小心不要將特權(quán)帳戶用作匿名 Web 用戶帳戶。若要將虛擬目錄設(shè)置為要求身份驗證,需要清除“匿名訪問”標(biāo)記。

基本身份驗證

若要將虛擬目錄設(shè)置為要求基本身份驗證,需要:

轉(zhuǎn)至“屬性”/“目錄安全性”/“編輯匿名訪問驗證控制”菜單。

取消選中“匿名訪問”。

啟用“基本身份驗證”。將顯示一條警告消息。如果要繼續(xù)使用基本身份驗證,請單擊“確定”。

單擊“基本身份驗證編輯”按鈕。輸入域名。如果要使用默認(rèn)域名,請輸入“”(不加引號)。

缺點(diǎn):基本身份驗證是非常不安全的。用戶名和密碼以不加密的 Base64 編碼形式通過線路傳輸。問題不僅在于攻擊者能訪問基本身份驗證保護(hù)的資源,他們還能夠獲取您的用戶名和密碼的實際值,并用來訪問其它更安全的資源。使用 SSL 連接會更安全一些,因為 SSL 握手在身份驗證握手之前發(fā)生。這樣,可以通過安全連接傳送用戶名和密碼。

優(yōu)點(diǎn):基本身份驗證是 HTTP 1.0 協(xié)議的一部分,是得到最廣泛支持的身份驗證方案。

結(jié)論:基本身份驗僅當(dāng)與 SSL 功能共同使用時才是一個好的解決方案。如果希望您的服務(wù)具有安全性和高互操作性,請使用本方法。

摘要式身份驗證

這是一個相對較新的方法,是 HTTP1.1 協(xié)議的一部分,但沒有被 Web 服務(wù)器廣泛采用。對于 Windows,它只在出現(xiàn) Windows 2000 之后才被采用。若要在 IIS 5.0 上設(shè)置摘要式身份驗證,請執(zhí)行下列步驟:

轉(zhuǎn)至“屬性”/“目錄安全性”/“編輯匿名訪問”和“身份驗證控制”菜單。

取消選中“匿名訪問”。

啟用“摘要式身份驗證”。將顯示一條警告消息。如果要繼續(xù)使用摘要式身份驗證,請單擊“確定”。

使用摘要式身份驗證具有以下要求:

運(yùn)行 Windows 2000 Server 的系統(tǒng)位于 Active Directory 域。

在域控制器上安裝 iissuba.dll 文件。該 DLL 在匿名訪問和摘要式身份驗證期間發(fā)揮作用。

在 Active Directory 設(shè)置中使用摘要式身份驗證的所有帳戶的日志記錄都啟用“使用可逆加密存儲密碼”選項。這是對 Active Directory 中帳戶密碼的純文本副本進(jìn)行摘要式身份驗證訪問時所必需的。這樣,可確保存儲這些密碼的服務(wù)器是非常安全的。

缺點(diǎn):如果摘要式身份驗證不與 SSL 一起使用,將不能保護(hù)資源免于重復(fù)攻擊。目前尚未在其它 HTTP 客戶端和服務(wù)器中被廣泛采用。在 IIS 5.0 上的實現(xiàn)具有局限性,如果通過摘要式身份驗證登錄到服務(wù)器,標(biāo)識將無法委派到其它服務(wù)器。這就將服務(wù)器限制為服務(wù)器方案。

優(yōu)點(diǎn):摘要式身份驗證簡單,可能會越來越普及。它比基本身份驗證更安全,因為盡管仍可能遭到重復(fù)攻擊,但攻擊者無法獲得訪問其它資源所要求的用戶名和密碼的實際值。

結(jié)論:摘要式身份驗證可以用于保護(hù)通過 Web 服務(wù)公開到 Internet 的低價值資源。在 SSL 上使用基本身份驗證可以獲得更好的性能,因為 SSL 速度慢,但不會象基本身份驗證那樣將用戶名和密碼暴露給攻擊者。

Windows 集成身份驗證 (NTLM)

Windows 集成身份驗證(IIS 4 中的 Windows 請求/響應(yīng)身份驗證)在 Windows 2000 和 NT4 上表現(xiàn)為不同的方法。在具有 IIS 4 的 NT 4 下,它描述為 NTLM 身份驗證。若要將 IIS 服務(wù)器設(shè)置為要求 Windows 集成身份驗證(在 IIS 5 上)或 NTLM(在 IIS 4 上),請完成基本或摘要式身份驗證步驟 1 和 2,并在步驟 3 中選擇相應(yīng)的復(fù)選框。

NTLM 身份驗證(NT LAN Manager 或 Windows 請求/響應(yīng)身份驗證)是本機(jī) Windows 身份驗證方案。如果未指定用戶名/密碼,將使用當(dāng)前登錄用戶憑據(jù)。通過 Intranet 訪問時,如果用戶已經(jīng)登錄的域與 Web 服務(wù)器的域相同,而且使用自己的憑據(jù),則這些用戶不必重新進(jìn)行身份驗證。在 NTLM 握手過程中,客戶端用服務(wù)器(請求)發(fā)送的隨機(jī)值散列密碼,然后將此散列(響應(yīng))發(fā)送給服務(wù)器。這意味著密碼不會通過線路顯式發(fā)送。人們通常錯誤地認(rèn)為 NTLM 只能用于 Intranet 解決方案,不應(yīng)用于 Internet。實際上,NTLM 可以用于 Internet,只不過用于 Intranet 時速度更快,因為它依賴于 Windows 登錄過程。若要同時傳送域名和登錄名稱,請使用 SAM 帳戶名稱:

SoapClient.ConnectorProperty("AuthName") = "DOMAINusername"

缺點(diǎn):NTLM 只能用于 Windows。與基本和摘要式身份驗證方案一樣,它只對客戶端進(jìn)行身份驗證。使用 NTLM 時,服務(wù)器上的模擬線程無法將自己的權(quán)限委派給另一臺服務(wù)器。這限制了 NTLM 身份驗證在“服務(wù)器至服務(wù)器”方案中的使用;但仍可以在這種方案中使用基本和摘要式身份驗證。NTLM 不能通過代理工作。

優(yōu)點(diǎn):NTLM 比基本和摘要式身份驗證更安全,因為它不容易受到重復(fù)攻擊。由于依賴 Windows 登錄過程,因此在 Intranet 方案中速度很快。

結(jié)論:推薦將 NTLM 用于“客戶端至服務(wù)器”Intranet 解決方案。也可用于限制為 Windows 體系結(jié)構(gòu)的公司 Internet 解決方案。

Kerberos 身份驗證

Kerberos 身份驗證是在 Windows 2000 中出現(xiàn)的。當(dāng)指定 IIS 5 使用 Windows 集成身份驗證時,IIS 5 和 SoapClient HTTP 連接器通過協(xié)商協(xié)議確定是使用 NTLM 還是使用 Kerberos。如果在 Windows 2000 上運(yùn)行 SoapClient,則使用 Kerberos,否則使用 NTLM。指定 SoapClient 上用戶憑據(jù)時所應(yīng)用的規(guī)則與 NTLM 相同。

缺點(diǎn):僅 Windows 2000 平臺支持 Kerberos。Kerberos 要求具有一個可向其請求服務(wù)票證的 KDC 服務(wù)器。通常,人們不想將自己的 KDC 服務(wù)器公開于 Internet。因此,Kerberos 通常只限于 Intranet 應(yīng)用。默認(rèn)情況下,只有服務(wù)器的 NetBIOS 名稱在 Kerberos KDC 中進(jìn)行了注冊。如果您希望請求票證時使用 IIS 服務(wù)器的 DNS 名稱,則必須在 KDC 中注冊 DNS 名稱。

優(yōu)點(diǎn):與 NTLM 相比,Kerberos 速度更快、更安全,而且同時對服務(wù)器和客戶端進(jìn)行身份驗證。Kerberos 不是 Windows 專有的身份驗證方案,也可以由其它平臺實現(xiàn)。很重要的一點(diǎn)在于它允許將標(biāo)識委派給另一臺計算機(jī),因此可以在“服務(wù)器至服務(wù)器”方案中使用。

結(jié)論:推薦在基于 Windows 2000 的 Intranet 解決方案中使用 Kerberos。

有時,需要服務(wù)器支持多種身份驗證方案(以便允許對多種類型的客戶端進(jìn)行身份驗證)。這種情況下,IIS 將發(fā)送多個 WWW 身份驗證頭,詳細(xì)說明它支持的身份驗證方案,客戶端將選擇它支持的第一個身份驗證方案。了解 SoapClient 在特定情況下選擇哪種身份驗證方案非常重要。請參考表 1,其中描述了 SOAP Toolkit 2.0(更準(zhǔn)確的說是 HttpConnector)在各種平臺上的行為。

表 1:SOAP Toolkit 2.0 HttpConnector 與 IIS 5.0 的比較

基本 摘要式 Windows 集成 Windows 98 Windows Me Windows NT 4.0 Windows 2000 X X   基本 基本 基本 摘要式 X   X NTLM NTLM NTLM Kerberos   X X NTLM NTLM NTLM Kerberos X X X NTLM NTLM NTLM Kerberos

左邊的三列代表服務(wù)器提供的身份驗證方案。每一行都代表服務(wù)器允許的身份驗證方案集的一個不同組合。右邊的四列顯示了可以運(yùn)行 SOAP Toolkit Client (HttpConnector) 的平臺。例如,如果服務(wù)器既允許基本身份驗證也允許摘要式身份驗證,SOAP 將在除 Windows 2000 之外的所有平臺上選擇基本身份驗證。

表 2 顯示了 Microsoft SOAP 行為與 IIS 4.0 服務(wù)器的比較。

表 2:SOAP Toolkit 2.0 HttpConnector 與 IIS 4.0 的比較

基本 Windows 集成 Windows 98 Windows Me Winodws NT 4.0 Windows 2000 X X NTLM NTLM NTLM NTLM

身份驗證支持中的已知局限性:SOAP Toolkit 2.0 使用 NTLM/Kerberos 同時發(fā)送域名和帳戶名時具有某種局限性。但已經(jīng)在 SP2 中進(jìn)行了修正。

代理支持和身份驗證

SOAP Toolkit 廣泛支持通過代理服務(wù)器進(jìn)行通信,包括在代理服務(wù)器上進(jìn)行身份驗證。我們將具體說明以下方案,講述如何通過代理服務(wù)器使用 Web 服務(wù)。

直接訪問

默認(rèn)情況下,SOAP Toolkit HttpConnector 嘗試對 Web 服務(wù)進(jìn)行直接調(diào)用。如果您不具有 Web 服務(wù)的直接訪問權(quán)限(例如,Web 服務(wù)位于您的 Intranet 之外,必須通過代理才能訪問),以下腳本將失?。?/FONT>

dim SoapClient

set SoapClient = createobject("MSSoap.SoapClient")

SoapClient.mssoapinit("
http://services.xmethods.net/soap/urn:xmethods-CurrencyExchange.wsdl")

Quote = SoapClient.GetQuote()

通過默認(rèn)代理訪問

試圖訪問 Intranet 之外的網(wǎng)站時,Internet Explorer Web 瀏覽器將通過在 IE 設(shè)置中指定的默認(rèn)代理服務(wù)器。您可以通過 IE/“工具”/“選項”/“連接”/“局域網(wǎng)設(shè)置”對話框查看這些設(shè)置。若要使 Microsoft SOAP Toolkit (HTTPConnecter) 使用這些設(shè)置,應(yīng)將 UseProxy 屬性設(shè)置為 TRUE。示例:

dim SoapClient

set SoapClient = createobject("MSSoap.SoapClient")

SoapClient.mssoapinit("
http://services.xmethods.net/soap/urn:xmethods-CurrencyExchange.wsdl")

SoapClient.ConnectorProperty("UseProxy") = true

Quote = SoapClient.GetQuote()

繞過代理服務(wù)器列表。請注意,IE 代理設(shè)置中有一個主機(jī)列表,您可以連接這些主機(jī)來繞過代理服務(wù)器。

轉(zhuǎn)至 IE/“工具”/“選項”/“連接”/“局域網(wǎng)設(shè)置”對話框。

若要繞過本地服務(wù)器,請啟用設(shè)置“對于本地地址不使用代理服務(wù)器”。

若要在連接到其它特定服務(wù)器時繞過代理,請單擊“高級”按鈕??梢栽凇袄狻本庉嬁丶辛谐鲆@過的服務(wù)器,各個服務(wù)器名稱之間用分號隔開??梢允褂猛ㄅ浞?.soap-company.com”繞過名稱中含有 .soap-company.com 的所有服務(wù)器。

需要代理服務(wù)器來允許繞過本地 Intranet 之外的任何服務(wù)器。請注意,用于 HTTP 和用于通過 SSL (HTTPS) 連接的代理服務(wù)器不同。代理應(yīng)允許使用任一協(xié)議,以便 SSL 正常工作。

局限性:使用默認(rèn)代理時,在 Windows 2000 和 Windows NT4 上使用 Microsoft SOAP Toolkit 2.0 HttpConnector 有一個已知問題:它不理解默認(rèn) IE 代理設(shè)置的“繞過代理”列表。如果選中了“對于本地地址不使用代理服務(wù)器”并且在 URL 中指定的主機(jī)名不包含“.”,它將繞過代理服務(wù)器。但它不理解在 IE 代理設(shè)置“高級”菜單中的“例外”文本框中指定的復(fù)雜模板。

通過指定代理連接

可以指定哪個代理使用 ProxyServer 和 ProxyPort 連接器屬性:

set SoapClient = createobject("MSSoap.SoapClient")

SoapClient.mssoapinit("
http://services.xmethods.net/soap/urn:xmethods-CurrencyExchange.wsdl")

SoapClient.ConnectorProperty("UseProxy") = true

SoapClient.ConnectorProperty("ProxyServer") = "yourproxy"

SoapClient.ConnectorProperty("ProxyPort") = 80

Quote = SoapClient.GetQuote()

請注意,如果使用 ProxyServer 屬性,則不必將 UseProxy 設(shè)置為 True,它將自動設(shè)置。

代理身份驗證

代理服務(wù)器可以在允許連接之前要求您對自身進(jìn)行身份驗證。例如,可以使用它限制在公司 Intranet 內(nèi)使用 Internet。代理服務(wù)器可使用上述所有身份驗證方案。Microsoft SOAP Toolkit 2.0 允許您指定代理身份驗證的用戶名和密碼:

set SoapClient = createobject("MSSoap.SoapClient")

SoapClient.ConnectorProperty("UseProxy") = true

SoapClient.mssoapinit("
http://services.xmethods.net/soap/urn:xmethods-CurrencyExchange.wsdl")

SoapClient.ConnectorProperty("ProxyServer") = "secureproxy"

SoapClient.ConnectorProperty("ProxyPort") = 80

SoapClient.ConnectorProperty("ProxyUser") = "username"

SoapClient.ConnectorProperty("ProxyPassword") = "password"

Quote = SoapClient.GetQuote()

如果代理要求 NTLM 身份驗證,可以省略用戶名和密碼,這是將使用當(dāng)前登錄憑據(jù)。如果需要指定代理 NTLM 身份驗證的域名,請?zhí)砑印癉OMAINusername”進(jìn)行服務(wù)器身份驗證。

局限性。Microsoft SOAP Toolkit 2.0 不支持通過要求身份驗證的代理連接到也要求身份驗證的服務(wù)器。另外,通過要求身份驗證的代理的 SSL 連接在 Windows 2000 和 Windows NT4 上不能正常工作。

SSL 和客戶端證書

在本節(jié)中,我們將具體討論如何通過安全套接字層 (SSL) 和客戶端證書支持進(jìn)行連接。我們還將討論 Microsoft SOAP Toolkit 2.0 在使用客戶端證書支持的支持平臺上的已知局限性。

通常認(rèn)為 SSL 只是一種加密機(jī)制,其實它還提供身份驗證。若要使 IIS 4.0/IIS 5.0 支持 SSL 連接,需要獲取 X.509 證書,并將其安裝在服務(wù)器上。

何謂 X.509 證書?

證書是一種結(jié)構(gòu),其中包含主題、頒發(fā)者名稱、有效期和其它特征等信息。(有關(guān)證書的詳細(xì)信息,請參閱由 Michael Howard 編著的《設(shè)計 Microsoft Windows 2000 基于 Web 的安全應(yīng)用程序》。) 每個證書都與用于 SSL 加密的一對私有和公用密鑰相關(guān)。SSL 始終使用 X.509 證書對 Web 服務(wù)器進(jìn)行身份驗證。

若要獲得證書,需要向證書頒發(fā)機(jī)構(gòu)發(fā)出證書請求。證書頒發(fā)機(jī)構(gòu) (CA) 是頒發(fā)證書的單位。當(dāng) CA 向主題(發(fā)出請求的實體)頒發(fā)證書時,它驗證該主題是否與它所聲稱的相符,并簽發(fā)新證書和私有密鑰。這樣,主題可以信任 CA。如果信任頒發(fā)證書的 CA,則表示信任向您提供此證書的主題。根目錄證書保證 CA 的可信性。多個 CA 可以形成一條信任鏈:如果信任根 CA,就信任具有根 CA 頒發(fā)的證書的中間 CA,因此將信任具有中間 CA 頒發(fā)的證書的所有主題。

“信任”的實際意義是什么?可以將 CA 的證書放入“受信任的根目錄證書頒發(fā)機(jī)構(gòu)”存儲區(qū)來表示信任該 CA。所有證書都存儲在所謂的證書存儲區(qū)中。有多個默認(rèn)存儲區(qū),例如:

CURRENT_USERMY,個人證書存儲區(qū),用于當(dāng)前登錄的用戶,對其它登錄用戶不可見

LOCAL_MACHINEMY,個人證書存儲區(qū),用于所有用戶

CURRENT_USERRoot,受信任的根目錄證書頒發(fā)機(jī)構(gòu),包含當(dāng)前用戶信任的根 CA 的證書,如果證書具有到根 CA 證書的證書路徑,則當(dāng)前用戶信任該證書的有效性。

LOCAL_MACHINERoot,相同,但被所有用戶信任

具有被默認(rèn)信任的根 CA,例如 Verisign。盡管我們的示例將使用一個試用版的 Verisign 證書,但是它們是由不被默認(rèn)信任的 Verisign 測試機(jī)構(gòu)頒發(fā)的。

在服務(wù)器上啟用 SSL

本節(jié)介紹如何創(chuàng)建證書請求、從 Verisign 站點(diǎn)獲得試用版的測試服務(wù)器端證書,并將其安裝在 Web 服務(wù)器上。

使用 IIS 4.0 啟用服務(wù)器上的 SSL

用鼠標(biāo)右鍵單擊要啟用 SSL 的網(wǎng)站,并選擇“屬性”。

在“目錄安全性”選項卡上,單擊“編輯安全通信”。

在對話框中,單擊“密鑰管理器”。

展開樹狀視圖中的“本地計算機(jī)”節(jié)點(diǎn)。用鼠標(biāo)右鍵單擊 WWW 葉,并選擇“新建密鑰”。這將啟動稱為“密鑰管理器”的密鑰請求向?qū)А?BR>選擇“將請求放入要發(fā)送到頒發(fā)機(jī)構(gòu)的文件中”和一個文件名。單擊“下一步”。

輸入一個易記的密鑰名稱。輸入密碼,當(dāng)獲取由頒發(fā)機(jī)構(gòu)頒發(fā)的證書時需要此密碼。對于加密密鑰字節(jié)長度,請選擇 1024(1024 為推薦長度,某些頒發(fā)機(jī)構(gòu)不頒發(fā)小于此長度的證書)。單擊“下一步”。

輸入您的組織和部門名稱。輸入等同于完整站點(diǎn)名稱的公用名稱,例如
www.yoursite.com。在啟動 SSL 連接之前,客戶端將檢查站點(diǎn)名稱是否與證書的公用名稱相同。單擊“下一步”。

輸入國家(地區(qū))、省/自治區(qū)、市/縣所在地。證書頒發(fā)機(jī)構(gòu)可能檢查這些信息是否一致,以確保輸入的信息有效。輸入省時,請輸入完整的省名稱。

輸入管理服務(wù)器的人員的姓名、電子郵件地址和電話號碼。這些信息不包含在證書中,但證書頒發(fā)機(jī)構(gòu)需要這些信息。

包含您的請求的文件已經(jīng)創(chuàng)建。該文件為 Base64 編碼格式。在此過程中,IIS 還將為該證書請求創(chuàng)建一個私有密鑰和一個公用密鑰。私有密鑰將保存在您的計算機(jī)上,而公用密鑰將隨請求一起發(fā)往 Verisign,并用以加密證書數(shù)據(jù)。

轉(zhuǎn)至
www.verisign.com(英文),并單擊“Get Trial SSL ID”。注冊證書時,會要求您提供 CSR(證書簽名請求)。復(fù)制并粘貼您的請求文件中自行“BEGIN NEW CERTIFICATE REQUEST;”之后的內(nèi)容,否則,將會出錯。Verisign 以郵件形式將測試服務(wù)器端證書發(fā)送給您。該過程同樣適用于商業(yè)證書,不同之處在于它收費(fèi)并仔細(xì)驗證提交的信息。

確保從證書頒發(fā)機(jī)構(gòu)獲得的證書是 Base64 編碼的。如果證書頒發(fā)機(jī)構(gòu)是 Verisign,則您可以通過電子郵件獲得證書。創(chuàng)建一個擴(kuò)展名為 .cer 的空文件,復(fù)制行“BEGIN CERTIFICATE”和“END CERTIFICATE”之間(包含這兩行)的所有內(nèi)容并粘貼到該文件。

轉(zhuǎn)至要啟用 SSL 的站點(diǎn)的“屬性”/“目錄安全性”選項卡。單擊“編輯安全通信”,然后單擊“密鑰管理器”。

在對話框中,展開樹狀視圖中的“本地計算機(jī)”節(jié)點(diǎn),再展開 WWW 葉,將顯示您的證書請求的密鑰。由于該證書尚未安裝,它標(biāo)記為紅色。用鼠標(biāo)右鍵單擊該證書,并選擇“安裝密鑰證書”。選擇具有要安裝的證書的文件。將提示您提供以前設(shè)置的密碼。輸入密碼?,F(xiàn)在,您的證書已安裝。

使用 IIS 5.0 啟用服務(wù)器上的 SSL

用鼠標(biāo)右鍵單擊要啟用 SSL 的網(wǎng)站,并選擇“屬性”。

在“目錄安全性”選項卡上,單擊“編輯安全通信”。

單擊“服務(wù)器證書”打開服務(wù)器證書向?qū)?。該向?qū)⒂洃浘W(wǎng)站的當(dāng)前狀態(tài),例如您是否已擁有服務(wù)器證書。(現(xiàn)在假設(shè)您沒有證書。)

在證書向?qū)е?,單擊“下一步”,選擇“創(chuàng)建一個新證書”,然后單擊“下一步”。

選擇“現(xiàn)在準(zhǔn)備請求,但稍后發(fā)送”,并單擊“下一步”。

輸入證書的友好名稱。該名稱不會在證書結(jié)構(gòu)中使用,但作為區(qū)分請求和證書的一種方法。選擇公用密鑰長度。推薦密鑰長度不小于 1024 字節(jié)。單擊“下一步”。

輸入可以由頒發(fā)機(jī)構(gòu)驗證的組織名稱和部門名稱,如果您請求用于商業(yè)目的的真實證書,請輸入有效名稱。輸入要被認(rèn)證的計算機(jī)的名稱。注意:它必須等同于您的完整站點(diǎn)名稱,例如 www.yoursite.com。單擊“下一步”。

輸入國家(地區(qū))、省/自治區(qū)、市/縣所在地。請輸入有效信息,證書頒發(fā)機(jī)構(gòu)將檢查這些信息是否一致。輸入省時,請輸入完整的省名稱。單擊“下一步”。

輸入用于保存請求的請求文件名稱。單擊“下一步”。

將摘要顯示您輸入的內(nèi)容。確認(rèn)內(nèi)容正確,并單擊“下一步”完成向?qū)?。包含請求的文件將?Base 64 格式保存。

包含您的請求的文件已經(jīng)創(chuàng)建。該文件為 Base64 編碼格式。在此過程中,IIS 還將為該證書請求創(chuàng)建一個私有密鑰和一個公用密鑰。私有密鑰將保存在您的計算機(jī)上,而公用密鑰將隨請求一起發(fā)往 Verisign,并用以加密證書數(shù)據(jù)。

轉(zhuǎn)至
www.verisign.com(英文),并單擊“Get Trial SSL ID”。注冊證書時,會要求您提供 CSR(證書簽名請求)。復(fù)制并粘貼您的請求文件中自行“BEGIN NEW CERTIFICATE REQUEST;”之后的內(nèi)容,否則,將會出錯。Verisign 以郵件形式將測試服務(wù)器端證書發(fā)送給您。該過程同樣適用于商業(yè)證書,不同之處在于它收費(fèi)并仔細(xì)驗證提交的信息。

確保從證書頒發(fā)機(jī)構(gòu)獲得的證書是 Base64 編碼的。如果證書頒發(fā)機(jī)構(gòu)是 Verisign,則您可以通過電子郵件獲得證書。創(chuàng)建一個擴(kuò)展名為 .cer 的空文件,復(fù)制行“BEGIN CERTIFICATE”和“END CERTIFICATE”之間(包含這兩行)的所有內(nèi)容并粘貼到該文件。

轉(zhuǎn)至要啟用 SSL 的站點(diǎn)的“屬性”/“目錄安全性”選項卡。單擊“編輯安全通信”,然后單擊“服務(wù)器證書”。服務(wù)器證書向?qū)е滥鷦倓偺岢鲎C書請求,所以期望您已頒發(fā)證書并準(zhǔn)備好在 IIS 5.0 中安裝。

選擇“處理掛起申請并安裝證書”,并單擊“下一步”。選擇從證書頒發(fā)機(jī)構(gòu)獲得的證書的文件名。單擊“下一步”。查看證書概述,并單擊“下一步”。單擊“完成”。您的 Web 服務(wù)器證書已安裝在 IIS 5.0 中。

為 SSL 連接配置客戶端

僅僅具有配置正確的服務(wù)器并不足以啟用成功的 SSL 連接。請記住,SSL 連接始終包含身份驗證,其中客戶端驗證服務(wù)器的身份。特別是客戶端將驗證服務(wù)器是否具有有效證書,例如證書是否過期、是否被注銷、是否由客戶端信任的證書頒發(fā)機(jī)構(gòu)頒發(fā)等。在上述詳細(xì)步驟中,將收到一個由 Verisign 測試根頒發(fā)機(jī)構(gòu)頒發(fā)的試用版 Verisign 服務(wù)器端證書。默認(rèn)情況下,該頒發(fā)機(jī)構(gòu)并不被信任,例如,其證書不默認(rèn)存儲在您計算機(jī)上的根存儲區(qū)。按照 Verisign 站點(diǎn)中的關(guān)于如何獲得 Verisign 測試頒發(fā)機(jī)構(gòu)根目錄證書的指導(dǎo)進(jìn)行操作。獲得包含 Verisign 測試頒發(fā)機(jī)構(gòu)根目錄證書的文件之后,需要將其安裝在客戶端(您要用這些客戶端執(zhí)行至服務(wù)器的 SSL 連接)上,以在對服務(wù)器進(jìn)行身份驗證時信任服務(wù)器端證書。請執(zhí)行以下步驟:

雙擊包含證書的文件,打開證書瀏覽器窗口。

單擊“安裝證書”。在證書導(dǎo)入向?qū)g迎頁上,單擊“下一步”。

選擇要保存該證書的存儲區(qū)。

默認(rèn)情況下,Windows 將該證書放置到 CURRENT_USERRoot存儲區(qū)中。這意味著只以您的帳戶使用計算機(jī)時,才能夠信任由該頒發(fā)機(jī)構(gòu)頒發(fā)的證書。若要確保對其它用戶也有效,推薦始終將根 CA 證書放置到 LOCAL_MACHINERoot 存儲區(qū)。這需要執(zhí)行以下操作:

選擇“將所有證書放置到以下存儲區(qū)”,并單擊“瀏覽”。

選擇“顯示物理存儲區(qū)”,展開“受信任的根目錄證書頒發(fā)機(jī)構(gòu)”節(jié)點(diǎn),選擇“本地計算機(jī)”,然后選擇“LOCAL_MACHINERoot”節(jié)點(diǎn)。
完成該向?qū)О惭b CA 根目錄證書。

執(zhí)行 SSL 連接

嘗試打開到 Web 服務(wù)器的 SSL 連接。若要實現(xiàn)此目的,讓我們首先設(shè)置 Calc/Service/Rpc/AspVbsVb SOAP Toolkit 示例。需要執(zhí)行以下操作:

在服務(wù)器上,執(zhí)行 SOAP Toolkit 2.0 示例描述文件 C:Program FilesMSSOAPSamplesdefault.html 中有關(guān)示例設(shè)置的所有指導(dǎo)。

在服務(wù)器上,編輯 C:ProgramFilesMSSOAPSamplesCalcServiceRpcAspVbsVbcalc.wsdl 文件,并在位置 URL 而不是在 MSSOAP 的以下位置指定 Web 服務(wù)器名稱:

<port name='CalcSoapPort' binding='wsdlns:CalcSoapBinding' >

<soap:address location='https://您的服務(wù)器/MSSoapSamples/Calc
                              
/Service/Rpc/AspVbsVb/Calc.asp' />

</port>

在客戶端上運(yùn)行以下 VBScript:

Set Calc = CreateObject("MSSOAP.SoapClient")

Calc.mssoapinit
https://your-server/MSSoapSamples/Calc/Service/Rpc/AspVbsVb/Calc.wsdl

Answer = Calc.add(14,28)

WScript.Echo "14+28=" & Answer

這樣,即建立了一個 SSL 連接。請注意,如果將 URL 改回 HTTP,將建立一個通常意義上的非安全 HTTP 連接。若要使您的服務(wù)器要求 Web 服務(wù)實現(xiàn) SSL 連接,需要在服務(wù)所在的虛擬目錄上設(shè)置“要求 SSL”。請執(zhí)行以下操作:

在 IIS 4.0 上

用鼠標(biāo)右鍵單擊 IIS 管理器中的虛擬目錄,并選擇“屬性”。

在“目錄安全性”選項卡上,單擊“編輯安全通信”。

啟用“訪問本資源時要求安全通道”。

在 IIS 5.0 上

用鼠標(biāo)右鍵單擊 IIS 管理器中的虛擬目錄,并選擇“屬性”。

在“目錄安全性”選項卡上,單擊“編輯安全通信”。

啟用“要求 SSL”。

現(xiàn)在,如果試圖建立與該服務(wù)的非安全 HTTP 連接,將會出錯。

SSL 中的服務(wù)器身份驗證

常見錯誤是在 SSL 連接中使用 localhost 或服務(wù)器主機(jī)名的其它別名。在 SSL 握手期間,客戶端驗證服務(wù)器證書主題名稱的公用名稱 (CN) 部分與 HTTP 請求中的主機(jī)名是否匹配。如果不匹配,SSL 連接將失敗??蛻舳诉€同時驗證服務(wù)器端證書是否有效、是否撤消以及是否由信任的 CA 頒發(fā)。

客戶端證書身份驗證

除了必要的服務(wù)器身份驗證,SSL 還有一個可選步驟:對客戶端進(jìn)行身份驗證。這是使用客戶端證書進(jìn)行的??蛻舳俗C書與服務(wù)器證書相似。如果服務(wù)器配置為要求客戶端證書,客戶端會將客戶端證書發(fā)送到服務(wù)器。服務(wù)器至少要檢查它是否信任此客戶端證書,例如,它是否由信任的證書頒發(fā)機(jī)構(gòu)頒發(fā)。

在服務(wù)器上配置客戶端證書身份驗證

IIS 4.0 和 IIS 5.0 都可以配置為:

忽略客戶端證書。這種情況下,客戶端證書身份驗證將關(guān)閉。

接受但不要求客戶端證書。這種情況下,如果提供了客戶端證書,將對客戶端進(jìn)行身份驗證。這時,所謂的身份驗證僅是檢查客戶端證書是否有效、可信。

要求客戶端證書。如果沒有提供客戶端證書,連接將被拒絕。將如前一選項那樣對提供的客戶端證書進(jìn)行檢查。

要求客戶端證書,并將其映射到指定的用戶帳戶。這種身份驗證方式與要求客戶端證書相同,但 IIS 工作線程還模擬指定用戶的憑據(jù)。

使用由 CA 而不是默認(rèn)信任的頒發(fā)機(jī)構(gòu)(例如 Verisign 或 Thawte)頒發(fā)的客戶端證書時,需要確保該 CA 根目錄證書存儲在服務(wù)器上的 LOCAL_MACHINERoot 存儲區(qū)中,而不是存儲在 CURRENT_USERRoot 存儲區(qū)中。默認(rèn)情況下,向?qū)? CA 的證書放置在 CURRENT_USERRoot 中,這使該證書對 IIS 不可見,因為它使用不同的用戶帳戶。

如何配置 IIS 使用上述客戶端證書選項之一?請按照上述步驟執(zhí)行,但第三步要執(zhí)行以下操作(IIS 4.0 和 IIS 5.0 中的對話框相似):

若要忽略客戶端證書,請在 IIS 5.0 上選擇“忽略客戶端證書”或在 IIS 4.0 上選擇“不接受客戶端證書”;

若要接受但不要求客戶端證書,請選擇“接受客戶端證書”;

若要要求客戶端證書,請選擇“要求客戶端證書”;

若要要求客戶端證書與指定的用戶帳戶匹配,請選擇“要求客戶端證書”以及“啟用客戶端證書映射”。此時,您需要具有一個文件,該文件包含要映射的導(dǎo)出客戶端證書。要獲得該文件,請在客戶端證書所在的客戶端計算機(jī)上,執(zhí)行以下操作:

在 Internet Explorer 中,單擊“工具”菜單上的“Internet 選項”。單擊“內(nèi)容”選項卡,然后單擊“證書”。

在出現(xiàn)的對話框上,將具有 CURRENT_USERMY、CURRENT_USERRoot 等證書存儲區(qū)。(請注意不會顯示 LOCAL_MACHINE 中的任何存儲區(qū)。)
選擇要導(dǎo)出的證書,并單擊“導(dǎo)出”。在向?qū)е?,選擇“不,不要導(dǎo)出私有密鑰”和“Base64 編碼 X.509(.CER)”格式。選擇文件名。結(jié)果文件將包含導(dǎo)出的客戶端證書。

若要將文件添加到服務(wù)器,請在“編輯客戶端證書映射”對話框中,單擊“添加”并選擇包含客戶端證書的文件。
將要求您提供映射名稱。選擇任意帳戶名稱以映射到證書和密碼。每當(dāng)連接到此虛擬目錄中的服務(wù)時,客戶端都發(fā)出此證書,將使用所選帳戶模擬請求處理線程。有關(guān)使用客戶端證書進(jìn)行身份驗證的詳細(xì)信息,請參閱 Windows 2000 網(wǎng)站上將證書映射到用戶帳戶的逐步指導(dǎo)(英文)。

在客戶端使用 SSL 客戶端證書

本節(jié)介紹為了與服務(wù)交流而需要提供客戶端證書時,如何在客戶端上進(jìn)行操作。如何獲取和安裝客戶端證書?可以從 Verisign 或任何其它 CA 獲取客戶端證書(Web 標(biāo)識)。

注意:服務(wù)器證書和客戶端證書的用途不同。不能將服務(wù)器端證書用作客戶端證書。

獲得包含證書的文件(.cer 文件)之后,雙擊該文件即可進(jìn)行安裝。按照前述安裝 Verisign 測試 CA 根目錄證書的步驟進(jìn)行操作。將要求您指定存放證書的存儲區(qū)。客戶端證書的默認(rèn)(推薦)存儲區(qū)是 CURRENT_USERMY。

注意:準(zhǔn)備客戶端證書的請求時,通常會詢問您是否使用 CURRENT_USER 或 LOCAL_MACHINE 存儲區(qū)來存儲證書。

如果希望只能從創(chuàng)建請求時所使用的帳戶訪問證書,則使用 CURRENT_USER 存儲區(qū)。

如果希望幾個特權(quán)用戶可以共享訪問此證書,則使用 LOCAL_MACHINE 存儲區(qū)。只有本地管理帳戶具有 LOCAL_MACHINE 存儲區(qū)的訪問權(quán)限。例如,如果在具有客戶端證書身份驗證的 SSL 之上使用 SOAP 進(jìn)行遠(yuǎn)程配置,并且希望從任何本地管理員帳戶都可以使用客戶端腳本,可能要使用該存儲區(qū)。

以下是一些創(chuàng)建客戶端證書請求并將證書安裝到所選存儲區(qū)的簡單腳本。腳本使用證書注冊控制,與上述用于服務(wù)器證書的腳本很相似:

CERT_SYSTEM_STORE_LOCAL_MACHINE= 131072

OID_CLIENT_AUTH  = "1.3.6.1.5.5.7.3.2"

REQUEST_FILENAME = "ClientCertReq.txt" 

bUseLM = true

set enroll = CreateObject("CEnroll.CEnroll.1")

'建立證書的辨別名稱

strDN =  "CN=your-server,OU=UserUnit,O=UserOrg,L=UserCity,S=WA,C=US"

if bUseLM then

'如果希望將請求和證書保存在 LOCAL_MACHINE 存儲區(qū)中
    
enroll.MyStoreFlags      = CERT_SYSTEM_STORE_LOCAL_MACHINE
  
enroll.RequestStoreFlags = CERT_SYSTEM_STORE_LOCAL_MACHINE

end if

'否則,請求和證書將默認(rèn)保存在

' CURRENT_USER 存儲區(qū)中

'創(chuàng)建請求,指定證書用途(客戶端身份驗證)

strReq = Enroll.createPKCS10( strDN, OID_CLIENT_AUTH)
'
添加 BEGIN/END 標(biāo)記

strReq = "-----BEGIN NEW CERTIFICATE REQUEST-----" & vbCRLF & _
      
strReq & _
      
"-----END NEW CERTIFICATE REQUEST-------"

set fso = CreateObject("Scripting.FileSystemObject")

set f = fso.OpenTextFile(REQUEST_FILENAME, 2, true)

call f.Write(strReq)

f.Close()

ClientCertReq.txt 文件將包含一個 Base64 編碼的 PKCS10 請求。若要在從 CA 接收到 SSL 客戶端證書后進(jìn)行安裝,請使用下列腳本:

FILE_CERTIFICATE = "certnew.cer"

CERT_SYSTEM_STORE_LOCAL_MACHINE= 131072

bUseLM = true

set enroll = CreateObject("CEnroll.CEnroll.1")

if bUseLM then

'如果希望請求和證書保存在 LOCAL_MACHINE 存儲區(qū)中

enroll.MyStoreFlags= CERT_SYSTEM_STORE_LOCAL_MACHINE

enroll.RequestStoreFlags= CERT_SYSTEM_STORE_LOCAL_MACHINE

end if

'否則,Cenroll 將默認(rèn)使用 CURRENT_USER 存儲區(qū)。

'指定的存儲區(qū)應(yīng)與保存請求的存儲區(qū)相同。

enroll.acceptFilePKCS7(FILE_CERTIFICATE)

該腳本將從指定文件獲取證書,并將其安裝到 IIS 保存服務(wù)器證書的 LOCAL_MACHINE 存儲區(qū)??梢允褂眠@些腳本自動進(jìn)行配置。

如何使 SoapClient 使用客戶端證書?這相當(dāng)容易。您需要了解證書保存在哪個存儲區(qū)以及證書公用名稱(主題名稱的 CN 部分)。當(dāng)從 IE5 或 Microsoft Management Console(mmc.exe)瀏覽時,公用名稱顯示在“頒發(fā)給”列。以下腳本:

Set Calc = CreateObject("MSSOAP.SoapClient")

Calc.mssoapinit
https://your-server/MSSoapSamples/Calc/Service/Rpc/AspVbsVb/Calc.wsdl

SoapClient.ConnectorProperty("SSLClientCertificateName") = "MyCert"

Answer = Calc.add(14,28)

WScript.Echo "14+28=" & Answer

從 CURRENT_USERMY 存儲區(qū)提取 CN=MyCert 的證書,并使用此證書請求安全服務(wù)。也可以顯式指定要使用的存儲區(qū):

SoapClient.ConnectorProperty("SSLClientCertificateName") = "LOCAL_MACHINEMYMyCert"

證書名稱不區(qū)分大小寫,但存儲區(qū)名稱區(qū)分大小寫。

“服務(wù)器至服務(wù)器”方案中的客戶端證書

我們詳細(xì)介紹并提供了一個使用客戶端證書的安全 B2B 解決方案示例。為了防止攻擊,在“服務(wù)器至服務(wù)器”方案中正確使用客戶端證書至關(guān)重要。

方案:Internet 商店使用第三方付費(fèi)的 Web 服務(wù)驗證提交的客戶信息(例如信用卡號)。付費(fèi)的 Web 服務(wù)要求客戶端證書身份驗證。

Internet 商店應(yīng)用程序要求下列組件:

Web 應(yīng)用程序:在高保護(hù)(隔離)Web 應(yīng)用程序中運(yùn)行的一組 ASP 頁(這是很重要的)。當(dāng)需要使用信用卡號驗證服務(wù)時,調(diào)用執(zhí)行該任務(wù)的 COM+ 應(yīng)用程序。這些 ASP 頁不訪問客戶端證書,也不直接使用 SoapClient。該應(yīng)用程序允許匿名訪問。

COM+ 應(yīng)用程序:配置為以特定本地帳戶標(biāo)識在獨(dú)立進(jìn)程中運(yùn)行。用于對第三方信用卡號驗證服務(wù)進(jìn)行身份驗證的客戶端證書保存在該本地帳戶的個人 (CURRENT_USERMY) 存儲區(qū)。該 COM+ 對象是信用卡號驗證服務(wù)的代理,而且使用 SoapClient 訪問該服務(wù),并如上所述使用客戶端證書進(jìn)行身份驗證。

信用卡號驗證服務(wù):要求 SSL 連接和客戶端證書身份驗證。

客戶端證書存儲在證書存儲區(qū)中,并且該證書存儲區(qū)不能從 ASP 頁能夠模擬的任何帳戶訪問。這樣,就確保了攻擊者無法通過執(zhí)行腳本代碼使用客戶端證書,即使他們獲得了對 ASP 頁的更新訪問權(quán)限。不要從 ASP 頁直接訪問客戶端證書。

SSL 和客戶端證書支持的已知局限性

Windows 98:Windows 98 上的某些 WinInet 版本不支持客戶端證書。

Windows 98、Windows Me 和 Windows XP:如果包含服務(wù)的虛擬目錄(在 IIS 4.0 或 IIS 5.0 上)配置為要求客戶端證書,則無法連接到要求客戶端證書的本主機(jī)上的任何其它 URL。這是由于 WinInet 中的證書緩存問題所致,而且在整個進(jìn)程生存期內(nèi)都存在。但是,您可以連接到另一臺主機(jī)上的安全 URL。

在 Windows ME 中,SSL 連接可能在關(guān)閉時掛起。有關(guān)詳細(xì)信息,請參閱知識庫文章 Q238934。有關(guān)此 Windows ME 問題的 QFE,請與 Microsoft 產(chǎn)品支持服務(wù)聯(lián)系。

Windows 2000 和 Windows NT4 上的 SoapClient 只能通過端口 443 進(jìn)行 SSL 連接。

身份驗證問題

這里,我們將討論使用 SOAP Toolkit 2.0 提供 COM 對象時可能遇到的某些身份驗證問題。這些并非安全漏洞,但您可能希望在部署安全 Web 服務(wù)時避免這些問題并確保資源的可用性。

以匿名登錄方式訪問文件和其它資源

當(dāng)對允許匿名登錄的 Web 服務(wù)發(fā)出 SOAP 請求時,IIS 將使用特殊 IUSR_machinename 帳戶模擬請求處理服務(wù)器線程。如果已作為 Web 服務(wù)公開的 COM 對象試圖使用禁止 IUSR_machinename 帳戶訪問的資源,將收到“拒絕訪問”錯誤。為了避免此錯誤,可以更改 IUSR_machinename 對該資源的權(quán)限,或者更改虛擬目錄設(shè)置以使用另一匿名訪問帳戶。(請參閱身份驗證部分)

“服務(wù)器至服務(wù)器”方案

“服務(wù)器至服務(wù)器”是非常普遍的方案,其中 SoapClient 對象是從 ASP 文件內(nèi)部使用。為了提高性能,需要緩存 global.asa 文件內(nèi)的 SoapClient 對象。這樣,可以避免重新調(diào)用 SoapClient.mssoapinit 和分析 WSDL 文件。在該解決方案中,如果正在訪問另一臺要求身份驗證的安全服務(wù)器,需要在 global.asa 文件中設(shè)置憑據(jù)。

不能執(zhí)行 NTLM 身份驗證,因為它具有委派局限性(請參閱身份驗證部分)。

注意:對于 Kerberos,請務(wù)必顯式指定要使用哪些憑據(jù)。不要依賴當(dāng)前線程憑據(jù),因為具有較強(qiáng)憑據(jù)的客戶端發(fā)出第一個請求后,所有后續(xù)調(diào)用都將繼續(xù)使用此連接。這可能會在您的解決方案中導(dǎo)致安全漏洞。

注意:為了使解決方案更安全,我們推薦您采用使用 SoapClient 的獨(dú)立 COM+ 應(yīng)用程序代碼并執(zhí)行經(jīng)過身份驗證的連接。請參閱有關(guān)使用上述客戶端證書身份驗證的“服務(wù)器至服務(wù)器”解決方案的詳細(xì)描述。這樣,可以避免用戶名和密碼受到已經(jīng)獲得 ASP 頁源代碼訪問權(quán)限的攻擊者的攻擊。

注意:如果決定在 ASP 頁中使用 SoapClient,推薦在高保護(hù)(隔離)模式下運(yùn)行 ASP 頁。出于優(yōu)化目的,執(zhí)行 HTTP 連接的 SoapClient 代碼以進(jìn)程帳戶而不是調(diào)用線程的帳戶運(yùn)行。這意味著,如果在低保護(hù)(進(jìn)程內(nèi))模式下運(yùn)行的 ASP 頁中使用 SoapClient,HTTP 代碼將在系統(tǒng)帳戶下運(yùn)行。如果使用隔離模式,它將在較安全的 IWAM_machinename 帳戶下運(yùn)行。

在 NT4 上的 MTS 中運(yùn)行的對象:

如果提供的 COM 對象是在 NT 4.0 上的 MTS Server Package 中運(yùn)行,則可能會導(dǎo)致一些安全問題。在 NT 4.0 中,COM 在進(jìn)行本地 COM 調(diào)用時始終使用進(jìn)程標(biāo)識。這意味著,當(dāng) SOAP 偵聽器創(chuàng)建和調(diào)用 COM 對象時,將使用進(jìn)程標(biāo)識進(jìn)行調(diào)用,并且將忽略處理線程正在模擬用戶憑據(jù)的事實。MTS 數(shù)據(jù)包始終認(rèn)為傳入調(diào)用是由同一個用戶帳戶發(fā)出的。用戶帳戶將是 IWAM 帳戶(如果 SOAP 偵聽器所在的虛擬目錄配置為進(jìn)程外運(yùn)行)或 SYSTEM 帳戶(如果 SOAP 偵聽器所在的虛擬目錄配置為進(jìn)程內(nèi)運(yùn)行)。這會導(dǎo)致兩種不同結(jié)果:

由于忽略被模擬的用戶并使用進(jìn)程標(biāo)識進(jìn)行調(diào)用,這種情況下,MTS 角色安全性不是非常有效。

無法將被模擬用戶與 MTS COM 對象區(qū)分開來。例如,調(diào)用 GetDirectCallerName 時不會返回被模擬用戶,而是返回 IWAM 或 SYSTEM。
有關(guān)詳細(xì)信息,請參閱知識庫文章 #Q243437“PRB:默認(rèn)情況下 MTS 和 COM+ 庫數(shù)據(jù)包中的標(biāo)識是不同的”。

疑難解答

本節(jié)將介紹使用 Microsoft SOAP Toolkit 2.0 設(shè)計安全 Web 應(yīng)用程序時遇到的典型問題,以及如何根據(jù)上一節(jié)提供的信息解決這些問題。

拒絕訪問

通過 SOAP 調(diào)用公開的服務(wù)器端對象時,可能出現(xiàn)“拒絕訪問”錯誤,而本地且不通過 SOAP 調(diào)用對象時不會出現(xiàn)此錯誤。您很可能正在以匿名帳戶運(yùn)行服務(wù),并訪問了無法從 IIS 匿名帳戶訪問的資源(文件系統(tǒng)或其它內(nèi)容)。需要更改對此資源的訪問權(quán)限,或者禁止匿名登錄此 Web 服務(wù)。有關(guān)詳細(xì)信息,請參閱身份驗證部分。

基本身份驗證不能正常工作

確保將運(yùn)行服務(wù)的虛擬目錄配置為要求基本身份驗證,并在基本身份驗證設(shè)置中指定了域名(默認(rèn)使用“”)。請參閱基本身份驗證部分。

摘要式身份驗證不能正常工作

閱讀摘要式身份驗證部分列出的要求,并確認(rèn)完全符合這些要求。請認(rèn)真斟酌是否確實需要使用摘要式身份驗證。

Windows 集成身份驗證不能正常工作

檢查客戶端和服務(wù)器是否位于同一個域。如果不是,請按 Windows 集成身份驗證 (NTLM) 部分中的示例所示指定域名和用戶名。如果在“服務(wù)器至服務(wù)器”方案下無法正常工作,請確保兩個服務(wù)器都運(yùn)行 Windows 2000。如果正在 Windows NT4.0 上使用 NTLM,則不適用于“服務(wù)器至服務(wù)器”方案。

SOAP Toolkit 不能通過代理正常工作

檢查是否設(shè)置了 UseProxy 屬性以及是否正確指定了代理服務(wù)器名稱,或者在默認(rèn) Internet Explorer 設(shè)置中對其進(jìn)行了設(shè)置(如果使用這些屬性和名稱)。SOAP Toolkit 2.0 代理支持已經(jīng)通過市場上許多可用代理進(jìn)行了測試(包括 Microsoft Proxy 2.0、ISA 代理、Apache 代理服務(wù)器、Netscape 代理服務(wù)器等)。只有用于 Netscape 代理時出現(xiàn)了問題。

SSL 不能正常工作

這是最常見的問題。通常是由于服務(wù)器未正確配置為支持 SSL 引起的。請參考 SSL 部分中的指導(dǎo)。若要查看服務(wù)器是否啟用 SSL,請使用 Internet Explorer 訪問您的服務(wù) URL。

另一種可能是客戶端不信任服務(wù)器端證書。在客戶端,確保為頒發(fā)服務(wù)器端證書的 CA 安裝了根目錄證書。

如果正在運(yùn)行“服務(wù)器至服務(wù)器”方案,例如嘗試在 ASP 頁中使用 SoapClient 調(diào)用另一臺服務(wù)器,請確保已將為頒發(fā)服務(wù)器端證書的 CA 安裝的根目錄證書安裝到了 LOCAL_MACHINE 存儲區(qū)中。有關(guān)詳細(xì)信息,請參閱 SSL 部分。

SSL 客戶端證書不能正常工作

確保在 SSLClientCertificateName 連接器屬性中正確指定了客戶端證書的名稱和存儲區(qū)。應(yīng)該指定證書主題名稱的公用名稱 (CN) 部分。若要檢查 CURRENT_USERMY 存儲區(qū)中證書的 CN 名稱,請轉(zhuǎn)至 Internet Explorer/“工具”/“選項”/“內(nèi)容”/“證書”菜單,并在可用的客戶端證書列表中選中“頒發(fā)給”。

確??蛻舳俗C書合法,例如,轉(zhuǎn)至 Internet Explorer/“工具”/“選項”/“內(nèi)容”/“證書”菜單,并單擊證書,應(yīng)不提示任何警告并顯示“證書正?!焙汀澳哂凶C書的私有密鑰?!?/FONT>

確保服務(wù)器信任您的客戶端證書,例如,頒發(fā)客戶端證書的 CA 的根目錄證書位于服務(wù)器上的 LOCAL_MACHINERoot 存儲區(qū)中。有關(guān)如何檢查這些內(nèi)容的詳細(xì)信息,請參閱 SSL 客戶端證書部分。

確保運(yùn)行進(jìn)程的帳戶對指定的證書存儲區(qū)具有訪問權(quán)限。請參閱身份驗證問題部分中“服務(wù)器至服務(wù)器”一節(jié)的注釋。

有關(guān)詳細(xì)信息

《設(shè)計 Microsoft Windows 2000 基于 Web 的安全應(yīng)用程序》,Michael Howard、Marc Levy 和 Richard Waymire 編著。

《運(yùn)行 Microsoft Internet Information Server》,Leon Braginski 和 Matt Powell 編著。

知識庫文章 #Q243437,PRB:默認(rèn)情況下 MTS 和 COM+ 庫數(shù)據(jù)包中的標(biāo)識是不同的(英文)。

發(fā)布:2007-03-24 18:00    編輯:泛普軟件 · xiaona    [打印此頁]    [關(guān)閉]
相關(guān)文章:
上海OA系統(tǒng)
聯(lián)系方式

成都公司:成都市成華區(qū)建設(shè)南路160號1層9號

重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓

咨詢:400-8352-114

加微信,免費(fèi)獲取試用系統(tǒng)

QQ在線咨詢