乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

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

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

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

          
          客戶端首先要提供自己的證書,服務器對此進行驗證,有效后,服務器會和客戶端嘗試建立SSL安全套接層,會使用商定的密碼對消息簽名,客戶端使用證書加密 數(shù)據(jù),服務端使用證書解密數(shù)據(jù),保證數(shù)據(jù)的安全和機密性,消息簽名放置被篡改。這個鏈接是唯一的。通信結(jié)束以后會關(guān)閉連接。
         是制作和設(shè)置SSL證書的過程,和傳輸安全模式的過程一樣,這里直接使用相同證書和端口。延續(xù)以前的風格。
      【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。
      -這里制作了連個證書,主要只使用一個WCFServerPK,可以到出密鑰文件pfx,后續(xù)我們要導入到其他存儲區(qū),設(shè)置為信任的證書。WCFClientPK -是為以后文章準備的,也是可以設(shè)置為信任的證書。

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

       (3)使用MMC建立證書控制單元查看證書的信息:
        開始--運行--MMC--控制臺--添加刪除單元--證書--當前用戶和計算機各添加一個。能查看和管理CurrentUser和LocalMachine的證書。如圖:

      (4)導入證書到信任的人和信任的CA機構(gòu)里。步驟如下:
          1.導出證書文件,帶密鑰的pfx文件。使用mmc,保存到桌面位置(方便查找)。這里記住你制作證書的密碼。要使用。
          2.導入證書到信任的人。使用任務-導入向?qū)?-選擇證書文件,導入即可。
          3.導入證書到信任的機構(gòu),使用任務-導入向?qū)?-選擇證書文件,導入即可。這個證書就被信任了。
      【2】SSL證書設(shè)置:
         下面我們來設(shè)置SSL端口證書,這個步驟很重要。不然客戶端無法查找到WCF服務。
      【2.1】查詢SSL證書設(shè)置:
           需要為使用的端口SSL注冊證書。Windows Server 2003 或 Windows XP,則使用 HttpCfg.exe 工具。Windows Server 2003 中已安裝該工具。下載該工具/Files/frank_xl/HttpcfgFrankXuLei.rar。如果運行的是 Windows Vista,則使用已安裝的 Netsh.exe 工具。在Windows\System32目錄下。運行此工具需要命令窗口切換到相應工具解壓縮目錄下,我直接放置到D盤根目錄。方便查找。
           (1)在 Windows Server 2003 或 Windows XP 中,通過 queryssl 開關(guān)使用 HttpCfg.exe 工具查看當前端口配置,在命令窗口切換到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} 。最后一個GUID.你可以隨便編寫一個。使用工具也可以。certhash 參數(shù)指定證書的指紋。ipport 參數(shù)指定 IP 地址和端口,功能類似于前述 Httpcfg.exe 工具的 -i 開關(guān)。appid 參數(shù)為可用于標識所屬應用程序的 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】服務端配置:
          SSL端口證書配置完成以后,我們來配置服務端相關(guān)的文件,首先要實現(xiàn)自定義身份驗證的代碼。我們就要對WCF服務端進行配置,直接使用配置文件,這里簡單。也可以使用代碼來完成。
          (1)服務類定義:
           這里服務類就一個方法就是更具用戶的name來打印調(diào)用時間,代碼如下:

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

              [OperationContract]
              
      string SayHello(string
       name);

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

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

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

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

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

         這個配置要應用到服務的終結(jié)點配置上。才會生效。
          (4)證書使用:
          在服務行為節(jié)點屬性里配置使用證書WCFServerPK,這個服務器證書就是SSL證書。配置信息如下:

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

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

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

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

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

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

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

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

      復制代碼

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

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

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

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

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

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

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多