2010-02-23 11 views
7

Tôi đang cài đặt dịch vụ cửa sổ trên một máy mới. Dịch vụ thực hiện nhiều thao tác khác nhau trên SslStream qua TCP, sử dụng chứng chỉ đang gặp sự cố.Sự cố chứng chỉ với thông tin đăng nhập máy mới được cung cấp cho gói không được nhận dạng

Dịch vụ đã hoạt động tốt với cùng mã và cùng một chứng chỉ trên các máy 2 cửa sổ 2003 khác. Tuy nhiên, máy mới này là Windows 2003 với bộ vi xử lý 64 bit.

Tôi đang gặp phải sự cố này khi tôi cố gắng chạy dịch vụ có nhận dạng 'Tài khoản dịch vụ'. Nó hoạt động tốt với thông tin đăng nhập của riêng tôi. (Một lần nữa, nó hoạt động tốt trên 2 máy khác với tài khoản dịch vụ này)

Tôi chưa bật 'bảo vệ mạnh' trong khi nhập chứng chỉ.

Đây là dấu vết ngăn xếp.

System.ComponentModel.Win32Exception: Các thông tin cung cấp cho các gói không được công nhận tại System.Net.SSPIWrapper.AcquireCredentialsHandle (SSPIInterface SecModule, String gói, CredentialUse ý định, SecureCredential scc) tại System.Net.Security.SecureChannel.AcquireCredentialsHandle (CredentialUse credUsage, SecureCredential & secureCredential) tại System.Net.Security.SecureChannel.AcquireClientCredentials (Byte [] & vân tay) tại System.Net.Security.SecureChannel.GenerateToken (Byte [] đầu vào, Int32 bù đắp, Int32 đếm, Byte [] & đầu ra) tại System.Net.Security.SecureChannel.NextMessage (Byte [] đến, Int32 bù đắp, Int32 count)
tại System.Net.Security.SslState.StartSendBlob (Byte [] đến, Int32 đếm, AsyncProtocolRequest asyncRequest)
tại System.Net.Security.SslState.ProcessReceivedBlob (Byte [] bộ đệm, số Int32, AsyncProtocolRequest asyncRequest)
tại System.Net.Security.SslState.StartReadFrame (Byte [] đệm, Int32 readBytes, AsyncProtocolRequest asyncRequest)
tại System.Net.Security.SslState.StartReceiveBlob (Byte [] đệm, AsyncProtocolRequest asyncRequest) tại System.Net.Security.SslState.CheckCompletionBeforeNextReceive (ProtocolToken nhắn, AsyncProtocolRequest asyncRequest) tại System.Net.Security.SslState.StartSendBlob (Byte [] đến, Int32 đếm, AsyncProtocolRequest asyncRequest)
tại System.Net.Security.SslState.ForceAuthentication (Boolean receiveFirst, Byte [] buffer, AsyncProtocolRequest asyncRequest)
tại System.Net.Security.SslState.ProcessAuthentication (LazyAsyncResult lazyResult) tại System.Net.Security. SslStream.AuthenticateAsClient (String targetHost, X509CertificateCollection clientCertificates, SslProtocols enabledSslProtocols, Boolean checkCertificateRevocation)

+1

Nhìn vào kết quả tìm kiếm đầu tiên: http://www.google .com/search? q = "Thông tin đăng nhập + được cung cấp + tới + gói + đã + không + được nhận diện" –

+0

Tôi đã xem chuỗi chủ đề đó, Wim.Và nó giải thích chính xác những gì đang xảy ra ở đây. Lý do nó không hiệu quả với tôi là tôi phải giải quyết vấn đề này cho một 'tài khoản dịch vụ' mà không thể được sử dụng để đăng nhập vào máy và cài đặt chứng chỉ theo danh tính đó. Nhưng đúng cách để giải quyết nó cho 'everbody' được đề cập trong bài viết sau mà tôi đã đăng trong 'trả lời'. – cdpnet

Trả lời

9

Tôi thấy vấn đề và giải pháp của nó.

Ý tưởng là cấp quyền cho tài khoản được sử dụng cho nhận dạng dịch vụ.

Cần sử dụng công cụ WinHttpCertCfg.exe. Điều này rất hữu ích cho các ứng dụng sử dụng chứng chỉ ứng dụng khách để nhận ủy quyền.

Nó được giải thích rõ ràng ở đây. http://support.microsoft.com/kb/901183

Nhờ Feroze Daud (http://ferozedaud.blogspot.com/), người đã trả lời tôi trên một diễn đàn khác.

+0

+1 cảm ơn vì đã chia sẻ giải pháp –

0

Tôi đã gặp sự cố này khi chạy dưới tài khoản ASP.NET hoặc khi sử dụng dịch vụ cửa sổ (trong tài khoản Hệ thống cục bộ). Nếu bạn đang chạy dưới ASP.NET, cho Windows 2003, bạn cần sử dụng công cụ WinHttpCertCfg.exe như được mô tả bởi cdpnet ở trên. Windows 2008 R2 cho phép bạn truy cập các quyền sử dụng GUI, đó là một cải tiến tốt đẹp.

Tuy nhiên, khi chạy dưới dạng dịch vụ cửa sổ, bạn cần đảm bảo chứng chỉ nằm trong kho chứng chỉ cá nhân, bằng cách đi vào mmc và thêm snap-in chứng chỉ cho tài khoản dịch vụ windows hoặc nếu bạn đang sử dụng tài khoản 'Hệ thống cục bộ', chỉ nhận được snap-in cho máy tính cục bộ.

Đây là sự khác biệt tôi đã tìm thấy ...

Nếu bạn đã cài đặt các chứng chỉ cá nhân để lưu trữ giấy chứng nhận của người dùng của riêng bạn và sao chép và dán nó vào cửa hàng máy tính địa phương, điều này không phải lúc nào cũng làm việc. Tuy nhiên, nếu bạn xóa chứng chỉ từ cửa hàng máy tính cục bộ, thư mục cá nhân, bạn có thể nhấp chuột phải vào thư mục cá nhân trong cửa hàng máy tính cục bộ, sau đó nhập và đi qua trình hướng dẫn.

Vì một số lý do, điều này sẽ khắc phục và gán quyền chính xác để sử dụng chứng chỉ. Chúc may mắn!

-1

Tôi đã làm những gì ở đây được mô tả cho một Serv 2003 và vẫn không thể làm cho nó hoạt động vì các thông tin "cung cấp cho gói không được nhận dạng".

Tôi đã thử tất cả các giải pháp trên không thành công.

Cuối cùng tôi đã nhận nó để làm việc làm như sau:

  1. makecert -pe -n "CN = CERT" -ss tôi -sr LocalMachine -a sha1 -sky trao đổi -eku 1.3.6.1.5.5. 7.3.1 -in "CERT" -là MY -ir LocalMachine -sp "Nhà cung cấp Mật mã Đồ họa RSA của Microsoft" -sy 12 CERT.cer
  2. Sử dụng bản sao MMC từ Cá nhân đến Gốc tin cậy
  3. Sử dụng chứng chỉ được tạo (.cer) cho cuộc gọi X509 từ ứng dụng dịch vụ của bạn.

TẠI SAO ... ai biết ..... vui mừng nó làm việc cho tôi .... hy vọng điều này làm cho nó dễ dàng hơn cho người khác