2011-01-26 26 views
5
quản trị

Webservice đã cho tôi WSDL, hai chứng chỉ và khóa bí mật:Làm cách nào để sử dụng dịch vụ SOAP qua HTTPS trong C#?

service.wsdl 
ssl.cer 
auth_cert.pem 
auth_private_key.pem 

Trong Visual Studio 2010 Tôi đã thêm một Web Reference (Service Reference đã không làm việc) từ WSDL. Sau đó, tôi cố gắng sử dụng nó vì nó là một http xà phòng client:

MySoapClient client = new MySoapClient(); 
client.Operation(); 

và tôi lấy chồng này dấu vết:

Unhandled Exception: System.Net.WebException: The request was aborted: Could not create SSL/TLS secure channel. 
    at System.Web.Services.Protocols.WebClientProtocol.GetWebResponse(WebRequest request) 
    at System.Web.Services.Protocols.HttpWebClientProtocol.GetWebResponse(WebRequest request) 
    at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters) 

gì tôi phải làm gì với chứng chỉ và khóa bí mật?
Tôi không thể tìm thấy bất kỳ hướng dẫn trực tuyến nào cũng như các cuốn sách bao gồm vấn đề này. Bất kỳ gợi ý nào?

Cập nhật

Truy cập vào thiết bị đầu cuối với Firefox:

SSL peer cannot verify your certificate. (Error code: ssl_error_bad_cert_alert)

+1

@Tommaso: bạn nên sử dụng Tham chiếu dịch vụ. Cái gì không hiệu quả? –

+0

Điểm cuối dịch vụ có hỗ trợ kết nối https không? –

+0

@John Saunders: "Thêm tham chiếu dịch vụ" tạo ra một thư mục "trống": khai báo không gian tên chỉ – Tommaso

Trả lời

0

Các quản trị dường như đã đưa cho bạn các tập tin sử dụng để thiết lập SSL trên máy chủ. Bạn sẽ có thể chạy service.wsdl thông qua WSDL.exe để tạo ra một proxy C#, đó là những gì VS hiện khi bạn thêm một tham chiếu Web. Tôi không nghĩ rằng đây là vấn đề của bạn mặc dù. Bạn đang thấy một vấn đề cấp mạng vì ngoại lệ là một System.Net.WebException.

Các tệp khác giống như chúng là những gì quản trị viên đang sử dụng để thêm SSL vào máy chủ. Bằng cách chia sẻ khóa riêng tư, anh ta có thể đã xâm phạm bảo mật nếu bất kỳ dịch vụ hỗ trợ SSL nào sử dụng khóa này. Bạn nên tìm kiếm bất kỳ điểm kết thúc dịch vụ nào trong WSDL và cố gắng truy cập vào các điểm trong trình duyệt của bạn qua SSL (https: //). Nếu bạn không thể thì có một vấn đề cấu hình máy chủ. Sửa cấu hình SSL trên máy chủ và WSDL của bạn sẽ hoạt động hoặc ít nhất bạn sẽ gặp phải sự cố mới.

+0

Firefox đến điểm cuối: "SSL peer không thể xác minh chứng chỉ của bạn. (Mã lỗi: ssl_error_bad_cert_alert)" – Tommaso

+0

quản trị viên nói rằng auth_cert.pem là "giấy chứng nhận bản trình bày" và auth_private_key.pem khóa riêng tương đối mà tôi "phải sử dụng để mã hóa kết nối " – Tommaso

6

Webservice administrator gave me WSDL, two certificates and a private key

Nếu bạn chỉ sử dụng dịch vụ, khóa riêng không bắt buộc. Tôi có thể đoán bạn muốn xác thực 2 chiều với https. Nếu đây là trường hợp hoạt động:

Trên máy chủ, quản trị viên nên cài đặt cert với khóa riêng để bật SSL (khóa được sử dụng trong quá trình bắt tay SSL). Khóa công khai của nó được sử dụng bởi khách hàng của bạn để kiểm tra xem cert có hợp lệ không và xác thực dịch vụ, vì vậy phía khách hàng bạn bằng cách nào đó cần phải kiểm tra nó. Nếu cả hai máy đều ở trong miền Windows thì điều này rất dễ (nó có thể được cấu hình để sử dụng Authority Certification Authority). Nếu không, bạn cần tất cả các chứng chỉ đã được sử dụng để ký cert máy chủ gốc được cài đặt trên máy khách (trong kho lưu trữ Trusted Root CA).

Phần thứ hai là xác thực ứng dụng khách cho máy chủ. Bạn cài đặt các cert khách hàng (nó chứa khóa công khai) để lưu trữ cá nhân và cấu hình WCF proxy để sử dụng nó:

<behaviors> 
    <endpointBehaviors> 
     <behavior name="certSecureBehavior"> 
      <clientCredentials> 
       <clientCertificate findValue="client-CN" storeLocation="LocalMachine" x509FindType="FindBySubjectName" storeName="My"/> 
       <serviceCertificate> 
        <defaultCertificate findValue="server-CN" storeLocation="LocalMachine" x509FindType="FindBySubjectName" storeName="TrustedPeople"/> 
       </serviceCertificate> 
      </clientCredentials> 
     </behavior> 
    </endpointBehaviors> 
</behaviors> 

Configure bạn Endpoint sử dụng hành vi này.Một vài lưu ý:

  • client-CN là một tên cert khách hàng được tạo ra cho (không quan trọng)
  • server-CN là một tên cert máy chủ được tạo ra cho (thường là tên máy chủ DNS)

Đây là chủ đề rất phức tạp và luôn đòi hỏi nhiều thời gian để nghiên cứu. Kiểm tra bài viết này http://blogs.msdn.com/b/imayak/archive/2008/09/12/wcf-2-way-ssl-security-using-certificates.aspx Hy vọng trợ giúp này.

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