Настройка IIS на одновременное использование сертификатов ГОСТ и RSA при использовании свойства linked
Опубликовано Илья Харченко on 2020-11-23 21:26

В случае, когда к одному веб-серверу необходимо настроить доступ по TLS со стороны клиентов, использующих различные браузеры, часть из которых имеет поддержку ГОСТ TLS, а часть - нет, можно настроить IIS на сервере на работу с двумя сертификатами сервера с различными криптоалгоритмами – ГОСТ и RSA. При этом на сервере будет использоваться один и тот же ip-адрес и порт для подключения клиентов.

Если сертификат сервера с алгоритмом RSA планируется использовать с одним из Microsoft RSA CSP – то следует использовать свойство shadow, описанное в другой статье. Далее описан вариант, когда сертификат сервера с алгоритмом RSA будет установлен с использованием КриптоПро RSA CSP и свойства linked.

Отличие shadow и linked заключается в том, что при shadow реализация TLS в варианте RSA делается с помощью Microsoft Schannel SSP, а для linked – на стороне сервера всегда используется реализация TLS от КриптоПро (и для ГОСТ, и для RSA).    

На сервере должен быть установлен КриптоПро CSP версии не ниже 5.0 R2 (5.0.11944).

Последовательность действий по настройке: 

  1. Проверить, что добавлен компонент поддержки RSA в КриптоПро CSP – в оснастке Удаления или изменения программ – правой кнопкой мыши на КриптоПро CSP – Изменить.

  2. Добавить на сервере необходимые сертификаты Центров Сертификации (ЦС), которые выдали сертификаты веб-сервера в соответствующие хранилища локального компьютера – Доверенные корневые ЦС и, если есть – в Промежуточные ЦС
  3. Установить сертификат сервера с алгоритмом ГОСТ в хранилище Личные локального компьютера с привязкой к ключу в контейнере с использованием криптопровайдера КриптоПро ГОСТ CSP: Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider или Crypto-Pro GOST R 34.10-2012 Strong Cryptographic Service Provider. Не рекомендуется ставить пароль на этот контейнер, иначе придётся вводить его каждый раз после перезагрузки сервера в момент первого подключения клиента по TLS.
  1. Установить сертификат RSA в хранилище Личные локального компьютера с привязкой к ключу в контейнере с использованием криптопровайдера КриптоПро RSA CSP: Crypto-Pro Enhanced RSA and AES CSP Не рекомендуется ставить пароль на этот контейнер, иначе придётся вводить его каждый раз после перезагрузки сервера в момент первого подключения клиента по TLS.
  1. Отключить на сервере в панели КриптоПро CSP на вкладке Настройки TLS устаревшие cipher suit-ы в разделе Сервер:

Для применения изменений требуется перезагрузка сервера. 

  1. Запустить cmd (от администратора), перейти в папку установки КриптоПро CSP - по умолчанию \Program Files\Crypto Pro\CSP и выполнить команду: 

csptest -property -linkedthumbprint="отпечаток сертификата RSA" -cert "отпечаток сертификата ГОСТ" -machine  

Внимание! При копировании отпечатков из окна просмотра свойств сертификата, не захватывать непечатные символы в начале строки. Нужно будет убрать пробелы внутри отпечатков (если есть), и между названием опции -linkedthumbprint и значением не должно быть пробелов, только знак "=", например: 

csptest -property -linkedthumbprint=cdc6afd1eceae8cefd3689ebda4ad49e626ef776 -cert aae86068649073777590a604721382f2f2adc842 -machine

В опции -cert можно вместо отпечатка указать значение (или его часть) поля Общее имя (Common Name) сертификата сервера с алгоритмом ГОСТ. Если внутри значения есть пробелы – то значение нужно заключить в кавычки. 

  1. Сертификат веб-сервера с алгоритмом ГОСТ назначить в IIS в привязке на нужном веб-сайте. Если этот сертификат веб-сервера с алгоритмом ГОСТ уже был ранее назначен в привязке на IIS – то после выполнения команды задания свойства linked – требуется повторно выбрать тот же сертификат ГОСТ в привязке на IIS. 

После этого клиенты могут подключаться по ГОСТ TLS, если браузер его поддерживает. Если нет – то автоматически будет использоваться другой сертификат сервера, отпечаток которого был задан в свойстве linked.

Для того, чтобы проверить, установлено ли свойство linked для сертификата ГОСТ в хранилище сертификатов "Личные" локального компьютера, можно использовать команду: 

csptest -certprop -CERT "часть имени поля Common Name или отпечаток сертификата"

Важно - написание названия опции большими буквами (-CERT) означает поиск в хранилище локального компьютера, а не текущего пользователя.

В выводе информации о сертификате будет указано:

Property # 65281 found->CP_CERT_LINKED_CERT_PROP_ID id.

Thumbprint is: <значение отпечатка сертификата RSA>

Например:

csptest -certprop -CERT aae86068649073777590a604721382f2f2adc842

Клиенты должны доверять тем ЦС, которые выпустили соответствующие сертификаты сервера.

При использовании двустороннего TLS (когда браузер клиента предъявляет сертификат клиента) не все варианты сочетания криптоалгоритмов сертификатов сервера и клиента будут работать.

Далее приводится таблица совместимости для некоторых браузеров.

 

 

Internet Explorer 11

Chromium Gost

86.0.4240.198

Edge (chromium)

86.0.622.61

Chrome

86.0.4240.198

Односторонний tls

+

+

+

+

Двусторонний  tls с сертификатом клиента ГОСТ

+

+

-

-

Двусторонний  tls с сертификатом клиента на Microsoft RSA CSP

-

-

+

+

Двусторонний  tls с сертификатом клиента на КриптоПро RSA CSP

Повторно спрашивает сертификат клиента и потом

выдает ошибку

+

+

+

При необходимости очистить свойство linked для ГОСТ сертификата сервера в хранилище Личные локального компьютера можно использовать команду без указания отпечатка сертификата RSA:

csptest -property -linkedthumbprint  -cert "отпечаток сертификата ГОСТ" -machine 

Если после этого будет нужно продолжать использовать тот же сертификат ГОСТ в IIS (уже без cвязки c сертификатом RSA) – требуется повторно выбрать тот же сертификат ГОСТ в привязке на IIS. 

(1 плюсик(ов))
Класс!
Не очень :(

Коментарии (0)