2011-06-22 17 views
6

Thực hiện một dịch vụ web có sử dụng an ninh Giao thông vận tải cấp với WCF qua HTTP là khá dễ dàng: Enable SSL for my WCF serviceTại sao nó khó khăn hơn nhiều để kích hoạt SSL (Transport security) trên net.tcp so với HTTP?

Thực hiện một dịch vụ web có sử dụng an ninh Giao thông vận tải cấp với WCF trên net.tcp là khá khó khăn: WCF with netTcpBinding and Certificate transport security

... và giải pháp net.tcp thường liên quan đến một cái gì đó như thế này ở cả phía máy chủ và phía máy khách:

<serviceCertificate 
     findValue="MyServiceCertificate" 
     storeLocation="LocalMachine" 
     storeName="My" 
     x509FindType="FindBySubjectName" /> 

Trong trường hợp HTTP, bạn không cần phải đề cập đến chứng chỉ trên máy khách hoặc máy chủ. Trong trường hợp NET.TCP, bạn phải lưu trữ, định vị và chỉ định chứng chỉ trên cả máy khách và máy chủ trong hầu hết các nguồn tôi đã đọc.

Điều gì làm phép thuật khiến bạn không phải lo lắng về chứng chỉ ở chế độ HTTP? Và, tại sao ma thuật này không có sẵn cho bạn khi sử dụng net.tcp?

+0

Có lý do cụ thể nào khiến bạn không thể sử dụng bảo mật cấp thư không? –

+0

Không có lý do cụ thể nào mà chúng tôi không thể sử dụng bảo mật cấp tin nhắn. Tôi không biết tại sao điều đó sẽ dễ thực hiện hơn. –

Trả lời

6

Bởi vì khi sử dụng WCF qua HTTPS; IIS quản lý thương lượng với các chứng chỉ (giống như SSL đơn giản). Vì không có máy chủ IIS nào được tích hợp sẵn cho TCP, bạn phải tự làm điều đó. Bạn vẫn đang làm công cụ với chứng chỉ + WCF cho HTTPS, nhưng cấu hình được thực hiện tại IIS.

EDIT:

Đối với mặt hàng khác, bạn vẫn có một phần của phần mềm. Khi duyệt một trang web qua SSL, trình duyệt sẽ xử lý tất cả điều đó cho bạn. SSL qua HTTP có mẫu thương lượng chuẩn vì nó là một phần của giao thức HTTPS. Đối với TCP, đó không phải là một phần của giao thức để khách hàng phải tự chăm sóc nó.

+0

Đây là giả thuyết của tôi ở phía máy chủ, nhưng nó chỉ giải thích phía máy chủ. Nó không giải thích tại sao mọi thứ khó hơn ở phía khách hàng. Tại sao tất cả các ví dụ tôi đọc liên quan đến việc lưu trữ chứng chỉ trong cửa hàng ứng dụng khách và gọi SetCertificate [(như ở đây)] (http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/050bc8a9-a9a2 -41dd-89ef-dbacbcc5b111 /)? –

+0

@Greg: Xem chỉnh sửa. – vcsjones

+1

Nó gần như có ý nghĩa, ngoại trừ hai điểm. Đầu tiên, đúng là trình duyệt xử lý tất cả điều này cho bạn, nhưng ngay cả khi bạn không sử dụng trình duyệt (chỉ cần một ứng dụng Windows Forms với mã máy khách WCF), nó vẫn sẽ xử lý nó cho bạn. Vì vậy, Microsoft phải xử lý nó cho chúng tôi. Họ chỉ chọn không xử lý nó cho chúng tôi trong trường hợp net.tcp? Cuối cùng, nếu bạn chấp nhận tất cả điều này, thì có vẻ như công việc phụ cho TCP sẽ thực hiện việc xử lý chứng chỉ của riêng bạn. Thay vào đó, những gì chúng ta thấy là những người có một chứng chỉ hoàn toàn mới được cài đặt trên máy khách mà thậm chí không xuất hiện trong trường hợp HTTP. –

0

Tôi đã đấu tranh như địa ngục với điều này quá và bây giờ cuối cùng cảm thấy giống như một thằng ngốc. Điều này thật tuyệt vì nó có nghĩa là tôi thực sự hiểu một điều gì đó mà tôi vừa mới xâm nhập trước đây.

Khi triển khai dịch vụ của bạn, mục tiêu của bạn là bảo mật thông tin liên lạc bằng SSL. Bạn cần có khả năng tạo tệp reference.cs trong studio trực quan. Vấn đề bạn có là khi bạn đặt trao đổi dữ liệu meta của bạn theo ràng buộc SSL quá. Các công cụ tạo mã không cho phép bạn cấu hình các phần cấu hình netTcpBinding cần thiết cho các cuộc gọi được thực hiện để lấy dữ liệu meta khi nó được sử dụng để tạo tệp reference.cs.

Bạn nên tạo hai cấu hình ràng buộc riêng biệt dưới netTcpBinding, một cho dịch vụ của bạn với:

<security mode="TransportWithMessageCredential"> 
    <message clientCredentialType="Certificate"/> 
</security> 

cấu hình bên trong và khác với:

<security mode="None" /> 

để thay thế. Đảm bảo tất cả các cài đặt khác phù hợp và điểm cuối cho điểm dịch vụ của bạn tại liên kết sslConfig trong khi điểm cuối siêu dữ liệu trỏ vào liên kết không có SSL. Sau đó, bạn sẽ có thể đọc siêu dữ liệu và cập nhật lại tham chiếu dịch vụ.

Một điều cần lưu ý là bạn nên sử dụng siêu dữ liệu ràng buộc cho bất kỳ bản phát hành sản phẩm nào. Điều này đảm bảo rằng bạn không hiển thị bất kỳ thứ gì không vượt quá SSL.