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

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

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

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

На сервере должен быть установлен КриптоПро CSP версии не ниже 4.0 R4 (4.0.9963). Но полная поддержка описанных далее возможностей и команд появилась начиная с версии КриптоПро CSP 5.0 R2 (5.0.11944).

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

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

     

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

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

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

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

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

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

Примечание. Для сборок КриптоПро CSP до 5.0.11944 используется другой вариант команды:

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

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

 

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

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

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

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

Property # 65280 found->CP_CERT_SHADOW_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

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

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

+

+

+

 *Исправлено и работает при условии, что на сервере используется более новая сборка КриптоПро CSP, чем 5.0.11944.

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

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

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

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

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