2012-06-03 14 views
5

Có cách nào để sử dụng WCF SSL với NetTcpBinding không yêu cầu chứng chỉ ứng dụng khách được cài đặt trên máy khách không? (SSL V2 nếu tôi không nhầm).Sử dụng chứng chỉ Wcf SSl trên Tcp mà không có chứng chỉ ứng dụng khách (chỉ phía máy chủ)

chúng tôi muốn chứng chỉ máy chủ sẽ nằm trong cửa hàng tin cậy của khách hàng để xác thực và Mã hóa thông báo của máy chủ bằng khóa công khai của máy chủ, có nghĩa là chỉ máy chủ mới có chứng chỉ khóa riêng.

chúng tôi đang sử dụng NetTcpBinding và không customBinding ở cả hai bên. Nếu bo mạch của nó được thực hiện, cấu hình chính xác cho nó là gì? (trên máy khách & cấu hình máy chủ)

Xin cảm ơn trước.


đây là wcf của tôi Configs.

MÁY CHỦ CONFIG:



    <configuration> 
     <system.serviceModel> 
     <bindings> 
     <netTcpBinding> 
      <binding name="TcpSecureBinding"> 
      <security mode="Transport"> 
       <transport clientCredentialType="Certificate"/>    
      </security> 
     </binding> 
     </netTcpBinding> 
     </bindings> 
     <behaviors> 
     <serviceBehaviors> 
      <behavior name="ServiceCredentialsBehavior">   
      <serviceDebug includeExceptionDetailInFaults="True" /> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceAuthorization 
       principalPermissionMode="UseWindowsGroups"> 
      </serviceAuthorization> 
      <serviceCredentials> 
       <windowsAuthentication includeWindowsGruops="true"    
             allowAnonymousLogons="false"/> 
       <clientCertificate> 
        <authentication certificateValidationMode="none"/> 
       </clientCertificate> 
       <serverCertificate 
        findValue="thumbprint" 
        storelocation="LocalMachine" 
        x509FindType="FindMyThumbprint" 
        storeName="My"/> 
      </serviceCredentials> 
     </behavior> 
     </serviceBehaviors> 
     </behaviors> 
    <services> 
     <service behaviorConfiguration="ServiceCredentialsBehavior" 
       name="ServiceModel.Calculator"> 
      <endpoint address="net.tcp://localhost:8040/Calculator" 
        binding="netTcpBinding" 
        bindingConfiguration="TcpSecureBinding" 
        contract="ServiceModel.ICalculator" > 
      <identity> 
       <dns value="localhost"/> 
      </identity> 
     </endpoint> 
     </service> 
    </services> 
    </system.serviceModel> 
    </configuration> 

KHÁCH HÀNG CONFIG:



    <configuration> 
     <system.serviceModel> 
     <client> 
     <endpoint address="net.tcp://localhost:8040/Calculator" 
       behaviorConfiguration="endpointCredentialBehavior" 
       binding="netTcpBinding" 
       bindingConfiguration="Binding1" 
       contract="ServiceModel.ICalculator"> 
      <identity> 
       <dns value="localhost"/> 
      </identity> 
      </endpoint> 
     </client> 
     <behaviors> 
     <endpointBehaviors> 
      <behavior name="endpointCredentialBehavior"> 
      </behavior> 
     </endpointBehaviors> 
     </behaviors> 
     <bindings> 
     <netTcpBinding> 
      <binding name="Binding1"> 
      <security mode="Transport"> 
       <transport clientCredentialType="Windows" /> 
      </security> 
      </binding> 
      </netTcpBinding> 
     </bindings> 
    </system.serviceModel> 
    </configuration> 

im thêm hiện tại máy chủ & configs khách hàng của tôi. khác câu hỏi:

  1. ở cấp xác thực, chúng tôi muốn các khách hàng để xác thực cert ther máy chủ của (tôi nghĩ rằng khóa công khai của máy chủ phải ở trong cửa hàng trustedPeople), có thể như vậy?

  2. bạn có khuyên chúng tôi sử dụng Bảo mật hoặc thông báo giao thông không?

  3. nếu chúng tôi muốn xác thực máy khách & máy chủ của NTLM (clientCredentialType = Windows) có thể thực hiện ngoài xác thực chứng chỉ của máy chủ hoặc chỉ một trong số chúng có thể được áp dụng không? cho đến bây giờ, chúng tôi đã sử dụng xác thực NTLM.

  4. ngay bây giờ im nhận được ngoại lệ: "Việc nâng cấp được yêu cầu không được hỗ trợ bởi 'net.tcp: // servername: 8040/**'. Điều này có thể là do các ràng buộc không phù hợp (ví dụ an ninh được kích hoạt trên khách hàng chứ không phải trên máy chủ). " tôi hiểu lỗi này xảy ra vì máy khách đang sử dụng Windows Security và máy chủ trong Chứng chỉ om, nhưng khi thay đổi bảo mật của khách hàng thành Chứng chỉ, bạn cũng gặp lỗi: "Chứng chỉ ứng dụng khách không được cung cấp". nhưng tôi không muốn đặt chứng chỉ của khách hàng và đó là một phần của vấn đề chính của tôi.

  5. chúng ta đọc rằng chúng ta có thể sử dụng để xác thực máy chủ cert của thẻ này:

    
        <identity> 
         <certificate encodedValue="encoded certificate"/> 
        </identity> 
    

nhưng, tôi nghĩ rằng xác thực điều này bằng cách nhận diện được thực hiện bởi một giấy chứng nhận mã hóa khi chúng tôi preffer rằng xác của cert sẽ được thực hiện bằng cách tìm khóa công khai của máy chủ trong cửa hàng của khách hàng (trustPeople). thông tin này có thực sự đúng không? rằng các thẻ này về bản sắc là sự thay thế cho việc tìm kiếm khóa công khai trong ứng dụng "của cửa hàng tin cậy?

hy vọng bạn sẽ có thể hỗ trợ trong cách cư xử này, nhờ một lần nữa.

+0

Có thể. Bạn đã thử những gì cho đến nay? – Bernard

+0

Bạn không cần giấy chứng nhận ứng dụng khách trừ khi bạn yêu cầu một chứng chỉ cụ thể; cấu hình ràng buộc của bạn trông như thế nào? –

+0

Ai đó có thể giúp tôi giải quyết vấn đề của chúng tôi không ?? – AmirT

Trả lời

11

nó, bạn đang sử dụng netTcpBiding và cần phải sử dụng An ninh giao thông sau đó bạn có 3 tùy chọn, tùy chọn đầu tiên yêu cầu cert dịch vụ, tùy chọn thứ hai yêu cầu không có chứng chỉ nào cả, yêu cầu thứ ba cả cert dịch vụ và chứng chỉ ứng dụng khách cho kịch bản của bạn, bạn nên sử dụng option1 sẽ xác thực dịch vụ thông qua cert của nó và sẽ đề xuất Bảo mật và Liêm chính cho các thông điệp.

C >> Bảo mật
Tôi >> Liêm
Một >> Authentication (Điều đó sẽ xảy ra cho khách hàng)

1- Lựa chọn một cung cấp (C + I) không xác thực sẽ xảy ra đối với khách hàng, Trong trường hợp này SSL TCP (không SSL HTPS) sẽ được sử dụng để cung cấp các C và I, và các dịch vụ sẽ được

<!--//Below are the configuration for both the service and the client--> 
<netTcpBinding> 
    <binding name="TcpSecureBinding"> 
     <security mode="Transport"> 
     <transport clientCredentialType="None"></transport> 
     </security> 
    </binding> 
    </netTcpBinding> 

cũng vì TCP SSL sẽ được sử dụng thì dịch vụ phải cung cấp giấy chứng nhận cho khách hàng, vì vậy bạn cần phải cài đặt chứng chỉ trong máy chủ và định hình dịch vụ để sử dụng chứng chỉ này để chứng minh danh tính của nó, bạn cũng cần phải cài đặt chứng chỉ ủy quyền chứng chỉ gốc cho dịch vụ Phó chứng chỉ trên máy client (thường là trong các nhà chức trách LocalMachine/Trusted Root Certification), và các dịch vụ cần phải có những hành vi dưới đây để xác định giấy chứng nhận cho dịch vụ

<serviceBehaviors> 
    <behavior> 
     <serviceCredentials> 
     <serviceCertificate findValue="localhost" 
          x509FindType="FindByIssuerName" /> 
     </serviceCredentials> 
    </behavior> 
    </serviceBehaviors> 

2- tùy chọn hai cung cấp (A + [C + I]), C và I là tùy chọn khi bạn cấu hình thông qua phần tử protectionLevel. các auth khách hàng sẽ được cửa sổ auth (Thông thường sẽ sử dụng Windows Suối an ninh để đạt được A, C và tôi)

<!--//Below are the configuration for both the service and the client--> 
<netTcpBinding> 
    <binding name="TcpSecureBinding"> 
     <security mode="Transport"> 
     <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign"></transport> 
     </security> 
    </binding> 
    </netTcpBinding> 

3- tùy chọn 3 cung cấp (A + C + I), C và tôi không phải là bắt buộc và xác thực khách hàng sẽ được thông qua giấy chứng nhận của khách hàng (mỗi khách hàng phải có giấy chứng nhận của riêng mình), Trong trường hợp này SSL TCP (không phải là HTPS SSL) sẽ được sử dụng để cung cấp các A, C và I.

<!--//Below are the configuration for both the service and the client--> 
<binding name="TcpSecureBinding"> 
     <security mode="Transport"> 
     <transport clientCredentialType="Certificate"></transport> 
     </security> 
    </binding> 

cũng vì TCP SSL sẽ được sử dụng thì dịch vụ phải cung cấp chứng chỉ cho máy khách, vì vậy bạn cần cài đặt chứng chỉ trong máy chủ và định hình dịch vụ để sử dụng chứng chỉ này để chứng minh danh tính của nó, bạn cũng cần phải cài đặt chứng chỉ ủy quyền chứng chỉ gốc cho chứng chỉ dịch vụ trên máy khách (thường là trong LocalMachine/Trusted Root Certification Authorities) và dịch vụ cần có hành vi bên dưới để chỉ định chứng chỉ cho dịch vụ

<serviceBehaviors> 
    <behavior> 
     <serviceCredentials> 
     <serviceCertificate findValue="localhost" 
          x509FindType="FindByIssuerName" /> 
     </serviceCredentials> 
    </behavior> 
    </serviceBehaviors> 
+0

Cấu hình điểm cuối của máy khách chỉ cần sử dụng khóa CA gốc công cộng là gì? Tôi đã cố gắng để cấu hình dịch vụ của tôi với một cert máy có chữ ký của CA gốc, nhưng khi tôi cấu hình máy khách để sử dụng CA gốc máy khách và máy chủ không thể nói chuyện. Nhưng khi tôi đặt khóa công khai của cert của máy dịch vụ trên máy khách (và thay đổi "findValue" thành tên certs đó) thì nó hoạt động. Tôi đang làm gì sai? –

+0

Trả lời từ [Blog của Ryan Gunn] (https://talkdotnet.wordpress.com/tag/nettcp/) – noobob