日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

WCF分布式安全開發(fā)實(shí)踐(5):傳輸安全模式之Certificate身份驗(yàn)證

 昵稱10504424 2013-07-17
 今天繼續(xù)WCF分布式安全開發(fā)實(shí)踐(5):傳輸安全模式之Certificate身份驗(yàn)證。本文介紹的內(nèi)容主要是:主要是傳輸安全模式的Certificate身份驗(yàn)證方式,基于WSHttpBinding綁定協(xié)議的實(shí)現(xiàn)過(guò)程。主要內(nèi)容:基本概念,然后是制作證書、SSL證書設(shè)置、服務(wù)端配置、客戶端配置、總結(jié)。
【0】傳輸安全模式之Certificate身份驗(yàn)證:
       傳輸安全模式之Certificate證書身份驗(yàn)證需要服務(wù)器需要一個(gè)有效的可用于安全套接字層 (SSL) 的 X.509 證書,并且客戶端必須信任此服務(wù)器證書。 這里使用https協(xié)議??蛻舳颂峁┯行У?span style="FONT-FAMILY: Arial">Certificate證書。 服務(wù)器通過(guò)證書來(lái)檢驗(yàn)客戶端身份的有效性。

1.身份驗(yàn)證(服務(wù)器):提供證書,(使用 HTTPS)
2.身份驗(yàn)證(客戶端):提供證書

   WCF安全模式Certificate證書身份驗(yàn)證的架構(gòu)如下:

    
    客戶端首先要提供自己的證書,服務(wù)器對(duì)此進(jìn)行驗(yàn)證,有效后,服務(wù)器會(huì)和客戶端嘗試建立SSL安全套接層,會(huì)使用商定的密碼對(duì)消息簽名,客戶端使用證書加密 數(shù)據(jù),服務(wù)端使用證書解密數(shù)據(jù),保證數(shù)據(jù)的安全和機(jī)密性,消息簽名放置被篡改。這個(gè)鏈接是唯一的。通信結(jié)束以后會(huì)關(guān)閉連接。
   是制作和設(shè)置SSL證書的過(guò)程,和傳輸安全模式的過(guò)程一樣,這里直接使用相同證書和端口。延續(xù)以前的風(fēng)格。
【1】制作證書:
(1)使用makecert 工具:Microsoft Visual Studio 2008-->Visual Studio Tools-->Visual Studio 2008 命令提示行。
輸入:makecert -sr localmachine -ss My -n CN=WCFServerPK -sky exchange -pe -r
輸入:makecert -sr localmachine -ss My -n CN=WCFClientPK -sky exchange -pe -r。
-這里制作了連個(gè)證書,主要只使用一個(gè)WCFServerPK,可以到出密鑰文件pfx,后續(xù)我們要導(dǎo)入到其他存儲(chǔ)區(qū),設(shè)置為信任的證書。WCFClientPK -是為以后文章準(zhǔn)備的,也是可以設(shè)置為信任的證書。

 (2) 打 開瀏覽器---->Internet 選項(xiàng)----->內(nèi)容----->證書----->個(gè)人,默認(rèn)是保存到當(dāng)前用戶CurrentUser,你會(huì)看到剛才制作的證書。這個(gè) 可以查看部分證書,但是功能有限。我們還是使用控制臺(tái)證書管理工具。

 (3)使用MMC建立證書控制單元查看證書的信息:
  開始--運(yùn)行--MMC--控制臺(tái)--添加刪除單元--證書--當(dāng)前用戶和計(jì)算機(jī)各添加一個(gè)。能查看和管理CurrentUser和LocalMachine的證書。如圖:

(4)導(dǎo)入證書到信任的人和信任的CA機(jī)構(gòu)里。步驟如下:
    1.導(dǎo)出證書文件,帶密鑰的pfx文件。使用mmc,保存到桌面位置(方便查找)。這里記住你制作證書的密碼。要使用。
    2.導(dǎo)入證書到信任的人。使用任務(wù)-導(dǎo)入向?qū)?-選擇證書文件,導(dǎo)入即可。
    3.導(dǎo)入證書到信任的機(jī)構(gòu),使用任務(wù)-導(dǎo)入向?qū)?-選擇證書文件,導(dǎo)入即可。這個(gè)證書就被信任了。
【2】SSL證書設(shè)置:
   下面我們來(lái)設(shè)置SSL端口證書,這個(gè)步驟很重要。不然客戶端無(wú)法查找到WCF服務(wù)。
【2.1】查詢SSL證書設(shè)置:
     需要為使用的端口SSL注冊(cè)證書。Windows Server 2003 或 Windows XP,則使用 HttpCfg.exe 工具。Windows Server 2003 中已安裝該工具。下載該工具/Files/frank_xl/HttpcfgFrankXuLei.rar。如果運(yùn)行的是 Windows Vista,則使用已安裝的 Netsh.exe 工具。在Windows\System32目錄下。運(yùn)行此工具需要命令窗口切換到相應(yīng)工具解壓縮目錄下,我直接放置到D盤根目錄。方便查找。
     (1)在 Windows Server 2003 或 Windows XP 中,通過(guò) queryssl 開關(guān)使用 HttpCfg.exe 工具查看當(dāng)前端口配置,在命令窗口切換到HttpCfg在文件目錄,你如下面代碼:
        httpcfg query ssl
  
  (2)Vista:
       netsh http show sslcert

    查詢SSL端口證書設(shè)置信息,如圖:

【2.2】設(shè)置SSL證書:

    (1)在 Windows Server 2003 或 Windows XP:
       httpcfg set ssl -i 0.0.0.0:9001-h 9174185b2860b6d5ec3de133d5fcc4e1419b09e5
    (2)Vista:
       netsh http add sslcert ipport=0.0.0.0:9001 certhash=9174185b2860b6d5ec3de133d5fcc4e1419b09e5
  appid={11111111-2222-3333-4444-qqqqqqqqqqqqq} 。最后一個(gè)GUID.你可以隨便編寫一個(gè)。使用工具也可以。certhash 參數(shù)指定證書的指紋。ipport 參數(shù)指定 IP 地址和端口,功能類似于前述 Httpcfg.exe 工具的 -i 開關(guān)。appid 參數(shù)為可用于標(biāo)識(shí)所屬應(yīng)用程序的 GUID。
 【2.3】刪除SSL證書:
    (1)Windows Server 2003 和 Windows XP 中:
    httpcfg delete ssl -i 0.0.0.0:9001-h 9174185b2860b6d5ec3de133d5fcc4e1419b09e5
    (2)Vista:
    Netsh http delete sslcert ipport=0.0.0.0:9001。
【3】服務(wù)端配置:
    SSL端口證書配置完成以后,我們來(lái)配置服務(wù)端相關(guān)的文件,首先要實(shí)現(xiàn)自定義身份驗(yàn)證的代碼。我們就要對(duì)WCF服務(wù)端進(jìn)行配置,直接使用配置文件,這里簡(jiǎn)單。也可以使用代碼來(lái)完成。
    (1)服務(wù)類定義:
     這里服務(wù)類就一個(gè)方法就是更具用戶的name來(lái)打印調(diào)用時(shí)間,代碼如下:

復(fù)制代碼
 //1.服務(wù)契約
    [ServiceContract(Namespace = "http://www.cnblogs.com/frank_xl/")]
    
public interface
 IWCFService
    {
        
//操作契約

        [OperationContract]
        
string SayHello(string
 name);

    }
    
//2.服務(wù)類,繼承接口。實(shí)現(xiàn)服務(wù)契約定義的操作

    public class WCFService : IWCFService
    {
        
//實(shí)現(xiàn)接口定義的方法

        public string SayHello(string name)
        {
            Console.WriteLine(
"Hello! {0},Calling at {1} "
, name,DateTime.Now.ToLongTimeString());
            
return "Hello! " +
 name;
        }
    }
復(fù)制代碼

    (2)傳輸安全模式配置:
       使用傳輸安全模式,采用客戶端Certificate證書身份驗(yàn)證策略,transport安全模式下的Certificate證書驗(yàn)證方式要在客戶端基本Certificate證書驗(yàn)證類型下實(shí)現(xiàn)。配置信息如下:

復(fù)制代碼
    <wsHttpBinding>
      <binding name="BindingConfiguration">
        <security mode="Transport">
          <transport clientCredentialType="Certificate"/>
        </security>
      </binding>
    </wsHttpBinding>
復(fù)制代碼

   這個(gè)配置要應(yīng)用到服務(wù)的終結(jié)點(diǎn)配置上。才會(huì)生效。
    (4)證書使用:
    在服務(wù)行為節(jié)點(diǎn)屬性里配置使用證書WCFServerPK,這個(gè)服務(wù)器證書就是SSL證書。配置信息如下:

復(fù)制代碼
         serviceBehaviors>
        <behavior name="WCFService.WCFServiceBehavior">
          <serviceMetadata httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
          <serviceCredentials>
              <serviceCertificate  storeName="My"  x509FindType="FindBySubjectName" findValue="WCFServerPK" storeLocation="LocalMachine"/>
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>
復(fù)制代碼

       (5)IE查看元數(shù)據(jù):
      配置好托管宿主以后,我們就可以啟動(dòng)宿主。然后在瀏覽器里輸入元數(shù)據(jù)終結(jié)點(diǎn)。點(diǎn)擊瀏覽會(huì)看到如下界面:

   使用的是https協(xié)議, 元數(shù)據(jù)交互也提供了SSL保護(hù)。這里可以點(diǎn)擊繼續(xù)瀏覽,才能看到服務(wù)的信息。如下:

    我們可以在這里點(diǎn)擊鏈接,根據(jù)借助svcutil來(lái)產(chǎn)生客戶端文件。我們這里不做嘗試,客戶端我們直接在項(xiàng)目里添加引用,借助Visual Studio來(lái)完成。
【4】客戶端配置:
    這個(gè)過(guò)程和之前的傳輸安全模式下,添加服務(wù)的過(guò)程一樣。直接引用。
    (1)引用元數(shù)據(jù):
    因?yàn)榉?wù)的元數(shù)據(jù)交換節(jié)點(diǎn)啟用了Https協(xié)議,我們?cè)诳蛻舳隧?xiàng)目添加元數(shù)據(jù)地址https://computer:9001/mex查找服務(wù)信息的時(shí)候,會(huì)提示SSL證書信息,界面如下:
 
    這個(gè)證明我們的服務(wù)端證書設(shè)置已經(jīng)起作用,而且是可信的。現(xiàn)在我們點(diǎn)擊Yes。繼續(xù)就會(huì)添加完畢服務(wù)引用。過(guò)程和普通的添加服務(wù)元數(shù)據(jù)引用一樣,會(huì)產(chǎn)生客戶端相關(guān)代碼文件。輸入NameSpace,等待完成即可。  
    (2)配置文件:
    客戶端配置文件使用默認(rèn)設(shè)置,主要是安全模式的設(shè)置要如下,與服務(wù)端匹配。使用證書驗(yàn)證方式。

復(fù)制代碼
<security mode="Transport">
                        <transport clientCredentialType="Certificate" proxyCredentialType="None"
                            realm="" />
                        <message clientCredentialType="Windows" negotiateServiceCredential="true"
                            establishSecurityContext="true" />
                    </security>
復(fù)制代碼

    這里我們可以在配置文件里設(shè)置證書,WCF客戶端會(huì)根據(jù)配置文件終結(jié)點(diǎn)服務(wù)行為的證書配置信息來(lái)查找客戶端證書。
提交給WCF服務(wù)端。配置代碼如下:

復(fù)制代碼
      <behaviors>
        
<endpointBehaviors>
          
<behavior name="endpointBehavior">
            
<clientCredentials>
              
<clientCertificate storeName="My"  
                                 x509FindType
="FindBySubjectName" 
                                 findValue
="WCFClientPK" 
                                 storeLocation
="CurrentUser"/>
            
</clientCredentials>
          
</behavior>
        
</endpointBehaviors>
      
</behaviors>
復(fù)制代碼

  (3)測(cè)試代碼:
    等待代碼生成結(jié)束,我們這里就直接生成客戶端代理類的實(shí)例來(lái)調(diào)用服務(wù)進(jìn)行測(cè)試。這里客戶端在調(diào)用服務(wù)以前,必須提供有效的Certificate證書.使用配置文件設(shè)置完畢以后,就可以測(cè)試,也可以使用代碼來(lái)設(shè)置證書wcfServiceProxy.ClientCredentials.ClientCertificate.Certificate = new X509Certificate2("WCFClientPK.pfx", "password");WCFClientPK.pfx是導(dǎo)出的客戶端證書的文件,包含密鑰,密碼為保護(hù)密碼??蛻舳藴y(cè)試代碼如下:

復(fù)制代碼

                WCFClient.ClientProxy.WCFServiceClient clientProxy 
= new WCFClient.ClientProxy.WCFServiceClient("WSHttpBinding_IWCFService");
                
//通過(guò)代理調(diào)用SayHello服務(wù)
//wcfServiceProxy.ClientCredentials.ClientCertificate.Certificate = new X509Certificate2("user.pfx", "password");

                string sName = "Frank Xu Lei Transport UserNamePassword WSHttpBinding";
                
string sResult = string
.Empty;
                Util.SetCertificatePolicy();
//強(qiáng)制信任證書。重寫驗(yàn)證服務(wù)端證書的方法。

                sResult = clientProxy.Hello(sName);
                Console.WriteLine(
"Returned Result is {0}", sResult);
復(fù)制代碼

  (4)測(cè)試結(jié)果:
    啟動(dòng)宿主程序,然后啟動(dòng)客戶端程序,稍作等待,Certificate證書無(wú)效的時(shí)候,服務(wù)器驗(yàn)證客戶端證書失敗,客戶端不能調(diào)用服務(wù)。,當(dāng)我們提供了有效的Certificate證書的時(shí)候,客戶端成功調(diào)用服務(wù),宿主打印的消息。如圖:

【5】總結(jié)
     Windows Communication Foundation (WCF) 服務(wù)和客戶端。服務(wù)器需要一個(gè)有效的可用于安全套接字層 (SSL) 的 X.509 證書,并且客戶端必須信任此服務(wù)器證書。
   (1) 此處自是在借助傳輸安全Certificate證書驗(yàn)證方式,客戶端提供證書。
   (2)客戶端要信任服務(wù)器證書,服務(wù)器驗(yàn)證客戶端證書來(lái)檢驗(yàn)客戶端身份的有效性。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多