Требование ввести пароль при получении сертификата из хранилища сертификатов на клиентском компьютере связано с тем, что сертификат был импортирован с установленным параметром «Включить надежную защиту закрытого ключа»:
Это часто устанавливается как часть стандартных процессов защиты сервера. Он предназначен для ситуаций, когда сертификат аутентифицирует пользователя в удаленной системе, когда он присутствует.
Поскольку запрос пароля связан с процессом импорта сертификатов и не является внутренним свойством сертификатов, покупка новых сертификатов ничего не изменит.
Я не знаю способа программно передать пароль в хранилище сертификатов при его получении. Однако, если вы думаете об этом, даже если вы добились успеха, вам придется каким-то образом защитить указанный пароль. Вы можете зашифровать пароль к вашему файлу .config, но теперь вам нужно сохранить ключ шифрования. И так далее ... Где-то будет свободный конец, который делает бессмысленной "надежную защиту закрытого ключа".
По сути, ваш клиент не может использовать его в обоих направлениях: он не может "включить надежную защиту закрытого ключа" и не должен вводить пароль каждый раз, когда требуется сертификат клиента. Гораздо лучше, чтобы они правильно хранили сертификат.
Для автоматической клиентской службы наиболее безопасный способ хранения клиентского сертификата заключается в следующем:
- Запустите службу клиента под определенной учетной записью, которая имеет криптографически надежный пароль.
- Удалить сертификат из хранилища LocalMachine. Сертификаты, установленные в хранилище LocalMachine, доступны для любой учетной записи, работающей на компьютере.
- Установите сертификат в хранилище CurrentUser учетной записи службы клиента. Это будет означать, что сертификат доступен только для учетной записи службы клиента. Когда сертификат установлен, обязательно снимите флажок «Включить надежную защиту закрытого ключа».