第四章 系統架構與問題解決
4.1 WSDK 介紹與執行架構
4.1.2 SOAP-DSIG 介紹
WS-Security 中提供對 SOAP 進行數位簽章的函式,此函式叫做 SOAP-DSIG,SOAP 數位簽章,函式內定義用數位方式簽章 SOAP 訊息 及確認簽章的句法和處理規則。
下面的範例將說明 SOAP-DSIG 所定義之 TAG:
(001) <?xml version="1.0" encoding="utf-8"?>
(002) <S:Envelope
xmlns:S="http://www.w3.org/2001/12/soap-envelope"
(006) <m:to>http://fabrikam123.com/stocks</m:to>
(007)
(010) wsse:UsernameToken Id="MyID">
(019)
(031) <S:Body Id="MsgBody">
(032) <tru:StockSymbol
xmlns:tru="http://fabrikam123.com/payloads">
QQQ
</tru:StockSymbol>
(033) </S:Body>
(034) </S:Envelope>
開頭兩行是啟動 SOAP。
行(003)啟動與此 SOAP 相關的 HEADER。
行(004)到(008)指定如何路由此 SOAP。
行(009)啟動我們在本規範中定義的 <Security> HEADER。該 HEADER 包含預期接收方的安全性資訊。該元素繼續一直到行(029)為止。
行(010)到(012)指定與本消息相關的安全性權杖。這樣,它就定 義了使用 <UsernameToken> 的客戶端的用戶名稱。請注意,我們在 這裏假定服務知道密碼 — 換句話說,這是個共用的密碼。
行(013)到(028)指定數位簽章。該簽章確保了被簽署元素的完整 性(也就是它們不被修改)。簽章使用了 XML 簽章規範。在本範例 中,簽章是根據從用戶密碼生成的密鑰進行的。
行(014)到(021)描述了數位簽章。
行(015)指定如何規範化(普通化)被簽署的資料。
行(017)到(020)選擇被簽署的元素。
行(017)特別指出 <S:Body> 元素被簽署。在本範例中,只有 SOAP 主體被簽署;一般來說,消息的附加元素(如部分路由 HEADER)應 該被包括在簽章中如 XML 簽章 規範中所定義。
行(022)指定將被簽署的標準化資料形式的簽章值。
行(023)到(027)提供關於在何處能找到與此簽章相關的安全性權 杖的暗示。
行(024)到(025)特別指出安全性權杖可以在特定 URL 找到(拉 出)。
行(031)到(033)包含 SOAP 訊息的主體。
名詞解釋:
已簽署的安全性權杖 — 簽署的安全性權杖 是由 SERVER 端加密簽 署的安全性權杖。
圖 4-3 安全性權杖內容
所有權證明 — 所有權證明是證明過程中用來說明發送方對資訊的 認識的資料,這些資訊僅為安全性權杖的聲明發送方所知。
完整性 — 完整性是保證資訊在傳輸過程中不被修改的過程。
機密性 — 機密性是保護資料使得授權參與者或安全性權杖所有者 才能夠流覽資料的過程。
摘要 — 摘要是八位元的加密驗證。
簽章 — 簽章是所有權證明和摘要的加密認定。並不能夠達到不可抵 賴性。
附件 — 附件是指與 SOAP 一起傳遞的附加資料,但附件並不是 SOAP 的內容。
SOAP-DSIG 應用在我們專題的簽章鈕上,也就是說按下簽章就會呼叫 SOAP-DSIG 函式裡的功能來簽章我們的 XML 文件。
圖 4-4 本專題簽章程式 4.1.3 測試簽章與加密
系統或程式的測試是一件重要的工作,從測試當中能夠發現系統 或程式的錯誤,加以改進後才能讓系統或程式趨於完美的境界。
本次測試是針對 4 份不同大小的 XML 文件做簽章 加密 與簽章+加 密並計算所需執行的時間,4 份文件大小分別為 14KB 64KB 116KB 221KB
按下簽章鈕就會呼叫SOAP-DSIG 函式
如圖 4-5 所示
圖 4-5 測試程式
圖 4-6 測試時間表
簽章 加密 簽章+加密
14KB XML 約 0.12 秒 約 0.09 秒 約 0.15 秒 64KB XML 約 0.32 秒 約 0.29 秒 約 0.66 秒 116KB XML 約 0.60 秒 約 0.69 秒 約 0.95 秒 221KB XML 約 1.01 秒 約 0.99 秒 約 1.33 秒
由上表可知時間與文件大小成正比,文件越大所需時間越多,但
是超過 221KB 以上的文件加密時可能會出錯,雖然出錯的次數很少,
約 20 次中才會出錯一次,算是小 bug 但仍需要改進,這樣才能使的 本系統更完美。
4.2 專題遇到困難與解決方法
這次專題製作過程,最大的問題可以說就是資料收集,還有 就是我們缺乏對 XML 有相關研究的人給我們指導,首先遇到的困 難就是 XML 簽章很難在市面上的書籍找到資料,所以必須上網路 找 XML 簽章的資源來參考,但找到的資料都是些概念的東西,很 少提到實作,為了解決困難只能四處尋找國外 XML 討論區,問有 關簽章實作的問題,最後終於解決困難,之後我們選擇了 VS.NET 來撰寫簽章的程式,程式一開始要先 parser XML,在並使用.NET 的簽章函式庫對裡面的 Tag 做簽章,簽章的 Tag 必須按照 W3C 的 規定來定義,實作簽章的問題到次算是解決了。
XML 簽章若要使用在 Web Service 上,另一個困難就是我們 的 Client 端必須能呼叫 Client 端的函式庫,所以不能使用 ASP 來開發,因為 ASP 是呼叫 Server 端的函式庫,為了克服這個困 難,曾經使用到 ActiveX 來編輯 Client 端的程式,後來卻失敗 了,最後找到 WSDK 來開發 Client 端,WSDK 能讓 Client 有能力 處理 XML 簽章,從以上兩個困難可以知道我們只要遇到問題就必 須去找 XML 國外研究與應用的資料,所以時間都花 Research 與 消化資料上。為了節省想要學習 XML 學弟妹的寶貴時間,所以我 們製作了 XML Q&A。
4.2.1 XML Q&A
問:XML 應用在哪方面?
答:主要是用在電子商務中,此外也包括企業夥伴間、上下游工業中 資料的互通有無,行政單位公文的傳送以及醫療單位中病例資料的資 源分享,有太多的例子!
問:Markup language (標記語言)的特性
答:具可攜性、完整性、穩定性、彈性且應用廣泛。
一言以蔽之,兩者都是處理與使用者互動的瀏覽介有關 CSS 的資料,
可查看 htt 問:XML 與 ASP 及 PHP 的比較
答:ASP 事實上不算是語言,它只是 Active Server Pages 的縮寫,
在 ASP 中使用的語法實際上是 Visual Basic 的劇本檔 (script)版,
最大的缺陷則為 ASP 在微軟 Internet Information Server(IIS)的 原生性,這造成它只能用在 Win32 平台的伺服器的限制。ASP 比 PHP 慢又笨重,連穩定性也不好,一些專業人士因為熟悉 Visual Basic 而對 VBScript 的 ASP 出了問題比較好處理。ASP 是 IIS 內建的程式,
取得不費力且又容易執行。PHP 版是一種內嵌在 HTML 語法的劇本 (script) 語言,它的語法混合了 C、Java、Perl 及一些特殊的 PHP 風格的語法。 主要目的是能更快速地開發動態的網頁。兩者皆可與 XML 互相搭配!
問:為何我們仍使用 HTML?
答:因為普及性及歷史性,要轉移至 XML 的技術雖然不難(因為皆屬 於 SGML 語言),但總要點時間,等大家熟悉了這套語言,相信 XML 將 會雄霸天下!
問:HTML 仍有巢狀結構, 故巢狀結構算是 XML 的優勢?
答:不是!不過它在網路上的應用因為其文件可包含許多巢狀元素,
使其可在多重遠端伺服器中傳送。XML 是目前最複雜的傳送資料格式
-網際網路即可視為一個巨大的 XML 資料庫!
第五章 未來發展與心得
5.1 系統未來展望
剛開發本專題時,我們是一點頭緒也沒有,而且時間都花在找資 料上,找到有用資料後,我們就開始規劃本專題,考量本組各組員的 能力與參考現有資料之後,基本上我們能對XML進行數位簽章並能應 用於WEB SERVICE上在實作很足夠了,接下來是介紹我們希望能夠完 成的功能,以下就是本專題可以再加強的部分:
(1)利用IC 卡來存放Key:本次系統沒有IC 卡相關設備,Key的管理 是採用內嵌於程式之中,但若用IC 卡,則系統將變得更安全更有彈 性空間。
(2) 加強人機介面外觀設計:本組組員都沒有美術天分,加上時間短 促,所以外觀需要再花時間修改。
(3)客戶端對客戶端能互傳加密文件:本系統只能客戶端對伺服器端 互傳文件,要使用於客戶端對客戶端,技術上還需要在突破。
(4)應用於電子商務或公文交換上:本系統可結合訂單系統或是公文
傳遞系統,對需要的 XML 檔案做簽驗章的動作,可以增加網路上交換
決定平台時,花了不少時間,請教了助教以及學長後,終於決定以 VS.Net 來作本專題 Web Service 的平台。
在製作專題時,我們學到了不少程式開發的經驗、報告寫作的技 巧,以及如何有效的搜尋資料,更學到了分工合作是一項很重要的 事,光靠個人,是無法完成這項堅鉅的工作,也真正了解到團隊研發 的過程,雖然組員之間有時會鬧的不愉快,但是都是為了專題能夠快 點完成,這些是我們作專題得到最大的收獲。
參考資料:
[1]W3C XML-Signature Syntax and Processing
http://www.w3.org/TR/xmldsig-core/
[2] WSDK Newsgroup
http://msdn.microsoft.com/newsgroups/default.asp?url=/newsg roups/loadframes.asp?icp=msdn&slcid=us&newsgroup=microsoft.
public.webservices.wsdk
[3] An Introduction to the XML Signatures
http://www.xml.com/pub/a/2001/08/08/xmldsig.html
http://www-106.ibm.com/developerworks/xml/library/s-xmlsec.
html/index.html#h5816
[4] Programming with the Web Services Development Kit(WSDK)
http://msdn.microsoft.com/library/default.asp?url=/library/
en-us/dnwebsrv/html/progwsdk.asp
[5] The XML for ASP.NET Developers CodeBank contains samples of using different XML related classes within the .NET
Framework.
http://www.xmlforasp.net/
[6] Microsoft's support for the new W3C XML Signature
standardhttp://www.dotnet247.com/247reference/msgs/12/6
0062.aspx
[7] PROFESSIONAL XML 作者:Nikola Ozu 出版:WROX
[8] The System.Security.Cryptography.Xml namespace contains an XML model for exclusive use within the .NET Framework security system.
http://msdn.microsoft.com/library/default.asp?url=/library/
en-us/cpref/html/frlrfSystemSecurityCryptographyXmlSignedXm lClassTopic.asp
[9] A Programmer’s Introductiom to C# ,作者:Eric Gunnerson,
旗標出版
[10]JAVA 密碼學,作者:Johnathan Knudsen,O´Reilly 出版
[11]JAVA 安全防護,作者:Scott Oaks ,譯者:高秀美 n,O´Reilly 出版