Tại sao Bộ mã hóa SSL của Window bị hạn chế theo một số chứng chỉ SSL nhất định?


14

Sự cố: Windows Server 2008 R2 sẽ chỉ hỗ trợ các bộ mật mã ssl sau khi sử dụng một số chứng chỉ nhất định trên máy chủ:

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA

Điều này ngăn các máy khách XP kết nối với máy chủ do API Mật mã XP không hỗ trợ bất kỳ mật mã AES nào theo mặc định.
Do đó, các lỗi sau sẽ xuất hiện trong nhật ký máy chủ khi cố gắng kết nối bằng trình duyệt internet explorer hoặc máy tính từ xa. (vì họ sử dụng CAPI của microsoft)

Lỗi Schannel 36874 "Kết nối TLS 1.0 được nhận từ ứng dụng máy khách từ xa, nhưng các bộ mật mã được máy khách hỗ trợ đều được máy chủ hỗ trợ. Yêu cầu kết nối SSL không thành công."
Lỗi Schannel 36888 "Cảnh báo gây tử vong sau đây đã được tạo: 40. Trạng thái lỗi bên trong là 1204"


2
Gary, nếu bạn đã giải quyết câu hỏi của riêng bạn, hãy đánh dấu nó là đã trả lời.
Bernie White

Câu trả lời:


14

Nếu chứng chỉ đang được sử dụng trên máy chủ được tạo bằng tùy chọn Khóa kế thừa trong biểu mẫu yêu cầu chứng chỉ, khóa riêng cho chứng chỉ đó sẽ được lưu trữ trong khung API mã hóa kế thừa của Microsoft. Khi máy chủ web cố gắng xử lý các yêu cầu bằng khung công tác Cryptographic thế hệ tiếp theo (CNG) mới, có vẻ như một cái gì đó liên quan đến khóa riêng RSA được lưu trữ trong khung kế thừa không có sẵn cho khung mới. Do đó, việc sử dụng các bộ mật mã RSA bị hạn chế nghiêm trọng.

Giải pháp:
Tạo yêu cầu chứng chỉ bằng mẫu Khóa CNG trong trình hướng dẫn yêu cầu chứng chỉ tùy chỉnh.

MMC | Quản lý chứng chỉ máy tính cục bộ | Thư mục chứng chỉ cá nhân | (nhấp chuột phải) | Tất cả các nhiệm vụ -> Hoạt động nâng cao | Tạo yêu cầu tùy chỉnh | "Tiến hành không có chính sách tuyển sinh" | chọn "(không có mẫu) Khóa CNG" | tiến hành hoàn thành yêu cầu chứng chỉ theo nhu cầu của bạn.

Xác minh rằng khóa nằm đúng vị trí:
http://msdn.microsoft.com/en-us/l Library / bb204778 (VS85) .aspx
http://www.jensign.com/KeyPal/index.html

Các công cụ để xác minh bộ mật mã chính xác:
http://pentestit.com/2010/05/16/ssltls-audit-audit-web-servers-ssl-ciphers/
https://www.ssllabs.com/

Cài đặt bộ mật mã SSL:
http://support.microsoft.com/kb/245030
http://bloss.technet.com/b/steriley/archive/2007/11/06/changing-the-ssl-codes-order -in-internet-explorer-7-on-windows-vista.aspx

Điều này khiến chúng tôi mất một tuần để tìm ra. Tôi hy vọng điều này sẽ cứu ai đó cùng rắc rối.


Bất cứ ai cũng biết làm thế nào để làm điều này - hoặc giải quyết vấn đề khác - cho các chứng chỉ tự ký?
MGOwen

Cảm ơn bạn rất nhiều Gerry cho công việc của bạn và chia sẻ kết quả của bạn! Chúng tôi đã mở Trường hợp hỗ trợ của Microsoft và chính Microsoft không thể tìm hiểu lý do tại sao một số khách hàng nhất định không thể kết nối. Chúng tôi đã có vấn đề chính xác như bạn mô tả. Nhưng theo technet.microsoft.com/en-us/l Library / ff625722 (v = ws.10) .aspx Microsoft tự khuyên bạn nên sử dụng Mẫu khóa kế thừa để lưu trữ khả năng tương thích tốt nhất! Công việc tuyệt vời!

2

Có chính xác vấn đề này bản thân mình và bài đăng này đã tiết kiệm cho tôi rất nhiều thời gian vì vậy cảm ơn tất cả!

Giải pháp của Gary là tại chỗ nhưng tôi đã giải quyết vấn đề đơn giản bằng cách chuyển đổi PFX sang PEM và sau đó quay lại PFX một lần nữa bằng cách sử dụng openssl. PFX mới đã nhập chứng chỉ trong IIS giống với sự khác biệt mà tôi có thể thấy các mật mã bị thiếu.

Đây là cách:

openssl pkcs12 -in mycert.pfx -out mycert.cer -nodes

Sau đó chia tệp cer thành ba, khóa, chứng chỉ và chứng chỉ trung gian [s]

openssl pkcs12 -export -out mycert-new.pfx -inkey mycert.key \
-in mycert.crt -certfile mycert-intermediate.crt

Sau đó, nếu bạn nhập tệp .pfx mới vào IIS, nó sẽ sử dụng tất cả các mật mã mà bạn muốn thấy.

Vì vậy, không cần phải cấp lại giấy chứng nhận.


Điều này có hiệu quả với tôi trong một tình huống tương tự, nhưng ngược lại với câu hỏi ban đầu: vai trò AD FS trên Windows Server 2012 R2 yêu cầu bạn sử dụng API Legacy cho yêu cầu chứng chỉ - nhưng sau đó nó chỉ hiển thị 2 mật mã AES hiển thị ở trên! Xuất, đóng gói lại khóa bằng OpenSSL và nhập lại cũng giải quyết như vậy - các giao thức khác đột nhiên bắt đầu hoạt động. Cảm ơn, @gelilloadbad!
ewall

0

Cảm ơn, bài viết của bạn đã giúp tôi, mặc dù vấn đề của tôi không hoàn toàn giống nhau.

Tuy nhiên, nguyên nhân là do lỗi cấu hình API WINHTTP SERVER của tôi. IP của tôi đã thay đổi và khi tôi đặt chứng chỉ máy chủ mới vào máy "MY", tôi đã bỏ qua mã trả về ALREADY_EXISTS cho httpsetServiceConfiguration.

Vì vậy, tôi đã sử dụng chứng chỉ TLS của máy chủ trước đó có tên chung không đúng và không khớp với tên máy chủ mới của tôi.

Nếu bạn không thực hiện HTTPDeleteServiceConfiguration () hoặc dòng lệnh "Netsh http xóa sslcert 0.0.0.0:8443", bạn sẽ gặp một lỗi khó chịu với các triệu chứng sau:

1) Trong TLS, Client Hello của bạn ngay lập tức được đáp ứng với gói TCP từ máy chủ của bạn với các bit cờ Ack và Reset. (Tôi nghĩ là một cảnh báo bắt tay thất bại?)

2) Người xem sự kiện nhận được "Cảnh báo gây tử vong sau đây đã được tạo: 40. Trạng thái lỗi bên trong là 107."

"Yêu cầu kết nối SSL 3.0 đã được nhận từ ứng dụng khách từ xa, nhưng không có bộ mật mã nào được ứng dụng khách hỗ trợ được máy chủ hỗ trợ. Yêu cầu kết nối SSL đã thất bại."

Vì vậy, trước khi bạn theo đuổi một bộ mật mã không khớp, hãy đảm bảo rằng bạn thực sự đang sử dụng chứng chỉ máy chủ mà bạn muốn sử dụng với:

         netsh http show sslcert

và kiểm tra các giá trị băm!


Câu trả lời này rất không rõ ràng và không có nhiều ý nghĩa. Bạn nên đặt mục tiêu trả lời trực tiếp "Tại sao Bộ mã hóa SSL của Window bị hạn chế theo một số chứng chỉ SSL nhất định?" và theo dõi với một lời giải thích về lỗi Schannel.
Bernie White

0

Đây có thể là sự cố KeySpec = 2 - AT_SIGNATURE

certutil -verifystore -v "Dấu vân tay của chứng chỉ" của tôi để xác minh giá trị KeySpec. Nếu là 2, bạn sẽ cần xuất chứng chỉ dưới dạng tệp PFX và sau đó chạy certutil -importpfx AT_KEYEXCHANGE để sửa lỗi.


Đó là vấn đề trong trường hợp của tôi là tốt. Trong thực tế, câu trả lời này là người duy nhất thực sự cố gắng chỉ ra nguyên nhân. Tuy nhiên, câu trả lời sẽ được hưởng lợi từ một lời giải thích tại sao AT_SIGNATURE không đủ cho các bộ mật mã không phải ECDHE - bởi vì các bộ như vậy RSA không chỉ được sử dụng để xác thực (chữ ký), mà còn cho trao đổi khóa.
Jakub Berezanski
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.