2008-12-02 40 views
37

Tôi cần sử dụng chứng chỉ x509 để nhận được xác thực mức tin nhắn an toàn từ một khách hàng phong phú thông qua internet đến một Dịch vụ web WCF an toàn.Làm cách nào để cấu hình WCF sử dụng chứng chỉ x509 qua internet?

Cụ thể, tôi đang tìm hướng dẫn từng bước về thiết lập, cấu hình, mã hóa và triển khai, bao gồm tạo chứng chỉ 'dev', cài đặt và lấy chứng chỉ 'thực' cho sản xuất.

Trả lời

44

Các bước sau đây là một hướng dẫn để giúp bạn bắt đầu:

1) Thứ nhất, bạn cần có quyền quản lý gốc để tạo chứng chỉ máy khách và máy chủ của mình. Bạn có thể sử dụng Nhà cung cấp bên ngoài (ví dụ: Verisign) hoặc bạn có thể tạo riêng của mình bằng cách sử dụng một cái gì đó như Microsoft Certificate Server.

Để tạo chứng chỉ Root Authority phát triển, bạn có thể sử dụng công cụ "makecert" đi kèm với Visual Studio, ví dụ:

makecert -n "CN=MyRootCA" -r -sv RootCA.pvk RootCA.cer 

2) Sau đó, bạn cần yêu cầu/tạo chứng chỉ máy khách và máy chủ. Cả hai loại chứng chỉ đều có thể được cài đặt dưới dạng chứng chỉ máy cục bộ và cả hai đều cần phải được ký bằng chính quyền gốc. Bạn có thể yêu cầu chứng chỉ ứng dụng khách từ giao diện web của Máy chủ chứng chỉ Microsoft, ví dụ: http://mycertserver/certsrv.

Để tạo chứng chỉ ứng dụng khách phát triển cho mỗi máy, bạn có thể sử dụng "makecert" một lần nữa. Lưu ý rằng các chứng chỉ khách hàng ký hợp đồng với giấy chứng nhận phát triển Root Authority tạo ở bước 1.

makecert -pe -n "CN=MyCert" -ss my -sky exchange -sk MyCert 
     -iv MyRootCA.pvk -ic MyRootCA.cer -sr localmachine MyCert.cer 

này sẽ cài đặt chứng chỉ trên máy mà trên đó các lệnh được chạy, vào thư mục chứng chỉ cá nhân trong cửa hàng máy địa phương.

Để máy chủ tin cậy chứng chỉ ứng dụng khách, bạn cần cài đặt chứng chỉ Root Authority phát triển trong kho lưu trữ Trusted Root Certificate Authorities của máy chủ (sử dụng snap-in chứng chỉ mmc để thực hiện việc này). Các khách hàng cũng nên có chứng chỉ gốc được cài đặt theo cách tương tự để họ tin tưởng các chứng chỉ của riêng mình.

3) Định cấu hình dịch vụ WCF của bạn để yêu cầu xác thực ứng dụng khách bằng chứng chỉ (ví dụ: thông qua web.config).

<services> 
    <service 
    name="TestService" 
    behaviorConfiguration="wsHttpCertificateBehavior"> 
    <endpoint name="TestEndPoint" 
     address="" 
     binding="wsHttpBinding" 
     bindingConfiguration="wsHttpEndpointBinding" 
     contract="TestService.IMyContract"> 
     <identity> 
     <dns value=""/> 
     </identity> 
    </endpoint> 
    <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/> 
    </service> 
</services> 

<bindings> 
    <wsHttpBinding> 
    <binding name="wsHttpEndpointBinding"> 
     <security mode="Message"> 
     <message clientCredentialType="Certificate"/> 
     </security> 
    </binding> 
    </wsHttpBinding> 
</bindings> 

<behaviors> 
    <behavior name="wsHttpCertificateBehavior"> 
    <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true"/> 
    <serviceCredentials> 
     <clientCertificate> 
     <authentication 
      certificateValidationMode="PeerOrChainTrust" 
      revocationMode="NoCheck"/> 
     </clientCertificate> 
     <serverCertificate findValue="CN=MyCert"/> 
    </serviceCredentials> 
    </behavior> 
</behaviors> 

4) Bây giờ, hãy định cấu hình người gọi (ví dụ: thông qua app.config).

<client> 
    <endpoint name="wsHttpBinding" 
    address="https://localhost/TestService/TestService.svc" 
    binding="wsHttpBinding" 
    bindingConfiguration="wsHttpBinding" 
    behaviorConfiguration="wsHttpCertificateBehavior" 
    contract="TestService.IMyContract"> 
    <identity> 
     <dns value="MyCert"/> 
    </identity> 
    </endpoint> 
</client> 

<bindings> 
    <wsHttpBinding> 
    <binding name="wsHttpBinding"> 
     <security mode="Message"> 
     <message clientCredentialType="Certificate"/> 
     </security> 
    </binding> 
    </wsHttpBinding> 
</bindings> 

<behaviors> 
<endpointBehaviors> 
    <behavior name="wsHttpCertificateBehavior"> 
    <clientCredentials> 
     <clientCertificate findValue="MyCert" storeLocation="LocalMachine"/> 
     <serviceCertificate> 
     <authentication 
      certificateValidationMode="PeerOrChainTrust" 
      revocationMode="NoCheck" 
      trustedStoreLocation="LocalMachine"/> 
     </serviceCertificate> 
    </clientCredentials> 
    </behavior> 
</endpointBehaviors> 
</behaviors> 
+0

XML ở trên không chính xác. Rất tiếc, chỉnh sửa của tôi đã bị từ chối. Nếu bạn gặp vấn đề, lưu ý rằng '' nên là '', và một phần tử '' bị thiếu. Điều này đúng với .NET 4.5, ít nhất. Xem http://stackoverflow.com/review/suggested-edits/7584410 – Jimothy

Các vấn đề liên quan