應用WSDK - 實踐Web Services的數字簽名(上) (轉)
應用WSDK - 實踐 Services的數字簽名:namespace prefix = o ns = "urn:schemas--com::office" />
小氣的神
2002-12-05
Article Type: In-Depth
難度等級:8.2/9
版本:1.36
老實說有關Security()的話題,從來不是我的強項,如果可以我寧願多說一些有關企業級應用開發、有關、COM+的話題。不過Web Services是我喜歡的、Inte是我喜歡的,所以有關Web Services的安全話題是不能逃避的,無論我對這方面多麼的貧乏,嘗試還是願意的。世界上的許多事情就是這麼奇妙的:我的老哥一心向往,不想畢業後卻去了海運局工作了很久;我的好友立志30歲才結婚,沒想到居然網戀成功,娶得一個貌美賢惠的網友,加上結婚生子現在也還是30未到;而我一直很喜歡廣州這座城市的氛圍,沒想到會迷上廣州的飲食,有好吃的城市才是美麗的城市:)
Microsoft XML Web Services 的第一個版本,也就是我們現在用的最多的版本,沒有提供對P訊息進行安全方面處理的支援,也可以說那時s/understanding/default.x?pull=/library/en-us/dnglobspec/html/wssecurspecindex.asp">WS-Security 還沒完成。WSDK則增加了WS-Security的支援和處理。
最簡單的說WS-Security主要提供了三個方面的機制來保護我們年輕的Web Services:
1. Security token propagation (解決Security Credentials可以被在間進行傳播)
2. Message integrity (對訊息是否在中間點是否被修改進行驗證[Verify])
3. Message Confntiality ( 保證訊息在未前依然是機密有效的)
生活最通俗的解釋是透過戲劇來表現,比如《哈姆雷特》。哈姆雷特,這個在城堡中游蕩的著名,與丹麥國王克勞底斯對決,揚言要殺害許多城堡中居民,克勞底斯則決定幹掉哈姆雷特而一勞永逸;於是他派了親信羅森克勞茨和古登斯坦送哈姆雷特去英格蘭。他倆攜帶一封密信,信上要求一到英格蘭就立即將哈姆雷特處死,和哈姆雷特一起的旅途是漫長和極具挑戰性的,但是國王、羅森克勞茨和古登斯坦都忘了採取措施來保證:
1. 哈姆雷特不能閱讀這封信
2. 哈姆雷特到達英格蘭前不能修改這封信
最後這個著名的丹麥駭客,在另外兩人熟睡的時候,偷看了信的內容,輕易地將要處死的人改為熟睡的兩個國王親信,並且在信封上蓋上他父親前丹麥國王的印章。作為國王的兩個親信從未想過要看這份信的內容,而且也從未想到自己一到英格蘭就被處死。
那麼我們看到有關安全最基本的三個問題:
1. 丹麥國王克勞底斯要有辦法將信安全的送到英格蘭國王的手上。
2. 英格蘭國王如何驗證信的內容是否為原始信件。
3. 在英格蘭國王沒有開啟信件之前,信中的內容依然是高度機密的。
而當這些問題發生在Internet和Web Services就更有趣了,WS-Security就是完成這個功能的。(如果你哈姆雷特的故事感興趣,除了看這篇文件最早我是在安全性指南[Professional Java security]上看到的) 這篇文章也同樣是Web Services有關安全的開始,下面我們要做的就是上面將的第一個問題,解決Security Credentials在網路間進行傳遞的問題。
我將利用WSDK來實踐一個Web Services的客戶端使用UsernameToken數字簽名一個SOAP 訊息,同時Web Services又是如何處理這個被UsernameToken簽名的訊息。我儘量簡化了有關的處理和流程,試圖說明整個的過程,從後面附帶的中你可以看到這一點。
整個過程我們會生產一個Web Services和一個Web Services的客戶端,同時最多的還是進行一些。執行透過的環境 XP SP2 / VS.NET 1.0 / WSDK 5217+
生成端部分:
1. 建立一個Web Services 專案 SignSOAPusiame。
2. 加入 Microsoft.Web.Services.DLL 引用。
3. 點選SignSOAPUsingName.asmx.cs 加入下面的程式碼:
using System.Web.Services.Protocols ;
using Microsoft.Web.Services.Security ;
using Microsoft.Web.Services;
using System.Security.Cryptography ;
4. 去到HelloWorld 的註釋程式碼並加入下面的程式碼:
[WebMethod]
public string HelloWorld()
{
SoapContext requestContext = HttpSoapContext.RequestContext ;
string retval = "User unknown" ;
if ( requestContext == null )
throw new ApplicationException( " Non-SOAP request" ) ;
if ( !IsValid( requestContext ) )
{
throw new SoapException( "The security infomation Supplied was not valid .", new System.Xml.XmlQualifiedName("Bad Tokens", "" ) ) ;
}
UsernameToken theToken = GetUsernameToken( requestContext.Security ) ;
if ( theToken != null )
{
return "Hello " + theToken.Username ;
}
return retval ;
}
5. 在web.config中配置WSDK的Microsoft.Web.WebServices
6. 加一個新的類實現 IPassProvider
using System;
using System.Security.Pessions ;
using System.Security.Cryptography ;
using Microsoft.Web.Services.Security ;
namespace SignSOAPUsingName
{
[SecurityPermission(SecurityAction.Demand, Flags=SecurityPermissionFlag.UnmanagedCode)]
public class PasswordProvider : IPasswordProvider
{
HashAlgorithm hash ;
public PasswordProvider()
{
hash = new SHA1CryptoServiceProvider() ;
}
public string GetPassword( string userName )
{
byte[] encodedUsername = System.Text.Encoding.UTF8.GetBytes( userName ) ;
Array.Reverse(encodedUsername); //這裡我簡化了處理,先不考慮那些加密
return Convert.ToBase64String(encodedUsername);
}
}
}
7. 在web.config中配置PasswordProvider
8. 執行和Build應用程式,F5執行看Web Services是否正常執行
特別:
本文原創,CSDN署名首發,所有文字和圖片版權所有。未經授權請勿傳播、轉載或改編。
如果有問題或建議,to:請發電子給new2001@.com">請發電子郵件給new2001@msn.com
歡迎訪問我的WebSite:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-977218/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 數字簽名的原理和應用
- ActiveX控制元件數字簽名實踐(免費簽名)控制元件
- 數字簽名(java) (轉)Java
- 用C++Builder建立數字簽名 (轉)C++UI
- iOS應用簽名(上)iOS
- 數字簽名
- Web Services Security 的簽名流Web
- 數字簽名原理
- 證書的數字簽名和認證 (轉)
- iOS逆向 應用重簽名+微信重簽名實戰iOS
- 大話數字簽名
- Elgamal數字簽名原理GAM
- 加密與數字簽名加密
- iOS逆向 - 應用簽名原理及重簽名 (重籤微信應用實戰)iOS
- 如何關閉win10的數字簽名_win10禁用數字簽名的方法Win10
- 取消WindowsXP下驅動程式數字簽名(轉)Windows
- 數字簽名是什麼?
- applet數字簽名APP
- 給軟體數字簽名
- win10 如何禁用數字簽名 win10 關閉數字簽名方法Win10
- java使用RSA加密方式,實現數字簽名Java加密
- RSA加密解密及數字簽名Java實現加密解密Java
- Authenticode簽名對未簽名程式碼的應用
- 在.NET的Windows桌面應用中使用Amazon的Web Services (轉)WindowsWeb
- iOS逆向——應用簽名及重簽名原理iOS
- win10 禁止驗證數字簽名方法 win10 如何禁用數字簽名Win10
- 加減密和數字簽名
- iOS應用簽名(下)iOS
- Android 應用簽名Android
- windows10怎麼關閉數字簽名 win10永久關閉數字簽名的方法WindowsWin10
- MVC應用程式使用Web Services(asmx)MVCWebASM
- ActiveX控制元件 數字簽名 簡明指南 (轉)控制元件
- Java 操作PPT數字簽名(一):新增、檢測、刪除簽名Java
- Java 新增數字簽名到Excel以及檢測、刪除簽名JavaExcel
- 從數字簽名的工作原理看電子商務安全(轉)
- win10如何永久禁用數字簽名_win10怎麼關閉禁用數字簽名Win10
- Android 安全加密:數字簽名和數字證書Android加密
- Android安全加密:數字簽名和數字證書Android加密