2012-11-16 32 views
9

Ứng dụng C# .net của tôi đang sử dụng dịch vụ web HTTPS. Như cerificate bây giờ là về để hết hạn, tôi đang cố gắng để cập nhật nó với một cái mới mà tôi đã được đưa ra (một tập tin .jks mà tôi đã chuyển đổi thành .p12 bằng cách sử dụng keytool javasdks '). Tôi nghĩ rằng điều này sẽ dễ dàng, như tôi biết làm thế nào để làm điều đó, nhưng nó sẽ không hợp tác.Dịch vụ web SSL: Không thể tạo kênh bảo mật SSL/TLS

Những gì tôi đã làm như vậy cho đến nay:

  • giấy chứng nhận nhập khẩu để CURRENT_USER \ Cá Nhân
  • giấy chứng nhận nhập khẩu để LOCAL_MACHINE \ Cá Nhân
  • Với người sử dụng (apppoolidentity) truy cập đúng khóa bí mật của chứng chỉ thông qua công cụ winhttpcertcfg .. Dưới đây là danh sách các quyền cho chứng chỉ.
  • sử dụng công cụ tìm kiếm riêng tư, tôi cũng đã định vị tệp khóa thực tế và được cấp quyền truy cập ứng dụng vào nó. (Trong tuyệt vọng).

    C: \ Program Files (x86) \ Windows Resource Kits \ Tools> winhttpcertcfg -l -c LOCAL_MACHINE \ -s của tôi "9000 - Blabla" Microsoft (R) WinHTTP Certificate Configuration Tool Bản quyền (C) Microsoft Corporation 2001.

    chứng Matching: CN = 9000 - Blabla C = NO L = "c/o Blabla AS, Blablaaddress" OU = 957.839.827 OID.1.2.240.111111.1.9.8 = 12345678 OID. 1.2.240.111111.1.9.2 = Kiểm tra Blabla O = BlaBla AS OU = MULTI-ALLOWED

    tài khoản bổ sung và các nhóm với quyền truy cập vào các khóa bí mật bao gồm: BUILTIN \ Administrators NT AUTHORITY \ SYSTEM IIS AppPool \ ASP.NET v4.0 BUILTIN \ Users NT AUTHORITY \ NETWORK SERVICE DIGITROLLDMZ \ IIS_WPG

url tôi đang truy cập vào vẻ bề ngoài một cái gì đó như thế này:

https://test.blabla.com/blabla-5.0/services/Blabla?wsdl 

... Nếu tôi truy cập nó từ các máy chủ trình duyệt web, tôi có được để chọn giấy chứng nhận, tôi chọn một hình mới, và nó nói không sao, xanh lá cây và SSL theo thứ tự và tất cả, nhưng mã ứng dụng của tôi, trông như thế này:

public static blabla.service.NettforhandlerService getNettforhandlerService(string applicationPath) 
    { 
    blabla.service.NettforhandlerService service = new blabla.service.NettforhandlerService(); 
    if (System.Configuration.ConfigurationManager.AppSettings["CertificateSerialNumber"] != null && System.Configuration.ConfigurationManager.AppSettings["CertificateSerialNumber"].Length > 0) 
    { 
     string serviceurl = service.Url; 
     X509Store store = new X509Store(StoreName.Root, StoreLocation.LocalMachine); 
     store.Open(OpenFlags.ReadOnly); 
     X509Certificate2Collection col = store.Certificates.Find(X509FindType.FindBySerialNumber, System.Configuration.ConfigurationManager.AppSettings["CertificateSerialNumber"], true); 

     ServicePointManager.Expect100Continue = true; 
     ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3; 
     ServicePointManager.CertificatePolicy = new TrustHBSCertificatePolicy(); 

     service.ClientCertificates.Add(col[0]); 

    } 
    return service; 
    } 

Chỉ kết quả đầu ra lỗi này:

The request was aborted: Could not create SSL/TLS secure channel. 

... tôi đã thêm một số thông tin dấu vết/debug để web.config, và những gì tôi phát hiện ra từ lỗi là thế này:

[Public Key] 
    Algorithm: RSA 
    Length: 2048 
    Key Blob: 30 82 01 0a 02 82 01 01 00 8e a6 72 c2 e1 67 16 e2 be be c3 30 89 8d bb 57 0b 48 f8 1d 09 b1 e3 26 42 c9 45 9e 02 b2 43 49 16 81 94 1b 18 d6 6d ef .... 
System.Net Information: 0 : [15624] SecureChannel#32061089 - Certificate is of type X509Certificate2 and contains the private key. 
System.Net Information: 0 : [15624] AcquireCredentialsHandle(package = Microsoft Unified Security Protocol Provider, intent = Outbound, scc  = System.Net.SecureCredential) 
System.Net Error: 0 : [15624] AcquireCredentialsHandle() failed with error 0X8009030D. 
System.Net Information: 0 : [15624] AcquireCredentialsHandle(package = Microsoft Unified Security Protocol Provider, intent = Outbound, scc  = System.Net.SecureCredential) 
System.Net Error: 0 : [15624] AcquireCredentialsHandle() failed with error 0X8009030D. 
System.Net.Sockets Verbose: 0 : [15624] Socket#38259205::Dispose() 
System.Net Error: 0 : [15624] Exception in the HttpWebRequest#54558071:: - The request was aborted: Could not create SSL/TLS secure channel. 
System.Net Error: 0 : [15624] Exception in the HttpWebRequest#54558071::GetResponse - The request was aborted: Could not create SSL/TLS secure channel. 
System.Net Verbose: 0 : [15624] 

tôi biết điều này có vẻ như người dùng đúng/sắc hasn không được cho ac để chứng nhận (từ winhttpcertcfg), nhưng tôi rất chắc chắn rằng nó có, đó là lý do tại sao tôi bị mất ở đây,

hy vọng rằng ai đó có một số https-certificate/web-service -skills nghiêm trọng có thể giúp tôi ở đây :-)

Cảm ơn.

Kính trọng, Jørgen E.

edit1: thay đổi tiêu đề để một cái gì đó chính xác hơn. edit2: Thông tin mới:

In EventViewer/Windows Logs/Security there is an event "Audit Failure" connected to this: 

Cryptographic operation. 

Subject: 
    Security ID:  IIS APPPOOL\ASP.NET v4.0 
    Account Name:  ASP.NET v4.0 
    Account Domain:  IIS APPPOOL 
    Logon ID:  0x32498 

Cryptographic Parameters: 
    Provider Name: Microsoft Software Key Storage Provider 
    Algorithm Name: Not Available. 
    Key Name: {00E1A3F5-7400-41CA-8290-02983473AEAF} 
    Key Type: Machine key. 

Cryptographic Operation: 
    Operation: Open Key. 
    Return Code: 0x80090010 

Trả lời

3

Vấn đề được giải quyết, vẻ một Giấy chứng nhận trung gian đã mất tích, nhập nó vào Giấy chứng nhận trung gian trong MMC, và tất cả là tốt :-)

12

Không có nhiều thể được trích xuất từ ​​nhật ký, nhưng ...

Google-fu mang lại kết quả sau: 0x80090010 rất có thể là một lỗi truy cập chứng chỉ.

Từ đó, với xác suất cao mà tôi kết luận, bạn cần đặt quyền cho khóa cá nhân chứng chỉ SSL của mình - để IIS có thể truy cập nó. Xem: http://www.dotnetnoob.com/2011/01/how-to-give-iis-access-to-private-keys.html

câu hỏi tương tự với tùy chọn khác: The request was aborted: Could not create SSL/TLS secure channel

+3

Hi, và cảm ơn cho trả lời :-) .. Ive bây giờ nằm ​​một tập tin trong thư mục này: C: \ ProgramData \ Microsoft \ Crypto \ RSA \ MachineKeys ... tên tập tin là a23e3996925c33fec814f8ce35e4b1d9_57324829-0d1c-4ae4-ae60-1e2849f7749a ... Nếu tôi thêm quyền truy cập READ cho tính ứng dụng cho tệp này, thì nó hoạt động !! .. Nhưng tôi không thể xác định chứng chỉ này là gì, để tôi có thể thêm quyền truy cập thông qua các phương tiện thích hợp (winhttpcertcfg) :-(.. Bất kỳ ai biết cách xác định điều này? –

+1

Bạn có thể sử dụng một công cụ của Microsoft, FindPrivateKey.exe hoặc chỉ cần xóa khóa của bạn, ghi lại danh sách các tệp hiện có và nhập lại chứng chỉ/khóa (nếu bạn có PFX), lưu ý tệp mới được tạo. Tham khảo: http://msdn.microsoft.com/ru-ru/library/ms732026.aspx (FindPrivateKey) – DarkWanderer

+0

FindPrivateKey và kỹ thuật bạn chỉ định không đối lập với những gì tôi muốn đạt được :-) Tôi biết tên tệp của các phím máy -file, và muốn biết những gì chứng chỉ tập tin này được gắn vào, gây ra nó không phải là giấy chứng nhận mà tôi đang sử dụng, tôi đã xác định chứng chỉ tôi đang sử dụng với findprivatekey. –

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