Чому SSL Cipher-Suite Window обмежується певними сертифікатами SSL?


14

Проблема: Windows Server 2008 R2 буде підтримувати лише наступні пакети шифрів ssl при використанні певних сертифікатів на сервері:

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA

Це запобігає підключенню клієнтів XP до сервера, оскільки XP Cryptographic API не підтримує шифри AES за замовчуванням.
Як результат, наступні помилки з'являються в журналах сервера при спробі підключення за допомогою Internet Explorer або віддаленого робочого столу. (оскільки вони використовують CAPI мікрософт)

Помилка Schannel 36874 "З'єднання TLS 1.0 отримано з віддаленого клієнтського додатка, але додаток шифрових пакетів, підтримуваних клієнтом, підтримується сервером. Запит на з'єднання SSL не вдався."
Помилка Schannel 36888 "Створено наступне фатальне сповіщення: 40. Внутрішній стан помилки 1204"


2
Гері, якщо ти вирішив власне питання, будь-ласка, познач його як відповідь.
Берні Вайт

Відповіді:


14

Якщо сертифікат, який використовується на сервері, генерувався за допомогою параметра Legacy Key у формі запиту на сертифікат, приватний ключ для цього сертифіката буде зберігатися у застарілому криптографічному API API. Коли веб-сервер намагається обробити запити, використовуючи свою нову рамку криптографічного наступного покоління (CNG), виявляється, що щось, пов’язане з приватним ключем RSA, що зберігається у спадщині, недоступне для нового фрейму. Як результат, використання шифрових пакетів RSA сильно обмежене.

Рішення:
Створіть запит на сертифікат, використовуючи шаблон CNG Key у майстрі користувальницького запиту сертифікатів.

MMC | Менеджер сертифікатів локальних комп'ютерів | Папка особистих сертифікатів | (клацання правою кнопкою миші) | Усі завдання -> Розширені операції | Створення спеціального запиту | "Продовжуйте без політики реєстрації" | виберіть "(без шаблону) ключ CNG" | приступайте до виконання запиту на сертифікат відповідно до ваших потреб.

Перевірка того, що ключ знаходиться в потрібному місці:
http://msdn.microsoft.com/en-us/library/bb204778(VS.85).aspx
http://www.jensign.com/KeyPal/index.html

Інструменти для перевірки правильності набору шифрів:
http://pentestit.com/2010/05/16/ssltls-audit-audit-web-servers-ssl-ciphers/
https://www.ssllabs.com/

Налаштування шифру SSL:
http://support.microsoft.com/kb/245030
http://blogs.technet.com/b/steriley/archive/2007/11/06/changing-the-ssl-cipher-order -in-internet-explorer-7-on-windows-vista.aspx

На це знадобився тиждень, щоб розібратися. Я сподіваюся, що це врятує когось однакові неприємності.


Хтось знає, як це зробити - чи іншим способом вирішити питання - для самопідписаних сертифікатів?
MGOwen

Дуже дякую Джеррі за вашу роботу та обмін результатами! Ми відкрили Корпус підтримки Microsoft, і сам Microsoft не зміг з'ясувати, чому певні клієнти не можуть підключитися. Випуск у нас був точно так, як ви описали. Але відповідно до technet.microsoft.com/en-us/library/ff625722(v=ws.10).aspx сама Microsoft рекомендує використовувати шаблон Legacy Key для архівування найкращої сумісності! Чудова робота!

2

Я сам отримав цю саму проблему, і ця публікація врятувала мені багато часу, тому дякую всім!

Рішення Гері не вдається, але мені вдалося вирішити проблему, просто перетворивши PFX в PEM, а потім знову повернувшись до PFX, використовуючи openssl. Нова PFX імпортувала сертифікат в IIS точно так само, з тією різницею, що я бачу відсутні шифри.

Ось як:

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

Потім розділіть файл cer на три, ключ, сертифікат та проміжний сертифікат [s]

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

Потім, якщо ви імпортуєте новий .pfx файл в IIS, він буде використовувати всі шифри, які ви очікуєте побачити.

Тому не потрібно перевидавати сертифікат.


Це працювало для мене в ситуації, подібній, але м'якої, протилежної оригінальному питанню: роль AD FS в Windows Server 2012 R2 вимагає використання Legacy API для запиту cert - але тоді він показує лише 2 шифри AES показано вище! Експорт, перепаковка ключа за допомогою OpenSSL та повторний імпорт вирішують його так само - інші протоколи раптово починають працювати. Дякую, @gelilloadbad!
ewall

0

Дякую, ваша посада мені допомогла, хоча моя проблема була зовсім не такою.

Однак причиною стала помилка конфігурації API WINHTTP SERVER API. Мій IP змінився, і коли я помістив новий сертифікат сервера в машину "МОЙ", я проігнорував код повернення ALREADY_EXISTS для HttpSetServiceConfiguration.

Тому я використав попередній сертифікат TLS сервера, який мав неправильну загальну назву і не відповідав моєму новому імені сервера.

Якщо ви не зробите HttpDeleteServiceConfiguration () або командний рядок "netsh http delete sslcert 0.0.0.0:8443" правильно, ви отримаєте неприємну помилку з цими симптомами:

1) У TLS ваш клієнт Hello негайно зустрічається з пакетом TCP з вашого сервера з встановленими бітами прапора Ack і Reset. (Я думаю, що попередження про помилку рукостискання, я думаю?)

2) Переглядач події отримує "Згенеровано наступне фатальне сповіщення: 40. Внутрішній стан помилки - 107."

"Запит на з'єднання SSL 3.0 отримано від віддаленого клієнтського додатка, але жоден із шифрових наборів, підтримуваних клієнтською програмою, не підтримується сервером. Запит на з'єднання SSL не вдався."

Тому перед тим, як переслідувати невідповідність пакету шифрів, переконайтеся, що ви справді використовуєте сертифікат сервера, який ви хочете використовувати:

         netsh http show sslcert

і перевірити хеш-значення!


Ця відповідь дуже неясна і не має великого сенсу. Вам слід прагнути безпосередньо відповісти "Чому SSL Cipher-Suite Window обмежується певними сертифікатами SSL?" і слідкуйте за поясненням помилки Шеннеля.
Берні Вайт

0

Це може бути проблема KeySpec = 2 - AT_SIGNATURE

certutil -verifystore -v Мій "Thumbprint of cert" для перевірки значення KeySpec. Якщо його 2, вам потрібно буде експортувати сертифікат як файл PFX, а потім запустити certutil -importpfx AT_KEYEXCHANGE, щоб виправити його.


Це було і в моєму випадку. Насправді ця відповідь є єдиною, яка насправді намагається вказати на причину. Однак у відповіді буде корисно пояснення, чому AT_SIGNATURE не є достатньою для шифрових пакетів, що не належать до ECDHE - тому що для таких пакетів RSA використовується не тільки для аутентифікації (підпису), але і для обміну ключами.
Якуб Березанський
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.