2010-06-09 30 views
15

Tôi cố gắng để cấu hình một WCF server \ client để làm việc với SSLYêu cầu HTTP bị cấm với chương trình xác thực khách hàng 'Anonymous'

tôi nhận được ngoại lệ sau đây:

The HTTP request was forbidden with client authentication scheme 'Anonymous'

Tôi có một tự được lưu trữ trên máy chủ WCF. tôi đã chạy hhtpcfg cả chứng chỉ client và server của tôi được lưu trữ trong Cá nhân và dân tin cậy trên máy Local

Đây là mã máy chủ:

binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate; 
binding.Security.Mode = WebHttpSecurityMode.Transport; 
_host.Credentials.ClientCertificate.Authentication.CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.PeerOrChainTrust; 
_host.Credentials.ClientCertificate.Authentication.RevocationMode = X509RevocationMode.NoCheck; 
_host.Credentials.ClientCertificate.Authentication.TrustedStoreLocation = StoreLocation.LocalMachine; 
_host.Credentials.ServiceCertificate.SetCertificate("cn=ServerSide", StoreLocation.LocalMachine, StoreName.My); 

Khách hàng Mã số:

binding.Security.Mode = WebHttpSecurityMode.Transport; 
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate; 
WebChannelFactory<ITestClientForServer> cf = 
       new WebChannelFactory<ITestClientForServer>(binding, url2Bind); 
cf.Credentials.ClientCertificate.SetCertificate("cn=ClientSide", StoreLocation.LocalMachine, StoreName.My); 
      ServicePointManager.ServerCertificateValidationCallback 
        += RemoteCertificateValidate; 

Xem web_tracelog.svclog và trace.log cho thấy máy chủ không thể tự xác thực chứng chỉ ứng dụng khách Chứng chỉ của tôi không được ký bởi Ủy quyền CA nhưng đây là lý do tại sao tôi đã thêm chúng vào Người đáng tin cậy ....

Tôi bị thiếu gì? Tôi đang thiếu gì?

Trả lời

7

Bí quyết là làm Giấy chứng nhận Khách hàng hợp lệ,

Để làm điều đó bạn có hai lựa chọn:

1) làm cho nó tự ký và sau đó đặt nó dưới "Trusted Root Certification Authority".

Rõ ràng là trong quá trình sản xuất, bạn muốn chứng chỉ ứng dụng khách của bạn được ký bởi một CA tin cậy chứ không phải tự ký. xem http://msdn.microsoft.com/en-us/library/ms733813.aspx

2) Ký chứng chỉ ứng dụng khách của bạn bằng chứng chỉ khác mà bạn đã tạo (gọi là MyCA) và đặt MyCA trong "Trusted Root Certification Authority" và có chứng chỉ ứng dụng khách trong "Trusted People". Bằng cách này, môi trường phát triển của bạn thậm chí còn gần gũi hơn với việc triển khai.

Làm thế nào để tạo ra và ký tên vào giấy chứng nhận: Look dưới http://msdn.microsoft.com/en-us/library/bfsktky3.aspx

Dưới đây là một loạt các lệnh tôi đã sử dụng:

1) makecert -r -pe -ss My -sr LocalMachine -a sha1 - sky exchange -n cn = MyCA -sv "MyCAPrivate.pvk"

2) makecert -pe -ss My -sr LocalMachine -a sha1 -sky exchange -n cn = SignedClientCertificate -iv "MyCAPrivate.pvk" -ic " MyCAPublic.cer "

+1

lệnh thứ hai không thành công với Lỗi: Không thể tải chứng chỉ tổ chức phát hành ('MyCAPublic.cer') – TDaver

1

Sự reas trên tôi đã nhận được lỗi này là do trong webconfig của tôi, các dịch vụ web có URL là http://localhost/myservicename.svc và trên máy chủ dev của chúng tôi, chúng tôi đã có một FQDN http://dev.myname.com/myservicename.svc.

Kiểm tra lại web.configs của bạn để đảm bảo URL cho dịch vụ web đang trỏ đến vị trí thích hợp.

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