2010-06-16 31 views
6

Có tự - tổ chức WCF máy chủ (Không IIS), và được tạo chứng chỉ (trên Win Xp) sử dụng dòng lệnh nhưTự - chủ trì máy chủ WCF và SSL

makecert.exe -sr CurrentUser -ss My -a sha1 -n CN=SecureClient -sky exchange -pe 
makecert.exe -sr CurrentUser -ss My -a sha1 -n CN=SecureServer -sky exchange -pe 

Những chứng chỉ đã được thêm vào máy chủ như sau:

serviceCred.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine, 
          StoreName.My, X509FindType.FindBySubjectName, "SecureServer"); 



serviceCred.ClientCertificate.SetCertificate(StoreLocation.LocalMachine, 
          StoreName.My, X509FindType.FindBySubjectName, "SecureClient"); 

Sau tất cả thao tác trước, tôi đã tạo máy khách đơn giản để kiểm tra kết nối SSL với máy chủ.

cấu hình Chủ đầu tư:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.serviceModel> 
     <bindings> 
      <basicHttpBinding> 
       <binding name="BasicHttpBinding_IAdminContract" closeTimeout="00:01:00" 
        openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
        allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
        maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
        messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
        useDefaultWebProxy="true"> 
        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
         maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
        <security mode="TransportCredentialOnly"> 
         <transport clientCredentialType="Basic"/> 
        </security> 
       </binding> 
      </basicHttpBinding> 
     </bindings> 
     <client> 
      <endpoint address="https://myhost:8002/Admin" binding="basicHttpBinding" 
       bindingConfiguration="BasicHttpBinding_IAdminContract" contract="Admin.IAdminContract" 
       name="BasicHttpBinding_IAdminContract" /> 
     </client> 
    </system.serviceModel> 
</configuration> 

Code:

Admin.AdminContractClient client = new AdminContractClient("BasicHttpBinding_IAdminContract"); 
      client.ClientCredentials.UserName.UserName = "user"; 
      client.ClientCredentials.UserName.Password = "pass"; 
      var result = client.ExecuteMethod() 

Trong thực tôi nhận được lỗi sau:

The provided URI scheme 'https' is invalid; expected 'http'.\r\nParameter name: via 

Câu hỏi: Làm thế nào để kích hoạt SSL cho máy chủ tự lưu trữ và ở đâu sao tôi nên thiết lập chứng chỉ cho máy khách và máy chủ? Cảm ơn.

Trả lời

7

Hãy thử thay đổi

<security mode="TransportCredentialOnly"> 

để

<security mode="Transport"> 

và cho chúng tôi biết nếu mà làm cho bất kỳ cải tiến. Điều này sẽ làm cho khách hàng của bạn cho phép kết nối HTTPS.

+0

Sau khi thay đổi này tôi nhận được: Đã xảy ra lỗi trong khi thực hiện yêu cầu HTTP đến https: // myhost: 8002/Quản trị viên. Điều này có thể là do chứng chỉ máy chủ không được định cấu hình đúng với HTTP.SYS trong trường hợp HTTPS. Điều này cũng có thể do sự không khớp của ràng buộc bảo mật giữa máy khách và máy chủ. – jitm

+0

Bạn có thể cập nhật bài đăng bằng cấu hình servicemodel của máy chủ –

+0

Tôi chắc chắn sẽ kiểm tra [Hướng dẫn bảo mật WCF trên codeplex] (http://wcfsecurityguidance.codeplex.com/). Cụ thể, [trang này nói về xác thực chứng chỉ] (http://wcfsecurity.codeplex.com/wikipage?title=How%20To%20-%20Use%20Certificate%20Authentication%20and%20Message%20Security%20in%20WCF%20calling % 20from% 20Windows% 20Forms & referringTitle = Cách% 20Tos). –

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