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

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

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

AMTeam.org

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


Kirill Gavrylyuk

測(cè)試組長(zhǎng),Web 數(shù)據(jù) SOAP 組

Microsoft Corporation

2001年7月

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

簡(jiǎn)介

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

重要規(guī)則

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

身份驗(yàn)證

授權(quán)

審核

保密

完整性

可用性

認(rèn)可

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

基本

摘要式

Kerberos

Windows NTLM

SSL 客戶端證書(shū)

基于 SOAP 頭的身份驗(yàn)證

代理身份驗(yàn)證

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

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

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

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

可用性確保不會(huì)拒絕合法用戶對(duì)請(qǐng)求的資源的訪問(wèn)。可用性技術(shù)的示例包括負(fù)載平衡以及硬件和軟件的故障轉(zhuǎn)移。SOAP Toolkit 已成功通過(guò)了 Microsoft Application Center 負(fù)載平衡軟件的測(cè)試。

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

身份驗(yàn)證

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

身份驗(yàn)證握手是如何進(jìn)行的?每個(gè)身份驗(yàn)證握手都是如下開(kāi)始:

客戶端發(fā)出頁(yè)面請(qǐng)求。

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

WWW 驗(yàn)證它支持的每一個(gè)身份驗(yàn)證方法。

如何使用 SoapClient 驗(yàn)證自身?如果 Web 服務(wù)要求身份驗(yàn)證(基本、摘要式、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 時(shí),只有在調(diào)用遠(yuǎn)程方法時(shí)才必須設(shè)置 SoapClient 上的 ConnectorProperties。

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

SoapClient.mssoapinit

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

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

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è)置如何要求身份驗(yàn)證?若要在服務(wù)器上更改特定虛擬目錄的身份驗(yàn)證設(shè)置,請(qǐng)執(zhí)行下列操作:

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

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

匿名訪問(wèn)

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

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

基本身份驗(yàn)證

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

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

取消選中“匿名訪問(wèn)”。

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

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

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

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

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

摘要式身份驗(yàn)證

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

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

取消選中“匿名訪問(wèn)”。

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

使用摘要式身份驗(yàn)證具有以下要求:

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

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

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

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

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

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

Windows 集成身份驗(yàn)證 (NTLM)

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

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

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

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

優(yōu)點(diǎn):NTLM 比基本和摘要式身份驗(yàn)證更安全,因?yàn)樗蝗菀资艿街貜?fù)攻擊。由于依賴 Windows 登錄過(guò)程,因此在 Intranet 方案中速度很快。

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

Kerberos 身份驗(yàn)證

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

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

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

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

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

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

表 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

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

代理支持和身份驗(yàn)證

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

直接訪問(wèn)

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

dim SoapClient

set SoapClient = createobject("MSSoap.SoapClient")

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

Quote = SoapClient.GetQuote()

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

試圖訪問(wèn) Intranet 之外的網(wǎng)站時(shí),Internet Explorer Web 瀏覽器將通過(guò)在 IE 設(shè)置中指定的默認(rèn)代理服務(wù)器。您可以通過(guò) IE/“工具”/“選項(xiàng)”/“連接”/“局域網(wǎng)設(shè)置”對(duì)話框查看這些設(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()

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

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

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

若要在連接到其它特定服務(wù)器時(shí)繞過(guò)代理,請(qǐng)單擊“高級(jí)”按鈕。可以在“例外”編輯控件中列出要繞過(guò)的服務(wù)器,各個(gè)服務(wù)器名稱之間用分號(hào)隔開(kāi)??梢允褂猛ㄅ浞?.soap-company.com”繞過(guò)名稱中含有 .soap-company.com 的所有服務(wù)器。

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

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

通過(guò)指定代理連接

可以指定哪個(gè)代理使用 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()

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

代理身份驗(yàn)證

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

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

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

SSL 和客戶端證書(shū)

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

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

何謂 X.509 證書(shū)?

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

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

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

CURRENT_USERMY,個(gè)人證書(shū)存儲(chǔ)區(qū),用于當(dāng)前登錄的用戶,對(duì)其它登錄用戶不可見(jiàn)

LOCAL_MACHINEMY,個(gè)人證書(shū)存儲(chǔ)區(qū),用于所有用戶

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

為 SSL 連接配置客戶端

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

雙擊包含證書(shū)的文件,打開(kāi)證書(shū)瀏覽器窗口。

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

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

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

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

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

執(zhí)行 SSL 連接

嘗試打開(kāi)到 Web 服務(wù)器的 SSL 連接。若要實(shí)現(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

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

在 IIS 4.0 上

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

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

啟用“訪問(wèn)本資源時(shí)要求安全通道”。

在 IIS 5.0 上

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

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

啟用“要求 SSL”。

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

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

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

客戶端證書(shū)身份驗(yàn)證

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

在服務(wù)器上配置客戶端證書(shū)身份驗(yàn)證

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

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

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

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

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

使用由 CA 而不是默認(rèn)信任的頒發(fā)機(jī)構(gòu)(例如 Verisign 或 Thawte)頒發(fā)的客戶端證書(shū)時(shí),需要確保該 CA 根目錄證書(shū)存儲(chǔ)在服務(wù)器上的 LOCAL_MACHINERoot 存儲(chǔ)區(qū)中,而不是存儲(chǔ)在 CURRENT_USERRoot 存儲(chǔ)區(qū)中。默認(rèn)情況下,向?qū)? CA 的證書(shū)放置在 CURRENT_USERRoot 中,這使該證書(shū)對(duì) IIS 不可見(jiàn),因?yàn)樗褂貌煌挠脩魩簟?/FONT>

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

若要忽略客戶端證書(shū),請(qǐng)?jiān)?IIS 5.0 上選擇“忽略客戶端證書(shū)”或在 IIS 4.0 上選擇“不接受客戶端證書(shū)”;

若要接受但不要求客戶端證書(shū),請(qǐng)選擇“接受客戶端證書(shū)”;

若要要求客戶端證書(shū),請(qǐng)選擇“要求客戶端證書(shū)”;

若要要求客戶端證書(shū)與指定的用戶帳戶匹配,請(qǐng)選擇“要求客戶端證書(shū)”以及“啟用客戶端證書(shū)映射”。此時(shí),您需要具有一個(gè)文件,該文件包含要映射的導(dǎo)出客戶端證書(shū)。要獲得該文件,請(qǐng)?jiān)诳蛻舳俗C書(shū)所在的客戶端計(jì)算機(jī)上,執(zhí)行以下操作:

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

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

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

在客戶端使用 SSL 客戶端證書(shū)

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

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

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

注意:準(zhǔn)備客戶端證書(shū)的請(qǐng)求時(shí),通常會(huì)詢問(wèn)您是否使用 CURRENT_USER 或 LOCAL_MACHINE 存儲(chǔ)區(qū)來(lái)存儲(chǔ)證書(shū)。

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

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

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

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")

'建立證書(shū)的辨別名稱

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

if bUseLM then

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

end if

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

' CURRENT_USER 存儲(chǔ)區(qū)中

'創(chuàng)建請(qǐng)求,指定證書(shū)用途(客戶端身份驗(yàn)證)

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 文件將包含一個(gè) Base64 編碼的 PKCS10 請(qǐng)求。若要在從 CA 接收到 SSL 客戶端證書(shū)后進(jìn)行安裝,請(qǐng)使用下列腳本:

FILE_CERTIFICATE = "certnew.cer"

CERT_SYSTEM_STORE_LOCAL_MACHINE= 131072

bUseLM = true

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

if bUseLM then

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

enroll.MyStoreFlags= CERT_SYSTEM_STORE_LOCAL_MACHINE

enroll.RequestStoreFlags= CERT_SYSTEM_STORE_LOCAL_MACHINE

end if

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

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

enroll.acceptFilePKCS7(FILE_CERTIFICATE)

該腳本將從指定文件獲取證書(shū),并將其安裝到 IIS 保存服務(wù)器證書(shū)的 LOCAL_MACHINE 存儲(chǔ)區(qū)。可以使用這些腳本自動(dòng)進(jìn)行配置。

如何使 SoapClient 使用客戶端證書(shū)?這相當(dāng)容易。您需要了解證書(shū)保存在哪個(gè)存儲(chǔ)區(qū)以及證書(shū)公用名稱(主題名稱的 CN 部分)。當(dāng)從 IE5 或 Microsoft Management Console(mmc.exe)瀏覽時(shí),公用名稱顯示在“頒發(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 存儲(chǔ)區(qū)提取 CN=MyCert 的證書(shū),并使用此證書(shū)請(qǐng)求安全服務(wù)。也可以顯式指定要使用的存儲(chǔ)區(qū):

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

證書(shū)名稱不區(qū)分大小寫(xiě),但存儲(chǔ)區(qū)名稱區(qū)分大小寫(xiě)。

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

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

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

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

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

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

信用卡號(hào)驗(yàn)證服務(wù):要求 SSL 連接和客戶端證書(shū)身份驗(yàn)證。

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

SSL 和客戶端證書(shū)支持的已知局限性

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

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

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

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

身份驗(yàn)證問(wèn)題

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

以匿名登錄方式訪問(wèn)文件和其它資源

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

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

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

不能執(zhí)行 NTLM 身份驗(yàn)證,因?yàn)樗哂形删窒扌裕ㄕ?qǐng)參閱身份驗(yàn)證部分)。

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

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

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

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

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

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

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

疑難解答

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

拒絕訪問(wèn)

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

基本身份驗(yàn)證不能正常工作

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

摘要式身份驗(yàn)證不能正常工作

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

Windows 集成身份驗(yàn)證不能正常工作

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

SOAP Toolkit 不能通過(guò)代理正常工作

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

SSL 不能正常工作

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

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

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

SSL 客戶端證書(shū)不能正常工作

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

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

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

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

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

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

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

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

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

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

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

咨詢:400-8352-114

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

QQ在線咨詢