2008-11-11 33 views
6

Dịch vụ WCF của tôi liên quan đến việc gửi dữ liệu (trong định dạng csv) giữa khách hàng và dịch vụ. Tập dữ liệu này phải được mã hóa để dữ liệu không thể bị chặn. Tôi đang sử dụng wsHttpBinding và cố gắng để mã hóa thông điệp bằng cách sử dụng các thiết lập sau trong web.config:WCF - Làm cách nào để mã hóa tin nhắn?

<wsHttpBinding> 
    <binding name="wsHttp"> 
    <reliableSession enabled="true" /> 
    <security mode="Message"> 
     <message clientCredentialType="UserName" algorithmSuite="TripleDes" /> 
    </security> 
    </binding> 
</wsHttpBinding> 

Khi tôi cố gắng và tạo ra một proxy client tôi nhận được một bảng thông báo lỗi dài (mà không thể được hoàn toàn đọc bởi vì nó đi xuống dưới cùng của màn hình!). Thông báo lỗi đề cập đến một điều gì đó về "chứng chỉ dịch vụ không được cung cấp".

Làm cách nào để mã hóa thư? Tôi có cần chứng chỉ không? Tôi nên đề cập rằng dịch vụ này sẽ được sử dụng trên internet từ các miền khác nhau nên tôi không chắc liệu sử dụng bảo mật "Tên người dùng" là tùy chọn tốt nhất (?)

Về cơ bản, tôi đã nhầm lẫn!

Trả lời

4

Có, dịch vụ của bạn cần chứng chỉ để khóa mã hóa của bạn có thể được trao đổi an toàn. Bạn có thể tạo chứng chỉ xác thực dịch vụ thử nghiệm với makecert.exe. Xem this entry in my blog để biết chi tiết về điều đó.

Bạn cũng cần đảm bảo rằng tài khoản dịch vụ của bạn đang chạy vì có thể đọc tệp khóa cá nhân của chứng chỉ. Nếu bạn đang sử dụng Windows Vista (hoặc phiên bản cao hơn), snap-in Certificates MMC cho phép bạn kiểm soát các quyền trên khóa riêng đó, nhưng đối với các phiên bản trước của Windows thì sẽ khó hơn một chút. Tôi đã từng sử dụng một tiện ích đi kèm với WSE3, nhưng một người khác có thể đề xuất một cách trực tiếp hơn. Trừ khi dịch vụ của bạn hoạt động với tư cách quản trị viên, rất có thể bạn sẽ phải điều chỉnh các quyền này.

Cập nhật: giống như tất cả những điều tốt đẹp, blog của tôi đã kết thúc. Nhờ makerofthings7 để nhắc tôi. Lệnh makecert bạn cần phải tạo ra một giấy chứng nhận xác thực dịch vụ là một cái gì đó như thế này ...

makecert -sr LocalMachine -ss My -pe -n CN=subject-name -eku 1.3.6.1.5.5.7.3.1 -sky exchange 

... chỉ đơn giản là thay thế đối tượng tên với bất kỳ tên chứng chỉ có ý nghĩa cho dịch vụ của bạn.

+0

Liên kết không còn hợp lệ ... – LamonteCristo

+0

@ makerofthings7 Cảm ơn! Tôi đã cập nhật câu trả lời của mình. – Martin

+0

Tôi đã thay đổi liên kết, bây giờ nó trỏ đến phiên bản blog hoạt động từ archive.org. – svick

4

@Martin đúng, bạn cần chứng chỉ trên máy chủ. This link có tổng quan tốt về luồng truyền thông cho bảo mật dựa trên tin nhắn và có mã mẫu. This link có tổng quan tốt về làm việc với chứng chỉ.

Để biết các yêu cầu tự động của bạn, this link xem xét các tùy chọn khác nhau có sẵn. Nếu bạn mới đến WCF, Học WCF: Hướng dẫn thực hành của Michele Bustamante là một cuốn sách hay và bao gồm bảo mật dựa trên tin nhắn.

1

Tôi vẫn đang cố gắng tìm ra giải pháp cho vấn đề này. Tôi có nó, nhưng với việc ký một xml. Vẫn còn để tìm người dùng IIS đang chạy trong WinXP Bắt đầu> Nhấp chuột phải vào Máy tính của tôi> Quản lý> Dịch vụ và ứng dụng> Dịch vụ> Quản trị IIS> Nhấp đúp và trong tab Đăng nhập, nó thường sẽ hiển thị Hệ thống cục bộ.

EDIT

OK, đây là cách tôi giải quyết được sự cố của mình. Tôi đã có một giấy chứng nhận rằng tôi đã sử dụng số article này để thực hiện chứng nhận. Nếu dự án là một ASPWebSite được lưu vào thư mục C của bạn, bạn có thể không có vấn đề với điều này. Nhưng nếu nó được lưu vào IIS như một dự án HTTP thì bạn sẽ có vấn đề.

Cách để giải quyết nó sau nhiều tuần điều tra không phải là khó.Microsoft có một cái gì đó gọi là cải tiến dịch vụ Web, bạn sẽ tải về mới nhất nhưng tôi đang sử dụng thứ hai với gói dịch vụ mới nhất. Khi tôi cài đặt, tôi đã kích hoạt mọi thứ.

Chứng chỉ có thể nằm trong tệp thực nhưng chúng thường nằm trong Cửa hàng quản lý chứng chỉ để sử dụng công cụ chứng chỉ X509 công cụ trong WSE 2.0. Ở đây mở chứng chỉ của bạn bằng cách tìm kiếm nó trong các phần khác nhau cho đến khi bạn tìm thấy nó. Sau đó mở nó và ở phía dưới sẽ có một View Private Key, trong tab bảo mật thêm LOCALHOST \ ASPNET. Và điều này sẽ cho phép trang web của bạn đọc chứng chỉ.

Tóm lại những gì xảy ra là khi bạn tạo khóa công khai và riêng tư, mặc dù bạn có thể thấy khóa riêng tư tốt, nó thực sự gửi đến Timbuktu trong hệ thống tệp và bạn cần tìm nó để thêm tài khoản ASPNET để truy cập đọc. Tôi đang đọc hơn trong Vista này là dễ dàng hơn nhiều nhưng tôi đang sử dụng XP.

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