Недавно на наш портал перестали работать все сразу рабочие процессы, а также еще некоторое функции. После поиска причины было обнаружено, что остановились службы «Service Bus Gateway» и «Service Bus Message Broker» по причине истекшего сертификата.
Смотрим, что за сертификат – самоподписной на 5 лет. Вот тут для нас была первая засада. В Windows 2012R2 можно выпустить самоподписной сертификат на один год. Хорошо, пусть пока будет на один год.
Далее смотрим как новый сертификат привязать к этим службам. Оказывается, на прямую никак, т.е. нет такой функции как замена истекшего сертификата. Его можно заменить только когда он еще не истек. Решение — перевести дату на то время, когда сертификат был действительный.
Переводим дату, выпускаем сертификат, пытаемся подвязать его к службе (пока какой командой не важно, весь процесс будет описан ниже) и получаем сообщение, что данный сертификат не подходит. Вот это была вторая засада.
Никакой информации о том, какие параметры нужны для сертификата мы найти не смогли.
В конечно итоге нашли следующее решение.
- Делаем резервную копию сервера. (у нас она была).
- Переводим дату на сервере на то время, когда все работало.
- Запускаем программу «Service Bus Configuration» и покидаем ферму. Да, после этого система уже не будет работоспособной.
- Еще раз запускаем программу «Service Bus Configuration» и делаем новую ферму.
Все это было сделано, чтобы получить новый самоподписной сертифика на 5 лет удовлетворяющий требования службы.
- Выгружаем и копируем файл сертификата.
- Откатываем систему из архива.
Да, соглашусь, решение так себе.
- На восстановленной системе устанавливаем выгруженный сертификат в «локальный компьютер» папка «Личное» и копируем его же в папку «Доверенный корневые центры сертификации».
- Находим наш новый сертификат в папке «Личное» и в свойствах присваиваем ему «Понятное имя»
- Теперь делаем два скрипта PowerShell. Запускаем их.
Первый: UpData_SB.ps1
Import-Module ServiceBus
$friendlyName = «<Понятное имя нового сертификата>»#Вытаскиваем thumbprint нашего сертификата
$cert = dir Cert:\LocalMachine\My | ? {$_.FriendlyName -eq $friendlyName}#добавляем сертификат
Set-SBCertificate -FarmCertificateThumbprint $cert.Thumbprint –EncryptionCertificateThumbprint $cert.Thumbprint#Останавливаем службу
Stop-SBFarm -Verbose#Обновляем службу
Update-SBHost#Запускаем службу
#Если у Вас несколько ферм, то нужно сначала обновить службу на каждой ферме, а потом запустить ее на первой. Так как у меня сервер один, я вписал старт в скрипт.
Start-SBFarm
Теперь обновляем сертификаты в Workflow Manager.
Второй: UpData_WFM.ps1
Import-Module WorkflowManager
$friendlyName = «<Понятно имя нового сертификата>»# Вытаскиваем thumbprint нашего сертификата
$cert = dir Cert:\LocalMachine\My | ? {$_.FriendlyName -eq $friendlyName}# добавляем сертификат
Set-WFCertificate -SslCertificateThumbprint $cert.Thumbprint -EncryptionCertificateThumbprint $cert.Thumbprint# останавливаем службу
Stop-WFHost -Verbose# обновляем
Update-WFHost# Запускаем
Start-WFHost
Посмотреть, что сертификат заменился можно следующими командами:
Для Service Bus:
Get-SBFarm
Get-SBFarmStatus
Для Workflow Manager
Get-WFFarm
Get-WFFarmStatus
Теперь в IIS для «Workflow Management Site», в привязках, заменяем старый сертификат на новый.
Восстанавливаем дату и перезапускаем сервер.
Службы все стартуют. Заходим на портал, рабочие процессы запустились и…. остановились с ошибкой.
Все дело в том, что в SharePoint есть таймер, который обновляет маркеры безопасности и при перезапуске они не обновляются.
Для запуска этого таймера нужно зайти на страницу администрирования и в разделе «Отслеживание» -> «Определения заданий» найти таймер «Обновление веб-канала метаданных доверенной службы маркеров безопасности.» и запустить его принудительно. Иначе нужно ждать 24 часа.
После того, как он отработает все рабочие процессы нужно перезапустить.
На этом все.