Просроченный сертификат службы Service Bus Gateway

Недавно на наш портал перестали работать все сразу рабочие процессы, а также еще некоторое функции. После поиска причины было обнаружено, что остановились службы «Service Bus Gateway» и «Service Bus Message Broker» по причине истекшего сертификата.

Смотрим, что за сертификат – самоподписной на 5 лет. Вот тут для нас была первая засада. В Windows 2012R2 можно выпустить самоподписной сертификат на один год. Хорошо, пусть пока будет на один год.

Далее смотрим как новый сертификат привязать к этим службам. Оказывается, на прямую никак, т.е. нет такой функции как замена истекшего сертификата. Его можно заменить только когда он еще не истек. Решение — перевести дату на то время, когда сертификат был действительный.

Переводим дату, выпускаем сертификат, пытаемся подвязать его к службе (пока какой командой не важно, весь процесс будет описан ниже) и получаем сообщение, что данный сертификат не подходит. Вот это была вторая засада.

Никакой информации о том, какие параметры нужны для сертификата мы найти не смогли.

В конечно итоге нашли следующее решение.

  1. Делаем резервную копию сервера. (у нас она была).
  2. Переводим дату на сервере на то время, когда все работало.
  3. Запускаем программу «Service Bus Configuration» и покидаем ферму. Да, после этого система уже не будет работоспособной.
  4. Еще раз запускаем программу «Service Bus Configuration» и делаем новую ферму.

Все это было сделано, чтобы получить новый самоподписной сертифика на 5 лет удовлетворяющий требования службы.

  1. Выгружаем и копируем файл сертификата.
  2. Откатываем систему из архива.

Да, соглашусь, решение так себе.

  1. На восстановленной системе устанавливаем выгруженный сертификат в «локальный компьютер» папка «Личное» и копируем его же в папку «Доверенный корневые центры сертификации».
  2. Находим наш новый сертификат в папке «Личное» и в свойствах присваиваем ему «Понятное имя»
  3. Теперь делаем два скрипта 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 часа.

После того, как он отработает все рабочие процессы нужно перезапустить.

На этом все.

 

Источник.