Проблема
Я использую сертификаты Let's Encrypt на хосте Windows 2008R2. Сертификат нужен для Citrix Secure Gateway.
В один прекрасный день, после обновления сертификата средствами Windows ACME Simple версии 1.9.12.2 (letsencrypt.exe) сервис отказался запускаться, ссылаясь на то, что не имеет прав на чтение private key:
Read access to the selected certificate's private key failed.
Сервис исполняется от имени Network Service. Если в свойствах сертификата нажать Manage Private Keys… и попытаться дать права для Network Service, то появляется сообщение:
Unable to save permission changes on <<certificate name and date>> private keys. Access is denied.
Решение
Помогло применение PsExec.
Запускаем mmc от имени SYSTEM:
psexec -i -s mmc
добавляем оснастку для управления сертификатами локального компьютера и теперь мы можем дать права на private key этого сертификата.
Вероятная причина такого поведения - то что задача обновления сертификатов исполняется от имени SYSTEM.
Также, почему-то Citrix Secure Gateway отказывался запускаться пока я не дал права на чтение private key учетке, от имени которой я производил установку и конфигурирование.
Scheduled Task обновления сертификатов я буду запускать раз в неделю от имени учетки, которая устанавливала и конфигурировала Citrix Secure Gateway.
Еще нюанс. У меня Citrix Secure Gateway работает на одном хосте с Web Interface. Соответственно, Web Interface работает на 80 порту, а Secure Gateway на 443. При обновлении сертификата клиент win-acme обновляет (пересоздает) привязку
https://*:443
Я не разобрался как это изменить на уровне win-acme, однако добавил в scheduled task еще один Action для удаления привязки:
%systemroot%\system32\inetsrv\appcmd.exe set site /site.name:"Default Web Site" /-bindings.[protocol='https',bindingInformation='*:443:']
В итоге, список Actions в sheduled task у меня такой:
sc stop "CtxSecGwy" c:\letsencrypt\letsencrypt.exe --renew --baseuri "https://acme-v01.api.letsencrypt.org/" timeout /T 15 %systemroot%\system32\inetsrv\appcmd.exe set site /site.name:"Default Web Site" /-bindings.[protocol='https',bindingInformation='*:443:'] sc start "CtxSecGwy"
Посмотрим, что будет при следующем обновлении!!!
Discussion