tôi đã phát triển một dịch vụ tự lưu trữ WCF, mà tôi có hai yêu cầu bảo mật cơ bản vì nó sẽ được truy cập qua Internet:TransportWithMessageCredential không có chứng chỉ đủ an toàn cho dịch vụ WCF?
Lớp vận chuyển nên ngăn chặn giả mạo và đánh hơi, đặc biệt là việc thu hồi các chứng thực thông tin đăng nhập. Đây là những gì SSL làm, nhưng từ những gì tôi đã thấy thiết lập SSL đòi hỏi phải cài đặt các chứng chỉ (ngoại trừ có thể thông qua this hack sử dụng các tập tin chứng chỉ đơn giản), mà tôi không muốn phải làm.
Lớp xác thực phải bao gồm trình xác thực tên người dùng/mật khẩu.
tôi cấu hình dịch vụ của tôi để sử dụng:
<security mode="TransportWithMessageCredential">
<message clientCredentialType="UserName" />
<transport clientCredentialType="Basic" />
</security>
Thậm chí nếu các lớp truyền tải là HTTP (không HTTPS), điều này làm cho WCF tạo một lớp bảo mật tương đương với SSL? Nếu không, sự khác biệt về mặt sức mạnh an ninh là gì?
Ngoài ra, có cách nào để bảo mật điểm cuối dữ liệu meta mà không sử dụng chứng chỉ SSL (không cần thiết nhưng sẽ được đánh giá cao) không?
Đây là mã cấu hình đầy đủ của tôi cho các dịch vụ tự lưu trữ:
<?xml version="1.0"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>
<system.serviceModel>
<services>
<service name="MyService">
<host>
<baseAddresses>
<add baseAddress = "http://localhost:8000/Services" />
</baseAddresses>
</host>
<endpoint address ="MyService" binding="wsHttpBinding" contract="IMyService">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name="Binding1" maxReceivedMessageSize="2147483647">
<security mode="TransportWithMessageCredential">
<message clientCredentialType="UserName" />
<transport clientCredentialType="Basic" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="True"/>
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="CR.Common.Services.CustomValidator, Common" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
Cảm ơn bạn!
Tôi chỉ muốn cài đặt đơn giản mà không có chứng chỉ nếu có thể. Một cái gì đó mà máy chủ sẽ yêu cầu một tên người dùng/mật khẩu tùy chỉnh (KHÔNG xác thực Windows) và sau đó đảm bảo tính bảo mật và tính toàn vẹn của thông tin liên lạc. –
Như tôi đã nói với bạn, bạn cần "một cái gì đó" để ký và mã hóa tin nhắn, đó là lý do tại sao bạn UserNamePasswordValidator cần một chứng chỉ. Bạn có thể tìm thấy một số hack mà làm cho nó hoạt động mà không có giấy chứng nhận, nhưng sau đó tin nhắn của bạn sẽ không được ký/mã hóa. Việc cài đặt chứng chỉ khá dễ dàng và bạn cũng có thể sử dụng chứng chỉ tự động được ký (được tạo trên chính máy chủ) để không mất tiền. – Fabske
Tôi đã chỉ sử dụng chứng chỉ máy chủ, mặc dù tôi vẫn tin rằng nó có thể được thực hiện đơn giản hơn cho scenarii giống như tôi. –